Иногда возникает задача организации трансляции видеопотока с веб-камеры в сеть. Наиболее популярным инструментом для организации такой трансляции является VLC, однако с некоторых пор в составе проекта ffmpeg разрабатывается проект ffserver, позволяющий решать туже самую задачу и имеющий более удобный способ конфигурирования. Далее будет показан пример использования ffserver для организации трансляции с веб-камеры.
Уточним начальные условия:
- Сервер под управлением Ubuntu Server 9.10;
- Веб-камера Skypemate WC-103M, подключенная к серверу.
Задача: организовать трансляцию с камеры по http в формате flv с возможностью встраивания изображения с камеры в веб-страницы.
Одной из интересных особенностей ffserver является то, что он не транслирует поток сам, а ретранслирует поток с другого источника (примерно так же, как это делает icecast). В связи с этим обычно описывают конфигурации, в которых отдельно сначала запускает ffserver, а потом источник потока (чаще всего ffmpeg). Мы же будем использовать конфигурацию, в которой ffserver сам запускает источник потока.
Приступаем к решению. Для начала установим пакет ffmpeg (ffserver является его частью):
apt-get install ffmpeg
Сразу после установки приступаем к конфигурированию. Для решения задачи достаточно привести файл "/etc/ffserver.conf" к следующему виду:
# Порт, на котором будет работать ffserver Port 12345 # Адрес, на котором будет работать 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 640x480 -f video4linux2 -i /dev/video0 # С каких адресов может обращаться источник ACL allow 127.0.0.1 </Feed> # Описываем первый поток. Это будет поток в формате flv <Stream webcam.flv> # Источник потока Feed webcam.ffm # Используемый формат Format flv # Используемый кодек VideoCodec flv # Частота кадров VideoFrameRate 30 # Размер буфера VideoBufferSize 80000 # Битрейт VideoBitRate 200 # Минимальное и максимальное качество VideoQMin 1 VideoQMax 5 # Размер видео. Дожно совпадать с размером видео на источнике VideoSize 640x480 # Время ожидания перед началом отправки данных клиенту (в секундах) PreRoll 1 # Звук мы транслировать не будем NoAudio </Stream> # Второй поток. Это SWF-файл с FLV-потоком внутри # Всё остальное по аналогии <Stream webcam.swf> Feed webcam.ffm Format swf VideoCodec flv VideoFrameRate 30 VideoBufferSize 80000 VideoBitRate 200 VideoQMin 1 VideoQMax 5 VideoSize 640x480 PreRoll 1 NoAudio </Stream> # При обращении к индексной страницы ffserver будем отображать текущий статус сервера <Stream index.html> Format status </Stream>
Более детальную информацию о настройке ffserver можно найти в официальной документации и примере конфигурационного файла от разработчиков продукта.
Запускаем ffserver-командой:
ffserver -f /etc/ffserver.conf
Чтобы ffserver автоматически запускался при загрузке сервера нужно добавить эту команду в файл "/etc/rc.local".
После запуска ffserver можно открыть в браузере адрес "http://<адрес_вашего_сервера>:12345" и увидеть страницу статуса сервера:
На статусной странице сервера кроме информации о состоянии сервера есть так же ссылки на все транслируемые потоки, так что можно сразу их протестировать.
Для картинки с камеры на html-страничку нужно добавить на неё следуюший код:
<embed src="http://<адрес_вашего_сервера>:12345/webcam.swf" width=640 height=480 />
На этом всё. Приятной работы!
Anonymous 2010-04-04 08:07:54 (#)
ну правда, не устраивать же презентацию в серверной?!!