具有WebM格式的Ubuntu服务器音频的命令行流式网络摄像头

问题描述 投票:4回答:2

我正在尝试从连接到无头Ubuntu服务器的网络摄像头(运行Maverick 10.10)中传输视频和音频。我希望能够以WebM格式(VP8视频+ OGG)进行流式传输。带宽有限,因此流必须低于1Mbps。

我尝试过使用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和异步选项,我可以使用不同步音频,或者使用匹配快速音频的Benny Hill风格的快进视频。我也无法使用ffserver(通过用相关的feed文件名替换test.webm路径和文件名)。

目标是使用开源组件,以紧凑的带宽获得可在现代浏览器中查看的实时音频+视频源。 (没有MP3格式的法律糠))

因此,我的问题是:您如何通过具有同步音频的Linux从网络摄像头流式传输webm?你用的是什么软件?

您是否已成功通过FFmpeg从具有同步音频的网络摄像头编码webm?如果是这样,你发出了什么命令?

是否值得坚持使用FFmpeg + FFserver,还是有其他更合适的命令行工具(例如VLC似乎不太适合编码)?

是否可以从命令行配置Gstreamer + flumotion?如果是这样,我在哪里可以找到命令行文档,因为flumotion doc在命令行细节上相当轻松?

提前致谢!

streaming ffmpeg webcam webm ffserver
2个回答
0
投票

你应该考虑尝试一下flumotion。您可以使用flumotion-admin轻松设置从网络摄像头捕获的webm管道,并让它在后台运行。


0
投票

我最近设置了它,但这是一种痛苦。这就是我必须做的事情:

首先,从源代码构建ffmpeg以包含libvpx驱动程序(即使您使用的是具有它的版本,您需要最新的(截至本月)才能流式传输webm,因为它们刚刚添加了包含全局标头的功能)。我在Ubuntu服务器和桌面上做了​​这个,this guide向我展示了如何 - 其他操作系统can be found here的说明。

一旦你得到了适当版本的ffmpeg / ffserver,就可以设置它们用于流式传输,在我的例子中,这是按照以下方式完成的。

在视频捕获设备上:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
  • “-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_high_ip配置client_low_ip,同时在server_ip上处理mpeg到webm会话(下面继续)。

这个ffmpeg命令在以前称为server_ip的机器上执行(它处理实际的mpeg - > webm转换并将其反馈到另一个feed上的ffserver中):

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

一旦这些全部启动(首先是ffserver,然后是feeder_ip ffmpeg进程,然后是server_ip ffmpeg进程),你应该能够访问http://:8090 / 0.webm的实时流并检查http的状态://:8090 /

希望这可以帮助。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.