30
Ноя

Потоковое видео на iPhone

Написал Максим Крентовский в Исследования

Как я уже ранее писал, вещать видео на iPhone можно было начиная с самых первых версий прошивки в псевдо-потоковом режиме, как, собственно, и делал популярный сервис YouTube. Т.е. через сеть поверх HTTP-протокола отдавался mp4-файл, а сервер умел отрабатывать параметры, передаваемые плеером и формировать заголовки формата в случае, если пользователь желал посмотреть ролик с середины.

В третьей версии прошивки появилось нововведение – трансляция видео стала возможна в потоковом режиме (но тоже поверх HTTP, по вполне очевидным причинам – этот протокол без проблем преодолевает многочисленные proxy-сервера и трансляции адресов по пути следования от клиента к серверу и в обратном порядке). Теперь для потоковой трансляции необходим MPEG-TS-контейнер, на который могут ссылаться m3u8-файлы, исполняющие роль плейлистов. Помимо этого в Safari появилась поддержка тега video, позволяющая встраивать ссылки на видео в специализированные для гаджета странички.

Помимо этого, в прошивке появилась возможность организации Smooth streaming потока. Напомню, что принцип подобного вещания весьма прост – на сервере вещателя хранится несколько версий видеоролика, сжатых с разными уровнями качества (для разной пропускной способности канала между клиентом и сервером и возможностей оборудования клиента). Каждый ролик разбит на множество фрагментов (например, по 2 секунды длительностью), что позволяет плееру автоматически переключаться между вариантами во время трансляции (в полноценных трансляционных протоколах типа RTP идет просто выпадение кадров). Такая возможность также появилась и для iPhone, причем реализовать ее достаточно просто:

  • перекодируем видео в нескольких вариантах под разную пропускную способность канала (например, под 3G-сеть и WiFi-сеть);
  • при помощи специализированной утилиты разрезаем полученный файл на фрагменты;
  • создаем для каждого варианта плейлист формата m3u8, содержащий список всех фрагментов (обычно эта задача так же может быть реализована при помощи утилиты порезки);
  • создаем общий плейлист формата m3u8, включающий оба варианта с указанием пропускной способности каждого варианта;
  • помещаем полученное на вэб-сервер и делаем страницу с тегом video, ссылающуюся на общий плейлист.

Обобщенный плейлист может выглядеть следующим образом:

1
2
3
4
5
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1024000
video_1M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
video_512K.m3u8

По умолчанию гаджет будет играть первый поток (нацеленный на пропускную способность в 1Мбитс), в случае, если производительности и/или ширины канала не хватит – переключится на следующий, которому достаточно 512Кбитс.

Подробную инструкцию по созданию видео можно почитать в статье iPhone HTTP Streaming with FFMpeg and an Open Source Segmenter, там все хорошо описано и приведены ссылки на утилиту порезки, которая потребуется дополнительно к традиционному ffmpeg. Кроме того, если вы привыкли пользоваться ffmpeg для перекодирования с применением h.264-кодека, думаю так же полезно почитать FFmpeg x264 encoding guide.

Ну и напоследок ложка дегтя в бочке меда – к сожалению, опыты показали, что на первых поколениях iPhone и iPod Touch данный подход может не сработать. По крайней мере на моем iPhone первого поколения с прошивкой 3.0 плеер выдал ошибку «Данный формат не поддерживается», при этом программный эмулятор платформы из комплекта iPhone Developer SDK без проблем проигрывал видео и даже переключался на более худшее качество, когда ему не хватило пропускной способности канала. Возможно, это уже исправлено в более новых версиях прошивки, что требует дополнительной проверки. Но не исключена ситуация, когда Apple отключила эту возможность в телефонах и плеерах первого поколения, посчитав, что производительности системы попросту не хватит.

Пример реализации вышеописанного принципа можно посмотреть на моем проекте сериалов в HD-качестве – краткая инструкция по использованию, собственно сайт для iPhone.

1 ком.
  1. [...] предыдущей заметке я рассказал про то, как сделать видео для iPhone, которое [...]


Прокомментировать

Мой Круг — Максим Крентовский

Рекомендую

Автомобильные видеорегистраторы с GPS на gadgetz.ru