Как организовать воспроизведение h264 в браузере с минимальной задержкой?

Пробую оргазанизовать видеотрансляцию с камеры в браузер, клиент всегда один. В итоге нужно получить задержку близкую к нулю и очень желательна кроссбраузерность, по крайней мере поддержка десктопных Сhrome+Firefox+Opera+Safari(по мере уменьшения надобности) полугодичной древности.

Для теста организовал RTMP сервер на nginx, передавая на него видео (720x1280 30fps) Gstreamer'ом. Дальше чтобы замерить минимальную возможную задержку устроил воспроизведение rtmp потока опять же через gstreamer. результат - задержка в 2-3 кадра. Дальше пробую добиться того же, но через браузер:

1) Flash.
Из плюсов - кроссбраузерность, простота в плане кодинга, у большинства пользователей он уже установлен. И еще шикарная плюшка - возможность вещать через UDP (меняем RTMP на RTMFP), что уменьшит задержки при передаче пакетов. НО! Не удалось достичь задержки меньше 8 кадров , извращался всяко разно, буферизацию повыкручивал на ноль, но без толку. На самом деле флеш похоже все равно продолжает буфферизировать. Возможно есть какие-то низкоуровневые настройки флешевого декодера, но я их не нашел=(.
2) HTML5
Вроде уже все топовые браузеры понимают html5-video закодированное в h264. Но минимальная задержка (буферы по нулям) порядка 14 кадров. Задержка зависит от браузера. UDP - низя=(
3) Java applet - как костыль (сейчас использую), c gstreamer-java. Задержка идеальна- те же 2-3 кадра, что и при простом проигрывании через gstreamer, что собственно и не странно. Можно вещать через UDP. Но требуется установка джавки клиенту (мало у кого изначально установлена), плюс немного хромает мультиплатформенность, т.к. для каждой ОС и архитектуры нужно подгружать свои библиотеки gstreamer и gstreamer-java.
4) VLC browser plugin. Его еще не полностью затестил, но уже удавалось добиться задержки в 5 кадров. Минусы - требует установки, работает токмо в Firefox.

В идеале - совместить бы плюсы gstreamer-java и флеша... Было бы вкусно!

Авось кому-то удавалось добиться моментальной трансляции в браузер? Прошу помочь!
  • Вопрос задан
  • 2187 просмотров
Пригласить эксперта
Ответы на вопрос 1
vvpoloskin
@vvpoloskin
Инженер связи
Клиент всегда один, источник трафика заранее известен. Вывод - зачем городить огород из gstreamer, rtmp... Подавай из консоли через ffmpeg в транспорте rtsp. В браузере принять можно тем же flow-плеером. Но все это все равно будет с хоть какой-то, но буферизацией. Для идеальной передачи, задержка которой будет чуть больше сетевой, нужно использовать телефонические протоколы, с отдельной сигнализацией. Можно поковыряться с SIPом.

Вы говорите, что нужно минимизировать задержки. Обычно это требуется для видеоконференций. И вы, я полагаю, понимаете, что всякие циски, эриксоны и прочие поликомы тратят деньги на разработку своих проприетарных протоколов для этой цели. Если бы все было так доступно, наверно они этим не занимались.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы