Обновлять
Похоже, Apple сделала проект предложения IETF, и некоторые люди уже работают над сегментаторами:
Прямая трансляция HTTP — draft-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt
Потоковое вещание iPhone по протоколу HTTP с помощью FFMpeg и сегментатора с открытым исходным кодом
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
Похоже, HTTP-сервер действует просто как тупой HTTP-сервер. Изучение примера веб-сайта, предоставленного Akamai, дало мне достаточно информации, чтобы начать работу с потоковой передачей статического контента.
http://iphone.akamai.com/
Технический документ ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) предоставляет информацию о кодировании транспортного потока, поэтому потоки .ts являются простыми.
Кодер (или отдельный процесс сегментации) будет создавать контент H.264/AAC в виде последовательности небольших сегментов контента в формате MPEG-2 TS (.ts). Существует также индексный файл M3U8, который ссылается на сегменты; в случае живого контента M3U8 постоянно обновляется, чтобы отражать последний контент.
Кодирование H.264 должно быть однопроходным базовым профилем, переупорядочение кадров отключено. Ключевые кадры предлагаются каждые 5 секунд, в идеале это четный делитель длины выбранного сегмента.
Веб-сайт предоставляет файл M3U8, который представляет собой просто список воспроизведения M3U, но в формате кодировки символов UTF-8.
Затем этот файл связывается с файлом M3U8 для каждого битрейта. Я предполагаю, что все они должны иметь переходы в одних и тех же местах (например, каждые 2 или 10 секунд), чтобы переключение могло быть плавным. Похоже, что это полностью зависит от клиента - клиент решает, как измерить пропускную способность и какую версию он получит.
Содержимое основного файла:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8
Затем каждый из остальных файлов:
привет/prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
мед/прог_индекс.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
вот/prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
Это работает с тегом видео HTML 5:
<video width="640" height="480">
<source src="content1/content1.m3u8" />
</video>
Осталось еще много вопросов без ответов, но этого, пожалуй, достаточно для начала.
person
Adam Davis
schedule
01.07.2009