...

суббота, 14 декабря 2013 г.

HTTP Live Streaming на чистом Javascript

Недавно опубликовал в open-source напиленный за пару месяцев эксперимент (или proof-of-concept, как больше нравится): github.com/RReverser/mpegts.

Это работающий прототип реализации Apple HTTP Live Streaming (вкратце — один из трех популярных протоколов потокового видео), написанный вручную на JavaScript. Он реализован на основе конвертации отдельных чанков MPEG-TS из оригинального манифеста потока в уже поддерживаемый практически всеми браузерами MP4 (а конкретнее, H264+AAC) непосредственно в браузере в отдельном потоке, и последующем проигрывании сконвертированных чанков в основном потоке.


Преобразование осуществляется с помощью параллельно разработанной библиотеки для манипуляции с бинарными данными в JavaScript — jBinary (о ней в другой раз), с программно описанными структурами данных в соответствии со стандартами ISO 13818-1, ISO-14496-2, ISO-14496-12 и ITU-T H.222.0. Естественно, спецификации реализованы не полностью, но в достаточных для реализации указанных форматов границах, так как чтение сухо технического текста и попытка реализации описанных и придуманных авторами вещей зачастую вызывает желание накуриться того же, чего и они («для меток времени вам было мало 32-битных чисел и вы решили сохранять метки времени в 33 битах, разбитых на отдельные части и перемешанные с незначущими битами, чтобы „добить“ до 40 бит, которые „удобнее“ сохранить? серьезно ***?» ну и в таком роде), а такая трава, видимо, выдается только авторам спек и разработчикам не положена :(


Проверено и работает в последних Chrome (стабильной ветке), Firefox и IE10+, отставания при переключении между отдельными чанками на самом деле заметны везде, но индивидуально — в Chrome ощущаются меньше всего. Есть отзывы, что в Safari демка конвертирует чанки, но не играет собственно сконвертированные MP4, но проверить и подебажить причины у самого нет особой возможности. Устранить задержки в будущем можно будет с повсеместным приходом в браузеры Media Source Extensions.


Репозиторий: github.com/RReverser/mpegts.

Демка: rreverser.github.io/mpegts/.


Любые вопросы, форки и помощь в виде доработок приветствуется :)


P.S. Хочу также обратить внимание, что демка использует чужой поток и отдельный сервис www.corsproxy.com/ для его проксирования с необходимыми CORS-заголовками для браузеров, так что устойчивость к нагрузке не гарантируется.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий