4

我正在尝试从连接到无头 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 和 async 选项,我还是可以得到不同步的音频,或者 Benny Hill 风格的快进视频和匹配的快速音频。我也无法让这个实际与 ffserver 一起工作(通过用相关的提要文件名替换 test.webm 路径和文件名)。

目标是获得一个实时的音频+视频源,它可以在现代浏览器中查看,带宽很窄,只使用开源组件。(没有那种 MP3 格式的合法谷壳)

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

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

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

是否可以从命令行配置诸如 Gstreamer + Flumotion 之类的东西?如果是这样,我在哪里可以找到命令行文档,因为flumotion doc对命令行细节相当了解?

提前致谢!

4

2 回答 2

0

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

于 2011-10-30T18:45:00.787 回答
0

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

首先,从源代码构建 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>
  • 请注意,这是为 feeder_ip 上的服务器配置的,以执行上述 ffmpeg 命令,并为 server_ip 上的服务器配置,因此在 server_ip 上处理 mpeg 到 webm 对话时,通过 client_high_ip 服务器到 client_low_ip(下文继续)。

此 ffmpeg 命令在以前称为 server_ip 的机器上执行(它处理实际的 mpeg --> webm 转换并将其反馈到不同提要上的 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/

希望这可以帮助。

于 2013-03-16T15:07:40.440 回答