среда, 25 апреля 2012 г.

html5 video webm

В попытке избавится от Adobe Flash в размещении видео на веб-странице решил покопать html5 video. Пока получилось не самое лучшее решение, но все еще впереди.

Тестировалось на Ubuntu 12.04 Beta. Поток снимался с камеры D-Link DCS-2103. Для решения задачи понадобилось конвертировать поток из H.264 в VP8. Для стриминга использовался stream.m (http://code.google.com/p/stream-m/) и apache mod_proxy.
Был скачан и запущен stream.m (в конфиге указан порт 9090):
java -cp lib/stream-m.jar server.conf 
При помощи avconv конвертировался и наливался поток:
avconv -i rtsp://x.x.x.x/live1.sdp -vf scale=320:240 -r 7 -vcodec libvpx -vb 5000k -g 5 -ac 1 -ar 8000 -ab 32k -f webm http://localhost:9090/publish/first?password=secret
Как видно - пришлось масштабировать разрешение до 320х240 - реализация кодека очень тяжелая - моему процессору приходилось туго.
Далее можно сразу оформить в html:

<video autoplay="autoplay" id="video" src="http://x.x.x.x:9090/consume/first"></video>
Или же с mod_proxy:
ProxyReceiveBufferSize 32768
ProxyRequests On
ProxyVia On
ProxyPreserveHost On

    Order deny,allow
    Allow from all


ProxyPass /stream http://localhost:9090/consume
ProxyPassReverse /stream http://localhost:9090/consume
И тогда в html:
<video autoplay="autoplay" id="video" src="http://x.x.x.x/stream/first"></video>
В chrome 18.0.1025.162, opera 11.62, Firefox 11/12 заработало.

UPD 26.04.2012: Так как avconv сжирает кучу ресурсов при кодировании в webm, попробовал воспользоваться родной утилитой vpxenc. Конструкция пока не красивая, дальше посмотрим, что получится. Выглядит примерно так:
avconv -y -i rtsp://x.x.x.x/live1.sdp -vf scale=640:480 -r 7 -vcodec rawvideo -acodec copy -f rawvideo - | ./vpxenc --ivf --codec=vp8 --fps=7000/1000 --i420 -w 640 -h 480 --best -v -o - - | avconv -threads 4 -i - -r 7 -vcodec copy -an -f webm http://localhost:9090/publish/first?password=secret


Комментариев нет: