我使用Ubuntu上的ffmpeg / ffserver以以下方式进行了WebM格式的转换(MP4和Ogg稍微简单一些,并且应该以类似的方式从同一服务器上工作,但您应该使用所有3种格式以便兼容各种浏览器)。
首先,从源代码中构建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命令,并在处理mpeg到webm转换时通过server_ip将服务器发送到client_low_ip至client_high_ip的服务器(继续如下)。
此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/检查状态。
希望这可以帮到您。