一、推流和拉流
1.推流
将直播的内容推送至服务器的过程(将采集到的现场的音视频数据使用网络传输协议变成流数据,然后传输到网络)
推流需要很高的网络支持,网络不好会造成播放时卡顿等现象。
2.拉流
将服务器上的直播内容,使用指定地址拉取的过程(服务器中存在流媒体视频文件,根据不同的网络传输协议进行读取的过程)
服务器:用于存储视频文件
传输协议:通过传输协议去传输视频
读取的终端:播放视频
3.网络传输协议
流媒体的传输协议有很多种
3.1.RTMP
实时消息传输协议,用来在Adobe Flash播放器和服务器之间进行实时数据通信的网络协议。使用TCP作为传输层协议
rtmp:// xxx(上传的服务器地址) / xxxx (目录)/ xxxxx(节点)
优点
低延迟:延时在1~3秒,直播对时序性要求很高,适用于需要低延迟的直播场景
高可靠性:使用TCP协议,具有数据包重传和错误校验等机制
缺点
移动端存在兼容性问题,需要Flash支持
3.2 HLS
基于HTTP的流媒体传输协议
优点
兼容性好:HLS基于HTTP协议,可以在各种设备和平台上播放,包括Web浏览器、iOS设备和Android设备等。
自适应码率:HLS支持自适应码率,可以根据网络状况自动调整视频质量
缺点
延迟较高:由于HLS将视频分割成小文件进行传输,每个文件都需要请求和下载,因此会有一定的延迟。
不支持实时性应用,HLS由于传输的特性,适用于非实时性的应用,不适合需要低延迟的直播场景。
3.3 RTSP
4.推流与拉流过程
推流端(直播端)
4.1 推流过程
① 视频/音频采集
通过摄像头或录屏功能进行视频采集(视频原始数据格式:RGB 或 YUV)
通过话筒进行音频采集(音频原始数据格式:PCM)
② 视频/音频编码
将视频文件进行编码(视频格式从YUV或RGB 变为 H.264或H.265)
将音频文件进行编码(音频格式从PCM 变为 AAC)
③ 视频音频(H.264 和 AAC)结合成FLV或TS或RTMP Packet (根据传输协议而定)具有流媒体特效的多媒体容器格式
④ 选择一种向服务器推流的协议
流:有流媒体特性的多媒体容器格式的文件
⑤ 传入推流地址来定位推流目标
服务器
生成拉流地址(url)用户使用该url进行拉流,观看
拉流端(客户端)
4.2 拉流过程
① 选择一种协议向服务器拉流
② 将多媒体容器格式文件流复用为视频/音频编码格式数据
视频编码格式( H.264或H.265)
音频编码格式( AAC)
③ 对视频/音频数据进行解码
解码后视频格式( YUV 或 RGB)
解码后音频格式( PCM)
④ 音画同步操作
⑤ 将同步后的视频/音频输出到设备进行播放
二、音视频及H.264 & H.256编码相关原理
视频文件是经过打包压缩之后的封装格式数据,里面包含了视频码流和音频码流。需要解码后使用。
FFmpeg 视频文件就是一个容器 (视频流(H264) 音频流(aac))
1.视频文件封装格式
封装格式(称之为容器) :将已经编码压缩后的视频和音频按照一定的格式放到一个文件中。
常见的视频封装格式:
MP4 (MPEG-4 Part 14)
AVI (Audio Video Interleave)
MKV (Matroska)
MOV (QuickTime File Format)
FLV (Flash Video)
WMV (Windows Media Video)
WEBM
TS (Transport Stream)
2.音视频编码方式
将视频文件进行编码(视频格式从YUV或RGB 变为 H.264或H.265),从而降低视频的数据量;
将音频文件进行编码(音频格式从PCM 变为 AAC),从而降低音频的数据量
3.H.264 和 H.265
视频编码方式:通过特定的压缩技术,将视频格式文件转换成另一种视频格式文件的方式。
由于视频本身的码流太大,需要经过压缩后再通过网络进行传输,H264和H265编码是目前比较主流的编码方式。
3.1 H.264
AVC(Advanced Video Coding),支持在512K带宽下传输720P30帧/秒的图像,广泛应用于数字电视、视频会议、监控、互联网流媒体等领域。
H264优化:
H.264编码的计算复杂度较高,采用并行计算和硬件加速可提高编码性能。
并行计算:并行计算可以通过多线程或分布式计算实现,可同时对多个视频帧进行编码或解码,提高视频处理能力。
硬件加速:可通过GPU或专用的视频编解码器实现,对处理H.264视频有很大的性能提升。
3.2 H.265
HEVC(High Efficiency Video Coding),是一种新的视频编码标准,支持在384K带宽下传输720P30帧/秒的图像。最大的优势在于比H.264更高的压缩比和更低的码率。
H.265的编码方式类似于H.264,但采用更强的算法和更高效的编码结构,能够将同样质量的视频压缩成更小的尺寸,从而减少视频存储和传输的带宽消耗。但由于H.265是较新的编码标准,部分硬件和软件设备可能不支持
4.H.264 与H.265的比较
压缩效果:同样质量的视频,H265比H264压缩的更小,但是H265相对于H264编解码的复杂度更高,需要更强的计算能力和存储容量来处理。
编解码速度:相同处理器和硬件减速的情况下,H265编解码的速度比H264慢;但是在使用GPU或专用编解码等硬件加速设备时,H265更快。
应用领域:H264适用于数字电视、视频会议、监控、互联网流媒体等领域;H265更适合于4K、8K等高分辨率视频等高带宽应用领域。
可靠性与兼容性 H264几乎所有的标准视频设备都支持。
H265某些设备可能无法兼容H.265编码的视频流。同时,格式标准的不一致也可能导致H.265视频在某些设备上的解码出现问题。
注:视频质量
标清:480x800
普通高清:720x1280 720P
高清:1920x1080 1080P
2K:2048*1024
超高清 4K:3840x2160
三、前端视频播放-xgplayer
前端视频播放器官网:https://v2.h5player.bytedance.com/
1.遇到的问题
1.1 创建多个以上播放实例会非常卡顿,还会导致页面黑屏
建议降低分辨率,增大 videoBuffer大小。
可能存在的问题:
分辨率过高 带
宽是否跟得上
是否是H265编码
监听stats事件,查看 fps 是否达到了预期的值。
H265优化方案:
降低分辨率
增大videoBuffer大小,一般1s,2s,3s都可以
……
1.2 播放过程中页面出现崩溃
能存在的问题:
分辨率过高 => 减低分辨率
播放的屏幕数量过多 =>降低播放的屏幕数量
电脑内存过小 => 增加电脑内存
有没有打开devTools =>关闭devTools
是否是H265编码 => 降级到H264
H265是高压缩率的,解码端非常依赖硬解码,如果硬解码不支持会导致软解码,软解码性能不好会导致浏览器崩溃
1.3目前前端要支持H265播放有两种方式:
通过软解的方式,这种方式对用户浏览器压力较大,在 i7/16G内存的笔记本上播放单路负载都很高;
通过硬解码的方式,这种对用户的机器要求比较高,而且需要用户额外购买 H265 的解码器;