1. 论文对比
2014年: 基于buffer | BBA | 基本单位chunk 4s | 解决的问题: 通过2个buffer阈值,构建一个buffer的函数,将buffer保持在一个合理的范围内,只有在启动阶段才使用throughput作为辅助,其他时刻只是用buffer | 核心问题:吞吐量预测不准,buffer调整太过于保守 | QoE:卡顿,码率 协议:DASH BBA-0:线性模型 BBA-1:非线性模型 BBA-2:快启动+非线性模型 BBA-other:快启动+非线性模型+平滑切换 |
2015年:基于quality | MPC | 基本单位chunk:4s | 优势:对未来的关键环境进行预测与优化,可解释性,参数更新容易问题是在线很难实现,需要离线训练,在线测试,并且通过FASTMPC只能过去近似最优解 |
| QoE:卡顿,码率,平滑 协议:DASH 提出挑战,解决挑战 |
2017年:基于RL | pensieve | 基本单位chunk:4s | 解决的问题: 1. 网络吞吐量的变化 2. QoE 3. 码率选择的连串反应 4. 码率选择的调优 |
| QoE:卡顿,码率,平滑 协议:DASH |
2. 直播传输协议:
httpflv, rtmp协议
目前绝大多数公司更多的是在TCP或者UDP的基础上封装一个传输协议,适应本系统的私有协议。
Httpflv: | 传输http流,视频封装格式是flv,延时低,数据不分段 Rtmp协议基础上开发的,适合直播 |
Rtmp: | 传输tcp流,视频封装格式是flv,延迟低,数据不分段 Adobe公司开发 支持该协议的软件有Adobe/Uitrant/red5,适合直播 |
Hls: | 传输http流,传输TS文件,延迟高,数据分段 苹果公司开发,适合点播和直播 |
dash: | 传输http流,传输MP4文件,延迟高,数据分段,适合点播 适合点播 |
3. 直播过程:
采集--处理--编码和封装--推流到服务器--服务器流分发--播放器播放
主播--RTMP--直播流媒体服务器(CDN)--RTMP--关重
编码: | 视频编码器:编码性能,编码速度,编码压缩比会直接影响流媒体的体验,编码种类有:H.265,VP8, VP9, H.264 音频编码器:MP3, AAC |
封装: | 不同的封装格式,例如:AVI, MPEG, WMV, FLV, MPEG2-TS, .flv, ,avi, .mpg, .dat, .mp4,.ts 直播中主要采用的封装格式为:FLV, MPEG2-TS, 分别用于RTMP/HTTP-FLV和HLS流媒体传输协议,市面上绝大多数直播产品都采用的是RTMP协议 |
推流到服务器: | RTMP client和RTMP server,一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小进行包传输的。 |
流媒体服务器 | 负责流媒体的发布和转播分发功能 |
播放器播放 | 只要支持RTMP的播放器都可以 |
4. 直播未来的研究方向
- 基于规则的方式与基于增强学习的方式结合
- 对基于增强学习的方式进行改进:对reward进行改进,有chunk_reward改为迭代型的reward
- 分布式计算,分布式部署领域(边缘计算)
- 流量的异常检测
- 我们目前考虑的是CDN端到client端的情况,但是我们之后要考虑数据发送端到数据接受端的情况。
- 如果多用户和多用户通信,如何最优化目标码率
- CDN端对于非常火的视频资源可以转码多种码率,但是对于很早的视频,转码什么样的码率才是最合适的(依赖于客户的需求和需求客户的网络况状)
- 多源多目的之间的平衡
- 网络的吞吐量是不确定的,尤其是细粒度的吞吐量更不确定,但是buffer的占有情况是确定的,如何平衡网络吞吐量的预测结果与buffer的占有情况是一个挑战
- QoE目标中多个指标可能冲突。高码率,低卡顿,平滑切换,低延迟。更复杂的是,这些QoE的偏好不是定死的而是因用户而异
- 全局最优解。码率选择有级联效应。本次的码率选择,会影响下一次选择的buffer占用清空,会直接影响下一次的码率选择,进而影响整体的QoE。所以每一次的码率选择,也需要全局最优,而不是局部最优。buffer在为了实现全局最优,实际运作中会保持在一个安全范围内,使得码率更加保守。
- 预测的码率是一个连续值,如何进行合适的离散化,选择最优码率。就是预测的码率A比实际码率【B,C】之间,应该如何选择,选择不卡顿的低码率B,还是选择有卡顿几率的高码率。(这个前提就是网络吞吐量真的计算不准确)
5. 目前直播领域的问题
背景环境: |
|
视频数据: |
|
网络数据: |
|
6 .注意
目前的研究粒度一共可以划分为3种:基于GOP,基于chunk,基于frame
CBR encoding:固定码率编码(一次编码)。码率=实际的数据量/s
VBR encoding :可变码率编码(二次编码),但是平均码率不变。在码率恒定的情况下,对内容简单的部分分配较少的比特,对内容较多的内容,分配较多的比特。这种编码方式使得同样的码率,但是chunk_size有不一样的大小,下载时间就不一样。码率=平均数据量/s
码率只是一个平均值,是指每秒平均的传输bit数
比赛采用的编码方式时VBR,所以码率是平均码率,重要的是chunk_size才是最有效,最直接的,最可控时延的信息
CDN中的1s视频在client的buffer中也是1s视频,只是下载这1s视频所需时间不一定是1s
CDN中有2s的视频,client的buffer中有5s的视频。
client将CDN中的1s视频下载到buffer中,需要花费3s。
此刻:CDN中有1s的视频,client的buffer中有5s-3s+1s=3s的视频
以帧为单位,最大的特点就是,卡顿时间会减少,延迟会减少,更加细粒度。 这样对网络吞吐量的预测要求更加严格,之前对于chunk,只需要预测chunk期间内的平均吞吐量,这是一个趋势指标,而不是一个时刻值,相对较容易。