Трансляция видео потока делается следующим образом. Понадобятся
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.