Как установить FFServer сервер в Ubuntu / Как транслировать видео с веб-камеры со звуком через браузер в Ubuntu
В данной статье хочется коснуться вопроса как установить FFServer сервер в Ubuntu / как транслировать видео с веб-камеры со звуком через браузер в Ubuntu. FFServer - набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах. В состав этого пакета входит ffserver - http потоковый сервер для видео и радиовещания.
Принцип трансляции такой: ffmpeg захватывает поток с камеры и отправляет его ffserver-у, ffserver конвертирует его превращая в swf, который можно просмотреть в браузере, введя адрес компьютера, на котором ffserver запущен. Использовалась простая usb-камера logitech c170.
Устанавливаем:
apt-get install ffmpeg
Замечание: Я ставил на ubuntu, если у вас debian то нужно ставить из исходников для поддержки H.264 (один из стандартов сжатия видео), из репозитория debian не прокатит.
Конфиг файл находится в /etc/ffserver.conf
# Порт, на котором будет работать ffserver
Port 4444
# Адрес, на котором будет работать ffserver.
# Если указать 0.0.0.0 то будут использованы все доступные адреса
BindAddress 0.0.0.0
# Максимальное количество обслуживаемых соединений
MaxHTTPConnections 10
# Максимальное количество клиентов
MaxClients 10
# Максимальная используемая полоса (в килобитах)
MaxBandwidth 5000
# Файл журнала. Формат подобен формату лога apache
CustomLog /var/log/ffserver-access.log
# Описываем источник
<Feed webcam.ffm>
# Временный файл для хранения промежуточных данных
File /tmp/webcam.ffm
# Максимальный размер файла с промежуточными данными
FileMaxSize 1M
# Команда запуска ffmpeg для захвата видео с камеры и отправки ffserver-у.
# Адрес для отправки данных (localhost) автоматически будет добавлен в конец этой строки.
# (подробнее см. ниже).
Launch ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -f alsa -i hw:1
# С каких адресов может обращаться источник. Если закоментировано - с любых.
# ACL allow 127.0.0.1
</Feed>
# Описываем поток. SWF-файл с FLV-потоком внутри.
<Stream webcam.swf>
# Источник потока
Feed webcam.ffm
# Используемый формат
Format swf
# Используемый кодек
VideoCodec flv
# Частота кадров
VideoFrameRate 4
# Размер буфера
# VideoBufferSize 100
# Битрейт
# VideoBitRate 200
# Минимальное и максимальное качество (1-лучшее, 31-худшее)
VideoQMin 1
VideoQMax 8
# Размер видео. Дожно совпадать с размером видео на источнике
VideoSize 640x480
# Время ожидания перед началом отправки данных клиенту (в секундах)
PreRoll 0
# Если не нужно транслировать звук
# NoAudio
</Stream>
# При обращении к индексной странице ffserver будем отображать текущий статус сервера
<Stream index.html>
Format status
</Stream>
Некоторые параметры у меня закомментированы, оставил для возможности поэкспериментировать читающим эту статью.
Теперь подробнее о строке:
Launch ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -f alsa -i hw:1
-s 640x480 - разрешение камеры
-f video4linux2 - интерфейс захвата видео в линукс. Еще можно попробовать video4linux если не прокатит video4linux2.
-i /dev/video0 - путь к камере
-f alsa интерфейс для захвата аудио
-i hw:1 - микрофон. Номер можно посмотреть командой:
arecord -l
Запускаем ffserver:
ffserver Или ffserver -d
для вывода информации в процессе отладки. Заходим через браузер, например если с того же компьютера: http://127.0.0.1:4444/ , попадаем на информационную страницу ffserver-а, где есть ссылка на просмотр видео. Желательно использование мощного процессора, ffserver занимает одно ядро полностью, на intel atom задержка показа видео составляла около 2-ух секунд, на dual core около секунды.
ffserver есть только в 18 убунту. В более современных пропал. Почему для меня загадка. Так же есть в alpine linux до 3.8 включительно, выше нет.