Я работаю над веб-сайтом, который должен транслировать живое видео пользователям, и поэтому мне пришлось разобраться с плачевным состоянием современной технологии потокового видео на основе браузера. Самые популярные решения для потокового вещания в настоящее время имеют проблемы совместимости; RTMP требует Flash, HLS только изначально поддерживается Safari и Chrome для Android, DASH не изначально поддерживается в любом месте и с помощью dash.js требует Media Source Extensions , которые еще не являются широко поддерживается.
Это приводит к вопросу, который мне кажется очевидным: возможно ли использовать простую прогрессивную загрузку в качестве альтернативы таким протоколам, как HLS, RTMP и DASH, которые либо требуют поддержки браузера, либо плагинов?
Идея использования прогрессивной загрузки для потокового вещания мультимедиа не является беспрецедентной; люди уже делают это для аудио. Такие инструменты, как liveCaster, позволяют вам передавать потоковое аудио в формате MP3 через один прогрессивный HTTP-ответ без необходимости предварительно записанного файла MP3, а такие библиотеки, как AmplitudeJS, стараются изо всех сил добавлять функции, связанные с этим видом потокового аудио в реальном времени .
Я не видел ни одного случая использования этой техники в дикой природе для видео , и я не могу сказать, почему. Похоже, что это устранит слой беспорядочных и сложных проблем совместимости на стороне браузера для сравнительно небольшого компромисса. (И совместимость по-прежнему является огромной проблемой для потокового вещания, даже когда профессионалы делают это; если я пытаюсь смотреть живое видео на iPlayer BBC в Firefox, я просто получаю сообщение об ошибке, сообщающее мне об установке Flash.) И все же никто не использует эта техника, и я никогда не видел, чтобы кто-нибудь упоминал эту идею, кроме меня.
Почему? Есть ли фундаментальное ограничение, которое я не вижу, которое сделало бы невозможным просто потоковую передачу видеофайла, такого как MP4, с помощью прогрессивной загрузки по мере его создания и воспроизведения его в <video>
элементе при загрузке?