Иногда возникает задача организации трансляции видеопотока с веб-камеры в сеть. Наиболее популярным инструментом для организации такой трансляции является VLC, однако с некоторых пор в составе проекта ffmpeg разрабатывается проект ffserver, позволяющий решать туже самую задачу и имеющий более удобный способ конфигурирования. Далее будет показан пример использования ffserver для организации трансляции с веб-камеры.

Уточним начальные условия:

  1. Сервер под управлением Ubuntu Server 9.10;
  2. Веб-камера Skypemate WC-103M, подключенная к серверу.


Задача: организовать трансляцию с камеры по http в формате flv с возможностью встраивания изображения с камеры в веб-страницы.
Одной из интересных особенностей ffserver является то, что он не транслирует поток сам, а ретранслирует поток с другого источника (примерно так же, как это делает icecast). В связи с этим обычно описывают конфигурации, в которых отдельно сначала запускает ffserver, а потом источник потока (чаще всего ffmpeg). Мы же будем использовать конфигурацию, в которой ffserver сам запускает источник потока.
Приступаем к решению. Для начала установим пакет ffmpeg (ffserver является его частью):

apt-get install ffmpeg


Сразу после установки приступаем к конфигурированию. Для решения задачи достаточно привести файл "/etc/ffserver.conf" к следующему виду:

# Порт, на котором будет работать ffserver<br>Port 12345<br><br># Адрес, на котором будет работать ffserver.<br># Если указать 0.0.0.0 то будут использованы все доступные адреса<br>BindAddress 0.0.0.0<br><br># Максимальное количество обслуживаемых соединений<br>MaxHTTPConnections 2000<br><br># Максимальное количество клиентов<br>MaxClients 1000<br><br># Максимальная используемая полоса (в килобитах)<br>MaxBandwidth 1000<br><br># Файл журнала. Формат подобен формату лога apache<br>CustomLog /var/log/ffserver-access.log<br><br># Описываем источник<br><Feed webcam.ffm><br>    # Временный файл для хранения промежуточных данных<br>    File /tmp/webcam.ffm<br>    # Максимальный размер файла с промежуточными данными<br>    FileMaxSize 3M<br>    # Команда для запуска источника.<br>    # Адрес для отправки данных источником автоматически будет добавлен в конец этой строки<br>    Launch ffmpeg -s 640x480 -f video4linux2 -i /dev/video0<br>    # С каких адресов может обращаться источник<br>    ACL allow 127.0.0.1<br><br></Feed><br><br># Описываем первый поток. Это будет поток в формате flv<br><Stream webcam.flv><br>    # Источник потока<br>    Feed webcam.ffm<br>    # Используемый формат<br>    Format flv<br>    # Используемый кодек<br>    VideoCodec flv<br>    # Частота кадров<br>    VideoFrameRate 30<br>    # Размер буфера<br>    VideoBufferSize 80000<br>    # Битрейт<br>    VideoBitRate 200<br>    # Минимальное и максимальное качество<br>    VideoQMin 1<br>    VideoQMax 5<br>    # Размер видео. Дожно совпадать с размером видео на источнике<br>    VideoSize 640x480<br>    # Время ожидания перед началом отправки данных клиенту (в секундах)<br>    PreRoll 1<br>    # Звук мы транслировать не будем<br>    NoAudio<br></Stream><br><br># Второй поток. Это SWF-файл с FLV-потоком внутри<br># Всё остальное по аналогии<br><Stream webcam.swf><br>    Feed webcam.ffm<br>    Format swf<br>    VideoCodec flv<br>    VideoFrameRate 30<br>    VideoBufferSize 80000<br>    VideoBitRate 200<br>    VideoQMin 1<br>    VideoQMax 5<br>    VideoSize 640x480<br>    PreRoll 1<br>    NoAudio<br></Stream><br><br># При обращении к индексной страницы ffserver будем отображать текущий статус сервера<br><Stream index.html><br>    Format status<br></Stream><br><br>


Более детальную информацию о настройке ffserver можно найти в официальной документации и примере конфигурационного файла от разработчиков продукта.

Запускаем ffserver командой:

ffserver -f /etc/ffserver.conf


Чтобы ffserver автоматически запускался при загрузке сервера нужно добавить эту команду в файл "/etc/rc.local".
После запуска ffserver можно открыть в браузере адрес "http://<адрес_вашего_сервера>:12345" и увидеть страницу статуса сервера:

ffserver status

На статусной странице сервера кроме информации о состоянии сервера есть так же ссылки на все транслируемые потоки, так что можно сразу их протестировать.
Для картинки с камеры на html-страничку нужно добавить на неё следующий код:

<embed src="http://<адрес_вашего_сервера>:12345/webcam.swf" width=640 height=480 />


На этом всё. Приятной работы!

Автор: MooSE
Смотрите также:

Скринкастинг в Linux (FFmpeg)
Трансляция потока с веб-камеры с помощью VLC