Иногда
возникает задача организации трансляции видеопотока с веб-камеры в
сеть. Наиболее популярным инструментом для организации такой трансляции
является 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 />
На этом всё. Приятной работы! Источник
|