1 of 23

播放器技术-DASH协议开发

播放器技术-DASH协议(直播)

2 of 23

播放器技术-DASH协议开发(DASH特点)

3 of 23

播放器技术-DASH协议开发

4 of 23

播放器技术-DASH协议开发(背景)

  • Hago直播业务不断发展,逐渐成为营收核心业务场景
  • 用户的网络种类和情况复杂,我们需要在各种场景下都需要给用户较好的体验,需要选择一种能在不同网络下都能流畅播放的方案。

5 of 23

播放器技术-DASH协议开发(协议差异)

协议

传输方式

视频封装格式

编码

数据分段

延时

成本

自适应

标准

FLV

http

flv

H264等,AAC等

连续流

不支持

Adobe

RTC

udp

xxx

xxx

连续流

支持

私有协议

HLS

http

ts文件

H264,AAC

切片

较低

支持

Apple

MPEG-DASH

http

mp4、3gp、webm等

H264等

AAC等

切片

支持

国际标准

6 of 23

播放器技术-DASH协议开发(目前阶段性成果)

- Dash功能已经灰度

- 性能测试组测试报告中

- CPU、内存基本和flv持平

- 弱网情况下Dash表现要优于flv

- 由于协议差异,Dash相比flv时延要高一些(flv 4.6-6s,dash 6-8s)

7 of 23

播放器技术-DASH协议开发(阶段性成果)

  • 目前DASH功能已经处于灰度中

8 of 23

播放器技术-DASH协议开发

9 of 23

播放器技术-DASH协议开发(播放器结构图)

10 of 23

播放器技术-DASH协议开发(描述文件MPD)

11 of 23

播放器技术-DASH协议开发(数据格式)

12 of 23

播放器技术-DASH协议开发(DashDemuxer架构图)

13 of 23

播放器技术-DASH协议开发

- 首帧优化

- 时延控制

- 刷新mpd策略

- 音视频块同步

- 自适应切换

- 线程模型优化

- 内存优化

- 解决Dash技术性问题

14 of 23

播放器技术-DASH协议开发(首帧优化)

首帧的耗时

-建立连接到Response 200耗时

-Response 200到解封装第一个关键帧耗时

-DASH包含了mpd解析、init块下载,首个数据段能够解析出第一帧

-首帧推送解码,到解码完成耗时

15 of 23

播放器技术-DASH协议开发(首帧优化)

- 边下载边解复用

- 音视频并发下载,视频优先

- 加入DASH预加载(mpd,init块,第一个数据segment)

- 网络

- QUIC

- GSLB支持腾讯云域名

- DNS域名预解析

16 of 23

播放器技术-DASH协议开发(时延控制)

播放器时延控制模式

- 正常模式

- 选取当前集合中的倒数第二个

-低时延模式

- 始终以当前集合的最后一个为数据下载段

17 of 23

播放器技术-DASH协议开发(刷新MPD策略)

播放器时延控制模式

- 正常模式

- 选取当前集合中的倒数第二个

-低时延模式

- 始终以当前集合的最后一个为数据下载段

complete

新的数据块

Refresh

complete

无数据块更新,则200ms后再次发起数据更新,直到更新到数据

间隔2s(mpd)

Refresh

Refresh

18 of 23

播放器技术-DASH协议开发(音视频块控制)

音频和视频块

- 音频块、视频块是对齐的,同一个时间段内,有一个音频和视频

- 需要正常播放的前提是同时需要音视频块

- 音频块相比视频块要小的多,如果不加控制,可能视频块下载时间过长,而音频块下载过多,从而导致卡顿

控制逻辑

- 为每个Segment分配一下自增的id

- 音视频各自下载单元进行序号的同步,只有相同的id下载结束后才进入下载下一个片段

19 of 23

播放器技术-DASH协议开发(自适应切换)

主要规则:

ThroughputRule InsufficientBufferRule

测速模块-ThroughputRule

-使用滑动窗口平均估计未来吞吐量,选择不高于估计值的最大码率视频

-窗口大小为4~20(抖动越剧烈,计算窗口越大 ),并对平均后的吞吐量×0.7作为估计值

20 of 23

播放器技术-DASH协议开发(线程模型优化)

-线程模型优化

- 解码和下载都会创建独立的线程,增加资源的消耗

- 优化成post task模型

21 of 23

播放器技术-DASH协议开发(解决Dash技术问题)

  • 播放器DTS、PTS使用uint32_t数据溢出导致卡顿
  • 数据片段下载导致播放卡顿问题(音视频块同步)
  • 播放器音视频同步导致数据被提前消费导致卡顿问题
  • Dash模块使用智能指针来解决内存泄漏和野指针问题
  • 横竖屏切换花屏
  • 抽帧不均匀导致跳帧
  • 低挡位往高档位转码

22 of 23

播放器技术-DASH协议开发(音画同步卡顿问题)

23 of 23

播放器技术-DASH协议开发(音画同步卡顿解决方案)

  • updateAVDelta时需要同时存在音频和视频帧
  • 进行updateAVDelta前检查当前视频队列是否有数据堆积,如果堆积则进行快速消费且不进行同步avDelta,直到队列长度小于设定阀值(4帧)