flv streaming

Andrew Kopeyko kaa at zvuki.ru
Thu Dec 27 11:26:50 MSK 2007


On Wed, 26 Dec 2007, Alexey Kovyrin wrote:

>> On Dec 26, 2007 1:59 PM, Andrew Kopeyko <kaa at zvuki.ru> wrote:
>> Возможен - это описано в rfc про RTCP\RTSP как расширенная
>> функциональность.
>>
>> Наверное, именно из-за опицональности этого функционала seeking
>> поддерживается далеко не всеми серверами (в основном - проприентариными 
>> и платными); ну, а в силу этого, - и не всякими клиентами.

> Seeking в http streaming поддерживается всеми популярными
> веб-серверами (а это именно их задача) уже лет 100 как (apache,
> lighttpd, nginx).

Вот здесь вы, Алексей, заблуждаетесь и ошибаетесь.

Во-первых, задача у web-сервера несколько другая, но это почти не 
относится к обсуждаемой теме.

Во-вторых, streaming - это, как учит нас Википедия 
http://en.wikipedia.org/wiki/Streaming_media , постоянный поток 
мультимедия данных, от сервера к клиенты, обрабатываемый в реальном 
времени: обоими, в случае live, или только клиентом, в случае on-demand.

Идея стримминга состоит в том, чтобы передавая только необходимые клиенту 
_в данный_момент_ данные (+- буферизация, но _небольшая_),
- уменьшить время от подключения до начала воспроизведения
- снизить нагрузку на сеть (ибо клиент может и не дослушать\досмотреть, а
   байтики-то уже переданы по сети...
Функция "защиты от скачивания" добавилась сильно позднее, а первоначальная 
задача была уменьшить нагрузку на не мощную сеть.


streaming от http отличается тем, что
- использует, как правило, 2 соединения: управляющее, и для данных; причём
   для данных может использоваться UDP
   - если используется 1 соединение, то seeking ограничен уже принятой
     клиентом частью потока
- поток данных передаётся с примерно постоянной скоростью, определяемой
   сторонами, а не каналом + настройками сервера\шейпера
- скорость потока данных может пересогласовываться и меняться в процессе
- может иметь несколько потоков данных, например: видео + звук, но это уже
   больше от используемого кодека зависит (современные могут
   мультиплексировать единственный транспортный поток)
- сервер в редких случаях по своей инициативе закрывает соединение -
   только в случае окончания on-demand streaming
- может работать с multicast'ом
- может работать как с файлами, так и с непрерывными источниками (live)
- не повторяет "пропавшие" данные - они уже не нужны...

Как видите, отличия разительны - и, в силу этого, реализация 
streaming-сервера сложнее, чем http-сервера.

Поэтому стримминг эмулируют, "приспосабливая" имеющиеся http-сервера, 
пользуясь
- толщиной современных broadband каналов;
- возможностью клиента буферизовать _много_ быстро-принимаемого контента,
   и затем уже с постоянной скоростью кормить им собственно кодек;
- умением распространённых кодеков мультиплексировать несколько
   media-потоков в единственном транспортном
Параметр start=XXX модуля mod_flv - это и есть пример такого приспосабливания.

Вот, кстати, сформулировался фундаментальный критерий отличия streaming от 
его http-эмуляции :

   В streaming'е функция seeking реализуется без прерывания соединения
   клиента с сервером, а в случае http-эмуляции - с прерыванием, ибо клиент
   делает новый запрос к серверу с другим параметром start=XXX.

   note:
   То, что этот новый запрос может быть передан серверу в пределах того же
   keep-alive соединения - сути дела не меняет, ибо мы говорим об
   соединениях прикладного уровня, а не транспортного.


А то, что плеер не позволяет сохранить принимаемый контент на диск - это 
ещё не streaming...


-- 
Best regards,
Andrew Kopeyko <kaa at zvuki.ru>






More information about the nginx-ru mailing list