wtto WTTO'S BLOG

浏览器视频播放方案

Posted on: 2022年6月7日  at 09:50
浏览器视频播放方案

解决方案

各视频类型的协议

视频类型视频协议
点播m3u8/mp4/flv
直播m3u8/http-flv/webrtc
双向webrtc

各浏览器平台方案

浏览器技术方案协议
IE11 及以上版本HTML5 Video + MSE1http-mp4/http-flv
Chrome/Safari/FirefoxHTML5 Video + MSEhls/http-flv/http-mp4/webrtc
IE11 以下版本Flash Playerrtmp/http-flv/hls

各协议优缺点

协议传输方式视频封装格式延迟数据分段h5 播放
http-flvhttp 流flv低 (4-10 秒)连续流flv.js(bilibili)
rtmptcp 流flv低 (1~5 秒)连续流video.js2
hlshttp 流m3u8+Ts 文件高 (15-30 秒)切片文件hls.js
Dashhttpmp4,3gp,webm切片文件mp4 和 webm 可通过 video 标签直接播放

针对流媒体服务的方案

平台协议
Web 浏览器HTTP-FLV、HLS
移动浏览器HLS、FLV (需要考虑兼容性)
移动 Native or 小程序RTMP、HTTP-FLV、HLS

附录 1

MSE(Media Source Extensions)

我们可以把 <video> 标签看做拥有解封装和解码功能的浏览器自带播放器。随着视频点播、直播等视频业务的发展,视频通过流媒体传输协议 (目前常用的有两种,MPEG-DASH 和 Apple 的 HLS) 从服务器端分发给客户端,媒体内容进一步包含在一层传输协议中,这样 <video> 就无法识别了。以 HLS 为例,将源文件内容分散地封装到了一个个 TS 文件中。

仅靠 <video> 标签无法识别这样的 TS 文件,那么就引入了 MSE 拓展来帮助浏览器识别并处理 TS 文件,将其变回原来可识别的媒体容器格式,这样 <video> 就可以识别并播放原来的文件了。那么支持 HTML5 的浏览器就相当于内置了一个能够解析流协议的播放器。

附录 2

video.js

video.js 播放 hls,需要用 videojs-http-streaming 拓展
video.js 播放 http-flv,需要用 videojs-flvjs 拓展
video.js version<6 的版本,自带 flash 拓展,可以播放 rtmp。
video.js version>=6 的版本,需要用 videojs-flash
浏览器播放 rtmp 的前提是浏览器支持 flash 播放。

由于现在几乎所有浏览器都不在支持 flash,所以即使使用上述拓展,rtmp 已不再支持播放。可以单独下载安装 Adobe Flash Player,可实现 rtmp 的播放。

其他

For FLV live stream playback,please consider mpegts.js which is under active development。flv.js project will become rarely maintained

未来可以从 flv.js 转移到 mpegts.js,但是现在后者还未完善。

播放器

播放器只是外观皮肤以及功能的封装,播放相应的协议,还需要加载相应的库

  • video.js 官网,开源,web 端 自定义皮肤插件扩展字幕组件多语言
  • 腾讯云 TCPlayer 文档,Web 端,iOS 端,Android 端,Flutter 端
  • 阿里云 Aliplayer 文档,Web 端,iOS 端,Android 端,Flutter 端 移动端不支持 http-flv,PC 段支持

其他开源播放器

视频转码

点播视频可以通过 ffmpeg 转成 hls 或者其他类型

作者:  wtto
发表时间: 2022年6月7日
最后更新时间:  2024年1月1日
版权说明:  CC BY-NC-ND 4.0 DEED