Streaming 命令行流媒体网络摄像头,带有来自Ubuntu服务器的WebM格式音频

Streaming 命令行流媒体网络摄像头,带有来自Ubuntu服务器的WebM格式音频,streaming,ffmpeg,webcam,webm,ffserver,Streaming,Ffmpeg,Webcam,Webm,Ffserver,我正在尝试从连接到我的无头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

我正在尝试从连接到我的无头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对命令行细节的了解非常少


提前谢谢我最近设置了这个,但这有点麻烦。以下是我必须做的:

首先,从源代码构建ffmpeg以包含libvpx驱动程序(即使您使用的是有libvpx驱动程序的版本,您也需要最新的驱动程序(从本月开始)来流式传输webm,因为它们只是添加了包含全局头的功能)。我在Ubuntu服务器和桌面上完成了这项工作,并向我展示了其他操作系统的操作说明

一旦您获得了合适版本的ffmpeg/ffserver,您就可以将它们设置为流媒体,在我的例子中,这是按如下方式完成的

在视频捕获设备上:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
ffmpeg-f video4linux2-标准ntsc-i/dev/video0 http://:8090/0.ffm
  • 其中的“-f video4linux2-标准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>
端口8090
#绑定地址
MaxHTTPConnections 2000
MAXClients 100
最大带宽1000000
CustomLog/var/log/ffserver
诺达蒙
文件/tmp/0.ffm
文件最大大小5米
ACL允许
文件/tmp/0_webm.ffm
文件最大大小5米
ACL允许本地主机
饲料0.ffm
格式化MPEG1视频
诺奥迪奥
视频帧率25
视频比特率256
视频大小到岸价
视频缓冲区大小40
录像带12
馈送0_webm.ffm
格式webm
诺奥迪奥
视频编解码器libvpx
视频大小320x240
视频帧率24
AVOptionVideo标志+全局_标题
AVOptionVideo cpu使用了0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
视频质量好
预滚0
斯塔森多基
视频比特率500K
格式状态
ACL允许
  • 注意:这是为feeder_ip上的服务器配置的,以执行上述ffmpeg命令,并为server_ip上的服务器配置的,因此,在处理server_ip上的mpeg到webm对话时,通过client_high_ip将server到client_low_ip(以下继续)
此ffmpeg命令在以前称为服务器ip的机器上执行(它处理实际的mpeg-->webm转换,并以不同的源将其反馈到ffserver):

ffmpeg-i http://:8090/0.mpg-vcodec libvpxhttp://localhost:8090/0_webm.ffm
一旦这些都启动(首先是ffserver,然后是feeder\u ip ffmpeg进程,然后是server\u ip ffmpeg进程),您应该能够访问http://:8090/0.webm上的实时流,并在http://:8090上检查状态/

希望这有帮助

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