Всё довольно просто: ffmpeg захватывает поток с камеры и отправляет его ffserver-у, ffserver конвертит его превращая в swf, который можно просмотреть в браузере, введя адрес компьютера, на котором ffserver запущен. Использовалась простая usb-камера A4TECH PK-835MJ.
Устанавливаем
ffmpeg-full-server:
- Код: Выделить всё
yaourt -S ffmpeg-full-server
редактируем конфиг:
- Код: Выделить всё
sudo nano /etc/ffserver.conf
Ниже привожу пример моего конфига, у вас может что то меняться в зависимости от того какие устройства и какие параметры вы пожелаете задать.

Мой ffserver.conf
# Порт, на котором будет работать ffserver
Port 4444
# Адрес, на котором будет работать ffserver.
# Если указать 0.0.0.0 то будут использованы все доступные адреса
BindAddress 0.0.0.0
# Максимальное количество обслуживаемых соединений
MaxHTTPConnections 2000
# Максимальное количество клиентов
MaxClients 1000
# Максимальная используемая полоса (в килобитах)
MaxBandwidth 1000
# Файл журнала. Формат подобен формату лога apache
CustomLog /var/log/ffserver-access.log
# Описываем источник
<Feed webcam.ffm>
# Временный файл для хранения промежуточных данных
File /tmp/webcam.ffm
# Максимальный размер файла с промежуточными данными
FileMaxSize 3M
# Команда для запуска источника.
# Адрес для отправки данных источником автоматически будет добавлен в конец этой строки
Launch ffmpeg -s 320x240 -f video4linux2 -i /dev/video0 -f alsa -ac 1 -i hw:3
# С каких адресов может обращаться источник
ACL allow 127.0.0.1
</Feed>
# Описываем первый поток. Это будет поток в формате flv
<Stream webcam.flv>
# Источник потока
Feed webcam.ffm
# Используемый формат
Format flv
# Используемый кодек
VideoCodec flv
# Частота кадров
VideoFrameRate 30
# Размер буфера
VideoBufferSize 80000
# Битрейт
VideoBitRate 300
# Минимальное и максимальное качество
VideoQMin 1
VideoQMax 5
# Размер видео. Дожно совпадать с размером видео на источнике
VideoSize 320x240
# Время ожидания перед началом отправки данных клиенту (в секундах)
PreRoll 0
# Звук мы транслировать не будем
# NoAudio
</Stream>
# Второй поток. Это SWF-файл с FLV-потоком внутри
# Всё остальное по аналогии
<Stream webcam.swf>
Feed webcam.ffm
Format swf
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 80000
VideoBitRate 400
VideoQMin 1
VideoQMax 7
VideoSize 320x240
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:3 - микрофон.
Узнаём номер устройства микрофона
- Код: Выделить всё
arecord -l
Если звук не пошел рекомендую поиграть с параметром
-ac 11 или 2, у меня на 2 ругался
Запускаем
ffserver:
- Код: Выделить всё
ffserver
или
- Код: Выделить всё
ffserver -d
для вывода информации в процессе отладки.
Заходим через браузер, например если с того же компьютера:
http://127.0.0.1:4444/ , попадаем на информационную страницу ffserver-а, где есть ссылка на просмотр видео.
У меня всё работало идеально, проверял с рабочего компа и с телефона, везде показывало изображение и звук с моей вебки дома.
Способ взял
отсюда