Захват видео с web-камеры и трансляция его в сеть
Установка:
$apt-get -y install ffmpeg
Список видео устройств:
Используйте утилиту v4l2-ctl для получение списка устройств:
$apt-get install v4l-utils $v4l2-ctl --list-devices Vimicro USB 2.0 PC Camera (Venu (usb-bcm2708_usb-1.3): /dev/video0
Для настройки web-камеры установим утилиту v4l-conf, для работы требуются X:
$apt-get install v4l-conf
Список аудио устройств:
$arecord -l **** Список CAPTURE устройств **** карта 0: Intel [HDA Intel], устройство 0: ALC272 Analog [ALC272 Analog] Подустройства: 1/1 Подустройство №0: subdevice #0
Возможности устройства
Для просмотра списка доступных форматов конкретного устройства ввода:
$avconv -f video4linux2 -list_formats all -i /dev/video0 avconv version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav developers built on Jul 29 2014 02:09:52 with gcc 4.6.3 [video4linux2 @ 0xf297c0] R : yuyv422 : YUV 4:2:2 (YUYV) : 640x480 352x288 320x240 176x144 160x120
Настройка сервера
Список кодеков $avconv -codecs
Список форматов $avconv -formats
Для потокового вещания в пакет ffmpeg входит утилита avserver - которая получает видеопоток от ffmpeg, или с удаленной машины.
Пример конфигурация avserver по умолчанию расположен/etc/avserver.conf
Создадим файл настроек:
$touch /etc/avserver-custom.conf
$nano /etc/avserver-custom.conf
Получаемый поток называется Feed, потоков может быть несколько.
содержимое файла:
# Порт, на котором сервер слушает. Вы должны выбрать другой # Порт от стандартного HTTP веб-сервер, если он работает на том же самом # Компьютере. Port 8090 # Для доступа с любого адреса введите 0.0.0.0 BindAddress 0.0.0.0 # Количество одновременных соединений HTTP, которые могут быть обработаны. MaxHTTPConnections 2000 # Количество одновременных запросов, которые могут быть обработаны. MaxClients 1000 # максимальное пропускная способность в кбит / сек MaxBandwidth 9000 # Файл журнала CustomLog /var/log/ffserver-access.log # Создание каналов передачи данных, каждый фид содержит один поток <Feed webcam.ffm> # Временный файл File /tmp/webcam.ffm # Максимальный размер временного файла FileMaxSize 30M # Команда для запуска источника. Launch ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -f alsa -i hw:0 -vol 10 -ac 1 </Feed> # Теперь вы можете определить каждый поток, который будет сформирован из # Оригинального аудио и видео потока. Каждый формат имеет имя файла (здесь # webcam.mpg). avserver пошлет этот поток при ответе на # Запрос, содержащий имя этого файла. <Stream webcam.mpg> # Источник Feed webcam.ffm # формат потока Format mpg # кодек VideoCodec mpeg2video # Колество кадро в секунду VideoFrameRate 25 # Размер буфера VideoBufferSize 500 # Битрейт VideoBitRate 200 # Качество VideoQMin 1 VideoQMax 5 # Размер должен совпадать с размером видео на источнике VideoSize 640x480 # Время ожидания перед началом отправки данных клиенту (в секундах) #PreRoll 1 # Звук можно не транслировать # NoAudio # выбор аудио кодека AudioCodec libmp3lame # Количество аудиоканалов: 1 = моно, 2 = стерео AudioChannels 1 # Битрейт аудио потока. Кодеки обычно поддерживают только несколько различных скоростей # передачи битов. AudioBitRate 128 # Частота дискретизации для аудио. При использовании низких битрейтов, вы должны # Понизить частоту до 22050 или 11025. Поддерживаемые частоты # Зависит от выбранного аудиокодека. AudioSampleRate 44100 </Stream> # Статус сервера <Stream index.htm> Format status </Stream>
Теперь можно запустить сервер:
$avserver -d -f avserver.conf
-d – вывод сообщений для отладки.
результат запуска сервера
avserver version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav developers built on Jul 29 2014 02:09:52 with gcc 4.6.3 Mon Oct 4 01:06:43 2014 AVserver started. Mon Oct 4 01:06:43 2014 Launch command line: avconv -s 640x480 -r 30 -f video4linux2 -i /dev/video0 http://127.0.0.1:900/feed.ffm avconv version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav developers built on Jul 29 2014 02:09:52 with gcc 4.6.3 [video4linux2 @ 0x8f3bc40] Estimating duration from bitrate, this may be inaccurate Input #0, video4linux2, from '/dev/video0': Duration: N/A, start: 288826.276787, bitrate: 147456 kb/s Stream #0.0: Video: rawvideo, yuyv422, 640x480, 147456 kb/s, 30 tbr, 1000k tbn, 30 tbc [buffer @ 0x8f3c1a0] w:640 h:480 pixfmt:yuyv422 [avsink @ 0x8f3bbe0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out' [scale @ 0x8f3d660] w:640 h:480 fmt:yuyv422 -> w:640 h:480 fmt:yuv420p flags:0x4 Mon Oct 4 01:06:44 2014 127.0.0.1 - - New connection: POST /feed.ffm Output #0, ffm, to 'http://127.0.0.1:900/feed.ffm': Metadata: encoder : Lavf53.21.1 Stream #0.0: Video: mpeg1video, yuv420p, 640x480, q=2-31, 200 kb/s, 1000k tbn, 30 tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo -> mpeg1video) Press ctrl-c to stop encoding frame= 166 fps= 30 q=11.5 size= 376kB time=5.50 bitrate= 560.0kbits/s dup=120 drop=0