仅使用视频标签实时流式传输到 HTML5(不带 webrtc)

2024-04-27

我想将实时编码数据包装到 webm 或 ogv 并将其发送到 html5 浏览器。

webm 或 ogv 可以做到这一点吗? Mp4 由于其 MDAT 原子而无法做到这一点。 (无法实时将h264和mp3打包并发送给客户端) 假设我正在从网络摄像头输入输入并从内置麦克风输入音频。 碎片 mp4 可以处理这个问题,但找到库来做到这一点很麻烦)。

我需要这样做,因为我不想分开发送音频和视频。

如果我确实分开发送,则通过音频标签发送音频,通过视频发送视频>(音频和视频被解复用并发送) 我可以使用 JavaScript 在客户端浏览器上同步它们吗?我看到了一些例子,但还不确定。


我使用在 Ubuntu 上运行的 ffmpeg/ffserver 对 webm 进行了如下操作(mp4 和 ogg 更容易一些,并且应该在同一服务器上以类似的方式工作,但您应该使用所有 3 种格式以实现跨浏览器的兼容性)。

首先,从源代码构建 ffmpeg 以包含 libvpx 驱动程序(即使您使用包含该驱动程序的版本,您也需要最新的版本(截至本月)来传输 webm,因为它们只是添加了包含全局标头的功能)。我在 Ubuntu 服务器和桌面上执行了此操作,并且本指南 http://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide向我展示了如何操作 - 其他操作系统的说明可以在这里找到 http://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide.

一旦您获得了适当版本的 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 转换,并将其反馈到不同源上的 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/

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用视频标签实时流式传输到 HTML5(不带 webrtc) 的相关文章

随机推荐