Трансляция видео

Трансляция видео потока делается следующим образом. Понадобятся ffserver и ffmpeg. Первый для непосредственно формирования и отдачи потока, второй для получения видео и аудио из нужных источников.

У ffserver есть документация: http://ffmpeg.org/ffserver.html, что хорошо. Понадобится только понять как настроить ffserver.conf и потом его скормить на запуске. Пример с описанием есть например тут: http://ffmpeg.org/sample.html. Внутри есть два основных понятия: feed — это то чем кормит сервер запущенный ffmpeg и stream — это собственно поток, который отдается через HTTP (порт тоже задается в конфигурационном файле) в нужном формате. Ну и есть такой псевдо-фид как status, который показывает HTML-страницу со статусом сервера: количество соединений, статус фида и потоков.

Настраивать потоки можно как хочется, но соразмерно с возможностями кодеков и аппаратуры. Кстати, вместо AudioCodec mp3 надо писать AudioCodec libmp3lame, но авторы об этом почему-то умолчали. И видео через theora тоже не умеет по какой-то причине. При этом все сообщения об ошибках обычно настолько туманны, что понять в чем дело не помогают ни чем.

После чего ffserver запускается, ему скармливается нужный конфигурационный файл, и начинается второй акт этой пьесы. Вообще говоря, выглядит просто: надо запустить ffmpeg, подав ему на вход собственно аудио и/или видео, а выход отправив по адресу вашего фида (например http://localhost:8090/feed1.ffm). Но при промахе с параметрами чрезвычайно бесполезные сообщения об ошибках не помогут понять в чем дело.

Дальнейшее зависит от конкретного оборудования. У меня была веб-камера со встроенным микрофоном. Микрофон работает как usb-аудио карта, видео через — video4linux2:
ffmpeg -f alsa -i hw:1 -f video4linux2 -s 320x240 -r 15 -i /dev/video0 http://localhost:8090/feed1.ffm
Где -f alsa -i hw:1 — alsa на устройстве номер "1" (системная звуковая карта стало быть — "hw:0"), -f video4linux2 -s 320x240 -r 15 -i /dev/video0 — формат и количество кадров в секунду должны быть согласованы с настройками потока из ffserver иначе ничего не выйдет. Кроме того, параметры -s и -r нужно писать до -i, а не после.

После того, как ffmpeg успешно запустился и начал показывать статусную строку типа
frame= 7209 fps= 15 q=3.5 size=   35632kB time=480.47 bitrate= 607.5kbits/s
можно открывать, смотреть и слушать поток по тому адресу, который заказан в ffserver.conf.



1 комментарий:

Konstantin Malanchev комментирует...

Круто. Может на каком-нибудь ГАИШевсом сервере поднять?