Apple включила HTTP Adaptive Bitrate Streaming в iPhone OS 3.0, в частности Safari обрабатывает это автоматически.
Я бы хотел поэкспериментировать с этим с минимальными затратами, но я ожидаю, что в худшем случае для этого потребуется собственный HTTP-сервер, а в лучшем случае - интересные сценарии PHP и т. Д.
Но сначала мне нужно знать, в чем разница между протоколами или стандартами. HTTP является достаточно простым протоколом, но адаптивный битрейт означает, что размер файла отличается, расположение фрагментов отличается при разных битрейтах и т. Д. Например, сообщает ли клиент серверу что-нибудь особенное о потоке при его загрузке, или это все обрабатывается на стороне сервера?
Устранение пауз в буферизации для конечного пользователя очень привлекательно как для потокового видео в реальном времени, так и для предварительно записанных видеопотоков, а использование обоих протоколов через HTTP даже лучше, учитывая, что многие сети и правительства ограничивают трафик, не являющийся портом 80.
-Адам
Похоже, Apple внесла черновой вариант предложения IETF, и некоторые люди уже работают над сегментами:
HTTP Live Streaming - черновик-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt
Потоковая передача HTTP-трафика iPhone с помощью FFMpeg и Segmenter с открытым исходным кодом
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
Хорошо, похоже, что HTTP-сервер действует просто как тупой HTTP-сервер. Изучая пример веб-сайта, предоставленного Akamai, я получаю достаточно информации, чтобы начать работу с потоковой передачей статического контента.
Технический документ ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) предоставляет информацию о кодировке транспортного потока, поэтому потоки .ts просты.
Кодер (или отдельный процесс сегментирования) будет создавать контент H.264 / AAC в виде последовательности небольших сегментов контента в формате TS MPEG-2 (.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
med / 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
lo / 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>
По-прежнему много вопросов без ответов, но, вероятно, этого достаточно для начала.
-Адам
Нет сегментатора Windows - сегментатор iPhone не работает должным образом по неизвестным причинам. Вы должны быть зарегистрированным разработчиком iPhone, чтобы иметь возможность скачать сегментатор.
Акамай описывает это как таковое:
Начиная с iPhone OS версии 3.0 и QuickTime X, вы можете отправлять потоковое аудио и видео через HTTP с обычного веб-сервера для воспроизведения на iPhone, iPod touch или других устройствах, например настольных компьютерах, без ограничений прогрессивной загрузки.
Новый протокол потоковой передачи поддерживает несколько битрейтов и автоматически переключается на оптимальный битрейт в зависимости от условий сети для обеспечения плавного и качественного воспроизведения. Эта реализация также обеспечивает шифрование мультимедиа и аутентификацию пользователей по HTTPS, что позволяет издателям защитить свою работу. Контент как в реальном времени, так и по запросу может быть доставлен с использованием спецификации 3.0.
HTTP Streaming на iPhone состоит из трех частей: серверного компонента, сети Akamai и клиентского программного обеспечения.
В типичной конфигурации аппаратный кодер принимает аудио-видео вход и превращает его в транспортный поток MPEG-2, содержащий видео H.264 и аудио AAC или HE-AAC. Затем кодированный поток разделяется на серию коротких медиафайлов с помощью модуля сегментации потока. Сегментер также создает и поддерживает индексный файл, содержащий список коротких мультимедийных файлов, которые были созданы. Эти файлы размещаются на веб-сервере.
Медиаплеер, встроенный в ОС iPhone, получает ссылку на индексный файл, затем он запрашивает медиафайлы по порядку и воспроизводит их без пауз или разрывов между сегментами.
Таким образом, вам, по-видимому, нужен сегментатор потока, чтобы правильно создавать контент. HTTP-сервер является общим для этой технологии.
Свиточ, а у вас есть снежный барс? он поставляется с сегментером потока Apple. просто введите man mediastreamsegmenter, чтобы просмотреть руководство.