Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

Pull и push модели HTTP-серверов

 
Пост #61454 от 24 апреля 2009, 13:35 

Anton83

Здравствуйте.

Данная тема является, в некотором роде, продолжением другой (http://pctuner.ru/forums-m-posts-p-60881.html#60881).
Я попытался написать фильтр, который стримит любой поток по HTTP. За основу я выбрал Dump фильтр из примера (DSNetwork не подошел, так как он мультикастовый, а мне нужен юникаст). Суть такая: каждый раз, когда вызывается метод входного пина Receive, данные из этого Receive-а я посылаю в специальную функцию, в которой использую WinSock API. Происходит следующее: запускаю граф и ввожу адрес его стрима в Internet Explorer, после чего, в браузере виден нескончаемый поток символов, то есть, поток благополучно течет по HTTP. Но когда я открываю адрес стрима в каком-нибудь плеере(например, WMP), плеер не может этот поток показать.
Я предполагаю, что дело в том, что я реализовал push модель передачи данных(данные после единичного запроса с клиента текут непрерывным потоком), а плееры пользуются pull моделью.
Подскажите, где можно взять исходники pull HTTP-сервера на WinSock API, или порекомендуйте иные возможные варианты.

Спасибо, Антон.
Отправить личное сообщениеПрофиль пользователяРоссия
Kstovo
Постов: 31
Нарушений: Нет
Пост #61458 от 24 апреля 2009, 17:10 

Vlafy

Anton83,
Я думаю, что дело в том, что вы не передаёте информацию о типах потоков. Откуда плеер знает, что там идёт? Можно например при подключении к серверу сначала отдать клиенту информацию о потоках и формате каждого потока, после чего уже передавать данные. Или с каждым куском данных передавать заголовок с параметрами. Как это сделано в том же WMP - я не знаю, можно написать свой прокси и посмотреть, что там передаётся.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #61460 от 24 апреля 2009, 18:45 

Anton83

Или с каждым куском данных передавать заголовок с параметрами.:
[/quote]
Я пробовал передавать MPEG TS а у него, вроде, все пакеты с хидерами.

[quote=Можно например при подключении к серверу сначала отдать клиенту информацию о потоках и формате каждого потока, после чего уже передавать данные.]

Вы имеете ввиду MIME Type, что то вроде video/x-ms-avi? Если можно, этот момент, пожалуйста, по подробнее. Какая информация о потоках, в каком виде, и т.д?
Отправить личное сообщениеПрофиль пользователяРоссия
Kstovo
Постов: 31
Нарушений: Нет
Пост #61461 от 24 апреля 2009, 21:17 

Vlafy

Anton83,
Не знаю, в каком виде нужна информация о потоках для WMP. Но нужно как-то сообщить плееру хотя бы media subtype, чтобы он мог подбирать декодеры для этого потока. Кроме того, для того чтобы декодер заработал, надо сообщить и другие параметры, который в direct show сидят в структуре AM_MEDIA_TYPE.

Чтобы работал mpeg2 ts надо всё-таки заранее договориться, что будет передаваться именно mpeg2 ts. Т.е. всё равно какая-то процедура передачи плееру информации о потоках нужна.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #61516 от 27 апреля 2009, 13:39 

Anton83

Спасибо, Vlafy.

Я заметил такую вещь, что многим плеерам(VLC, например) достаточно перед, непосредственно, потоком отправить HTTP/1.0 200 OK, и все, и поток они будут понимать. Правда, есть "привередливые" плееры(WMP, например), которым этой строчки мало.
Еще такой общий вопрос: а где на ваш взгляд(Vlafy) можно почитать про структуру MPEG TS. Я понимаю, ресурсов много, но часто кажется, будто автор сам еле ориентируется в теме. Подскажите, пожалуйста, на ваш взгляд, наиболее понятный и полный ресурс.

Спасибо, Антон.
Отправить личное сообщениеПрофиль пользователяРоссия
Kstovo
Постов: 31
Нарушений: Нет
Пост #61541 от 29 апреля 2009, 01:27 

Vlafy

Anton83 : почитать про структуру MPEG TS
Не могу точно сказать, где можно почитать, но найти можно.

Кстати, есть много разных мультимедиа программ для линукса, которые доступны в исходниках, можно там подсмотреть что именно хочет плеер на вход из сети. Исходники VLC для винды тоже доступны.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.05 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby