【音视频】流媒体-视频播放

一、推流和拉流

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

image.png

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的比较

  1. 压缩效果:同样质量的视频,H265比H264压缩的更小,但是H265相对于H264编解码的复杂度更高,需要更强的计算能力和存储容量来处理。
  2. 编解码速度:相同处理器和硬件减速的情况下,H265编解码的速度比H264慢;但是在使用GPU或专用编解码等硬件加速设备时,H265更快。
  3. 应用领域:H264适用于数字电视、视频会议、监控、互联网流媒体等领域;H265更适合于4K、8K等高分辨率视频等高带宽应用领域。
  4. 可靠性与兼容性 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大小。
可能存在的问题:

  1. 分辨率过高 带
  2. 宽是否跟得上
  3. 是否是H265编码

监听stats事件,查看 fps 是否达到了预期的值。

H265优化方案:

  1. 降低分辨率
  2. 增大videoBuffer大小,一般1s,2s,3s都可以
  3. ……
1.2 播放过程中页面出现崩溃

能存在的问题:

  1. 分辨率过高 => 减低分辨率
  2. 播放的屏幕数量过多 =>降低播放的屏幕数量
  3. 电脑内存过小 => 增加电脑内存
  4. 有没有打开devTools =>关闭devTools
  5. 是否是H265编码 => 降级到H264

H265是高压缩率的,解码端非常依赖硬解码,如果硬解码不支持会导致软解码,软解码性能不好会导致浏览器崩溃

1.3目前前端要支持H265播放有两种方式:
  1. 通过软解的方式,这种方式对用户浏览器压力较大,在 i7/16G内存的笔记本上播放单路负载都很高;
  2. 通过硬解码的方式,这种对用户的机器要求比较高,而且需要用户额外购买 H265 的解码器;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值