问题:最近在做视频直播,延迟问题很严重,pc端还好,延迟5s左右,在微信h5有时候延迟30s以上,所以来研究一下视频播放
PC用的是flv.js播放的,微信使用h5 video播放
一、HTML5录制视频
可以使用强大的webRTC,目前腾讯的实时音视频就是用的webRTC,但是兼容性不是很好
二、播放直播视频
目前有两种视频协议流,一种是HLS,另外一种是RTMP
1. HLS协议
(1) HLS协议就是把整个流分成一个个小的,基于HTTP文件来下载,每次只下载一些,一个文件就是.m3u8的文件,用于存放视频流元数据
每一个.m3u8文件,分别对应若干个ts文件,这些文件才是真正存放视频的数据,m3u8文件只是存放了一些ts文件的配置信息和相关路径,当视频播放时,.m3u8是动态改变的,video标签会解析这个文件,并找到对应的ts文件来播放,所以一般为了加快速度,.m3u8放在web服务器上,ts文件放在CDN上。
.m3u8文件其实就是以UTF-8编码的m3u文件,这个文件本身不能播放,只是存放了播放信息的文本文件
(2) HLS延迟
hls是将直播流分成一段一段的小段视频区下载播放的,所以假设列表里面的包含5个ts文件,每个ts文件包含5s的视频内容,那么整体的延迟就是25s
HLS只能在拉流端,造成慢的原因就是在等数据
(3) 优点
可以在h5使用,直接用video就可以拉流,ios和android都支持这种协议,配置简单
2. RTMP协议
Real Time Messaging Protocol(简称 RTMP)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。这套方案需要搭建专门的 RTMP 流媒体服务如 Adobe Media Server,并且在浏览器中只能使用 Flash 实现播放器。
RTMP可以在双端(推流端和拉流端)
3. HttpFlv
HttpFlv就是http+flv,将音视频数据封装成flv格式,然后通过Http协议传输给用户端,但聪明地你马上就会发现,虽然传输协议变了,但在flv数据格式下,脱离FlashPlayer还是无稽之谈。但在2016年,这一切都发生了改变,因为flv.js问世了!