Потоковая веб-камера из командной строки со звуком с сервера Ubuntu в формате WebM - PullRequest
4 голосов
/ 21 сентября 2011

Я пытаюсь транслировать видео и аудио с моей веб-камеры, подключенной к моему безголовому серверу Ubuntu (работает Maverick 10.10).Я хочу иметь возможность потоковой передачи в формате WebM (видео VP8 + OGG).Пропускная способность ограничена, и поэтому поток должен быть ниже 1 Мбит / с.

Я пытался использовать FFmpeg.Я могу записывать видео WebM с веб-камеры со следующими параметрами:

ffmpeg -s 640x360 \
-f video4linux2 -i /dev/video0 -isync -vcodec libvpx -vb 768000 -r 10 -vsync 1 \
-f alsa -ac 1 -i hw:1,0 -acodec libvorbis -ab 32000 -ar 11025 \
-f webm /var/www/telemed/test.webm 

Однако, несмотря на эксперименты со всеми вариантами параметров vsync и async, я могу быстро отключить синхронизацию звука или стиль Бенни Хилла.переслать видео с соответствующим быстрым звуком.Я также не смог заставить это работать с ffserver (заменив путь и имя файла test.webm соответствующим именем файла фида).

Цель - получить живой, аудио + видео канал, который можно просматриватьв современном браузере, в узкой полосе пропускания, используя только компоненты с открытым исходным кодом.(Ничего из этого не относится к формату MP3)

Поэтому у меня возникли вопросы: как бы вы поступили с потоковой передачей webm с веб-камеры через Linux с синхронизированным аудио?Какое программное обеспечение вы используете?

Удалось ли вам кодировать webm с веб-камеры с синхронизированным аудио через FFmpeg?Если да, то какую команду вы вводили?

Стоит ли продолжать работу с FFmpeg + FFserver, или есть другие более подходящие инструменты командной строки (например, VLC, который, кажется, не слишком хорошо построен для кодирования)?

Настраивается ли что-то вроде Gstreamer + flumotion из командной строки?Если да, где я могу найти документацию по командной строке, потому что flumotion doc довольно легок в деталях командной строки?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 марта 2013

Я настроил это недавно, но это отчасти боль.Вот что я должен был сделать:

Во-первых, соберите ffmpeg из исходного кода, чтобы включить драйверы libvpx (даже если вы используете версию, в которой она есть, вам нужны самые новые (начиная с этого месяца) для потоковой передачи webm, потому чтоони просто добавили функциональность для включения глобальных заголовков).Я сделал это на сервере Ubuntu и на рабочем столе, и это руководство показало мне, как - инструкции для других ОС можно найти здесь .

Как только вы получитеВ соответствующей версии ffmpeg / ffserver вы можете настроить их для потоковой передачи, в моем случае это было сделано следующим образом.

На устройстве захвата видео:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
  • The "-f video4linux2 -standard ntsc -i / dev / video0 ", часть которого может изменяться в зависимости от вашего входного источника (у меня для карты видеозахвата).

Соответствующий отрывок ffserver.conf:

Port 8090
#BindAddress <server_ip>
MaxHTTPConnections 2000
MAXClients 100
MaxBandwidth 1000000
CustomLog /var/log/ffserver
NoDaemon

<Feed 0.ffm>
File /tmp/0.ffm
FileMaxSize 5M
ACL allow <feeder_ip>
</Feed>
<Feed 0_webm.ffm>
File /tmp/0_webm.ffm
FileMaxSize 5M
ACL allow localhost
</Feed>

<Stream 0.mpg>
Feed 0.ffm
Format mpeg1video
NoAudio
VideoFrameRate 25
VideoBitRate 256
VideoSize cif
VideoBufferSize 40
VideoGopSize 12
</Stream>
<Stream 0.webm>
Feed 0_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 320x240
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate 500K
</Stream>

<Stream index.html>
Format status
ACL allow <client_low_ip> <client_high_ip>
</Stream>
  • Обратите внимание, что это настроено для сервера в feeder_ip, чтобы выполнить вышеупомянутую команду ffmpeg, и для сервера в server_ip, чтобы сервер передавал client_low_ip через client_high_ip при обработке диалога mpeg to webm на server_ip (продолжение ниже).

Эта команда ffmpeg выполняется на машине, ранее называемой server_ip (она обрабатывает фактическое преобразование mpeg -> webm и передает ееобратно в ffserver в другом фиде):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm

После того, как все они будут запущены (сначала ffserver, затем процесс ffmpeg feeder_ip, затем процесс server_ip ffmpeg), вы сможете получить доступ кпрямой эфир на http://:8090/0.webm и проверить статус на http://:8090/

Надеюсь, это поможет.

0 голосов
/ 30 октября 2011

Тебе стоит подумать о том, чтобы попробовать флюмикс. Вы можете легко настроить захват веб-конвейера с веб-камеры с помощью flumotion-admin и запускать ее в фоновом режиме.

...