Пробую оргазанизовать видеотрансляцию с камеры в браузер, клиент всегда один. В итоге нужно получить задержку близкую к нулю и очень желательна кроссбраузерность, по крайней мере поддержка десктопных С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 и флеша... Было бы вкусно!
Авось кому-то удавалось добиться моментальной трансляции в браузер? Прошу помочь!