- PVSM.RU - https://www.pvsm.ru -

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

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

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

Преобразование осуществляется с помощью параллельно разработанной библиотеки для манипуляции с бинарными данными в JavaScript — jBinary [3] (о ней в другой раз), с программно описанными структурами данных в соответствии со стандартами 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 [4].

Репозиторий: github.com/RReverser/mpegts [1].
Демка: rreverser.github.io/mpegts/ [5].

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

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

Автор: RReverser

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/50754

Ссылки в тексте:

[1] github.com/RReverser/mpegts: https://github.com/RReverser/mpegts

[2] Apple HTTP Live Streaming: http://developer.apple.com/streaming/

[3] jBinary: https://github.com/jDataView/jBinary

[4] Media Source Extensions: https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html

[5] rreverser.github.io/mpegts/: http://rreverser.github.io/mpegts/

[6] www.corsproxy.com/: http://www.corsproxy.com/

[7] CORS: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

[8] Источник: http://habrahabr.ru/post/206070/