命令行流媒体网络摄像头与音频从Ubuntu服务器在WebM格式



我正在尝试从连接到我的无头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 

然而,尽管尝试了各种各样的垂直同步和异步选项,我可以得到不同步的音频,或者Benny Hill风格的快进视频与匹配的快速音频。我也无法得到这个实际工作与ffserver(通过替换测试。Webm路径和文件名与相关的提要文件名)。

我们的目标是获得一个实时的,音频+视频的feed,它可以在现代浏览器中查看,在一个狭窄的带宽,只使用开源组件。(没有MP3格式的法律废话)

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

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

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

像Gstreamer + flumotion这样的东西可以从命令行配置吗?如果是这样,我在哪里可以找到命令行文档,因为flumotion文档对命令行细节的描述相当少?

提前感谢!

你应该考虑尝试一下flumotion。你可以很容易地设置一个webm管道捕获从一个网络摄像头与flumotion-admin,并让它在后台运行。

我最近设置了这个,但是它有点痛苦。下面是我要做的:

首先,从源代码构建ffmpeg以包含libvpx驱动程序(即使您使用的是具有它的版本,您也需要最新的版本(截至本月)来流式传输webm,因为它们刚刚添加了包含全局头文件的功能)。我在Ubuntu服务器和桌面上做了这个,这个指南告诉了我怎么做——其他操作系统的说明可以在这里找到。

一旦您获得了适当版本的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>
  • 注意,这是为位于feder_ip的服务器配置的,用于执行前面提到的ffmpeg命令,对于位于server_ip的服务器,它通过client_high_ip服务器到client_low_ip,同时在server_ip上处理mpeg到webm的对话(下面继续)。

这个ffmpeg命令在之前称为server_ip的机器上执行(它处理实际的mpeg -> webm转换,并通过不同的提要将其反馈给ffserver):

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

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

相关内容

  • 没有找到相关文章

最新更新