技术问询:video.js是否支持接收并播放MPEG2-TS/UDP格式视频流
关于video.js播放MPEG2-TS/UDP流的可行性
浏览器原生不支持直接接收UDP协议的媒体数据,因此基于浏览器MediaSource Extensions接口实现的video.js无法直接播放MPEG2-TS over UDP格式的流,你可以通过调整源输出协议的方式实现低延迟需求,以下是可落地的方案:
适配方案
- 最优方案:改用WebRTC协议
你可以将源端的MPEG2-TS/UDP流转为WebRTC流推送,端到端延迟可控制在500ms以内,完全满足低延迟要求。video.js可通过对应插件支持WebRTC流播放,单页同时加载两个实例不会有兼容性问题。 - 备选方案:改用低延迟HTTP协议
如果WebRTC改造成本偏高,你可以选择LL-HLS(低延迟HLS)或者HTTP-FLV协议,延迟可以控制在13s区间,相比普通HLS的1030s延迟有质的提升。video.js原生支持LL-HLS,播放HTTP-FLV只需引入对应适配插件即可。 - 必须保留UDP源的过渡方案
如果源端无法直接输出上述协议,可以在服务侧增加中转节点,将接收的MPEG2-TS/UDP流转码封装为浏览器可识别的低延迟协议再推送给前端,中转带来的额外延迟通常低于100ms,基本不会影响业务需求。
针对你的核心场景的优化建议
- 单页加载两个video.js实例是成熟方案,仅需为两个实例传入不同的流地址即可,只要单路流码率不超过4Mbps,普通消费级设备都可以流畅并发播放。
- 如果需要两路流播放进度高度对齐,可以监听播放器的
timeupdate事件,以发送节点的流播放进度为基准,自动校准接收节点流的播放偏移,同时关闭播放器的默认缓冲对齐配置,避免播放器自动调整带来的进度差。 - 上述适配方案都不需要修改video.js核心逻辑,仅通过配置或插件即可实现,和你现有HLS播放的代码结构差异极小,迁移成本很低。
内容的提问来源于stack exchange,提问作者Andres Gonzalez
相关产品推荐
相关产品推荐

