视频直播
yuhuo2022-03-04开发知识
参考链接
视频形式
点播
播放已经存在的视频。
直播
单主播推流到服务器,多观众从服务器拉流观看。
使用 RTMP、HTTP-FLV、HLS 协议,会有几秒延迟。
实时音视频
用于视频通话,视频会议等。
使用基于 UDP 的 RTC、webRCT 协议,要求低延时(300ms 内)。
互动直播(连麦)
基于实时音视频,主播和观众或其他主播进行音视频通话。
旁路直播
将互动直播的多路流在服务端进行合流,再推给观众,同样有几秒延迟。
直播流程
直播协议
HTTP-FLV
基于 HTTP 的 flv 流媒体传输,它使用类似 RTMP 流式的 HTTP 长连接,实时性和 RTMP 相当。
H5 原本使用 flash 播放,flash 已淘汰。video 元素是无法直接播放 flv 视频的,需要通过 flv.js 库来解析原始数据,再通过浏览器新特性 MSE(Media Source Extensions API)将最终数据提供给 video 元素。
说明 | |
---|---|
作用 | 流媒体传输 |
优点 | 低延迟(3s左右) |
缺点 | 某些移动端浏览器不支持 MSE |
应用场景 | H5 点播;H5 直播拉流 |
HLS
基于 HTTP 的自适应码率流媒体传输协议(HTTP Live Streaming)。
流媒体切片成一段段 ts 文件,通过 m3u8 索引文件按序访问 ts 文件,播放完成后再请求下一个 m3u8 文件。直播一般来说一个 m3u8 会包含 3个 切片,每个切片至少是 2s~3s ,在加上网络延迟,基本延迟会达到 10s 左右。
在支持 HLS 的浏览器(如 Safari,移动端多数浏览器),直接将 m3u8 链接作为 video 的源路径即可。不支持的浏览器需要通过 hls.js 库和 MSE 才能播放。
说明 | |
---|---|
作用 | 流媒体传输 |
优点 | 支持性高 |
缺点 | 高延迟(取决于切片大小) |
应用场景 | H5 点播;H5 直播拉流(高延迟问题,仅在 HTTP-FLV 不支持的情况下才用,移动端为主) |
RTMP
实时消息协议(Real Time Messaging Protocol)。
flv / f4v 的文件格式,H5 需要使用 flash 播放,flash 已淘汰,目前不再支持。
说明 | |
---|---|
作用 | 流媒体传输 |
上层协议 | TCP |
默认端口 | 1935 |
优点 | 低延迟(3s左右) |
缺点 | H5 不再支持 |
应用场景 | APP 直播推流,APP 直播拉流 |