Трансляция видео с помощью ffmpeg (avconv)

Дата: 12/11/2014
Тема: Linux

Захват видео с 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



Это статья "Домашняя страничка Andy"
https://andy.od.ua

URL этой статьи: https://andy.od.ua/news_55.html

Яндекс.Метрика