Это работающий прототип реализации 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.
Комментариев нет:
Отправить комментарий