直播的原理:
主播端采集,渲染,编码,封装–>网络传输到流媒体推流器–>CDN—>观众端解码播放
其中每个过程相关的技术整理如下:(仅个人总结一些要点,还有很多文章详细介绍原理或名称可自行百度)
过程 | 相关技术 |
---|---|
采集[1-视频] | 视频采集–CCD 成本高-质量好,CMOS成本低质量差,采集的原始视频数据是YUV或RGB格式,文件很大 |
采集[2-音频] | 音频采集-拾音器-声电转换装置(咪头),音频放大电路,采集的原始音频数据是PCM |
渲染 | 滤镜,美颜,磨皮,OpenGL渲染 |
编码[1-码率] | 码率选择-CBR 固定码率会造成马赛克, VBR 可变码率适合存储不适合传输,ABR 适合网络传输,CVBR静止时码率降低运动时码率升高 |
编码[2-视频] | 1)视频编码格式H264,H265,H265压缩率更高,码率更低,更节省带宽,但对播放器要求较高,解码复杂度升高, 2)封装格式有TS,AVI,MP4等,3)视频编码原理-目的是减少码率,利于传输和存储,一般使用混合编码,变换编码,运动估计和运动补偿,熵编码,(变换编码消除帧内冗余,运动估计和运动补偿去除帧间冗余,熵编码进一步提高压缩效率) |
编码[3-音频] | 1)音频编码格式AAC,opus等,2)封装格式MP3,AAC等,3)编码原理-将每个声道中的采样信号映射到频域中,计算掩蔽门限值,决定从公共比特池中分配给该声道中不同频率域中多少比特数,再进行量化和编码,最后加入控制参数和辅助数据. |
传输 | 传输协议rtmp,hls, http-flv, 控制信令-sip,snmp; 对比- 1)rtmp(基于TCP长链接,每个时刻收到数据后立刻转发,延时1-3秒,web-H5需要插件,跨平台较差),2)hls 基于HTTP短链接, 10秒一切片,并更新秒M3u8索引,延时5-20秒,支持H5, 不会被墙,可以平滑切换码率适应带宽,iOS平台天然支持, 3)HTTP-flv, 基于HTTP长链接,收到立刻转发,延时1-3秒,H5需要插件,跨平台较差,且拖动体验差 |
CDN分发 | 源站, CDN节点, 网状拓扑结构, P2P分发 |
播放 | 原理: 数据流- 解协议(去掉播放,暂停信令) - 解封装(将flv分离成MP4,AVI压缩数据) - 音视频解码- (解成原始的视频YUV/RGB,音频PCM)- 音视频同步;(本地无需解协议,直接解封装-解码音视频-音视频同步) |
常用工具 | FFmpeg,ffplay, ffprobe,可以分析流参数,wireshak抓包 |
画面质量因素 | 色调,饱和度,锐化,亮度, 清晰度,码率,帧率, 音画同步 |
稳定性策略 [1-推流] | 采集时码率,帧率根据网络自适应,转码时转不同码率,CDN分发时就近分发, 动态码率,追帧,丢帧策略 |
稳定性策略[2-拉流播放] | 软硬解结合, 系统播放器,flash播放器,定制播放器结合,协议定制,控制程序包大小, 拉流时分辨率可选 |
保证直播的质量[1-分发质量] | 1)分发内容保证- 直播源站,推流器内容分发之前进行存储,主备,分发后实时检查源站质量并进行切换,2)分发流畅保证: 分布式CDN架构和智能调度,确保分发的流畅,可基于AI流量预测进行预调度 |
保证直播的质量[2-画面质量] | 根据不同硬件配置和网络动态调整最佳分辨率,帧率,码率,提高硬件利用率,合理分配帧间码率和帧内码率. |
保证直播的质量[3-播放质量] | 获知服务器慢速比,卡顿率,可用性监控,定时定位失败原因,软硬解码结合 |
保证推流稳定性[1-稳定性] | 1)收流稳定性 - 采取多线收流,主备转码器,多线专线等策略,2) 降级方案提前演练,开关,脚本提前准备 3) 容灾- 多机房容灾部署,采用多流合并,媒体处理环节-转码,录制,切片,回访等做好扩容方案,异常时秒级切换,重点直播间双路备份. |
保证推流稳定性[2-压测] | 1)基本压测找出瓶颈,2)全链路压测 3)摸清容量,增加机器 |
保证推流稳定性[3-监控] | 1)在线人数,系统压力可视化 2)直播间,消息通道全链路可用性监控,每一路流实行秒级监控,异常时秒级切换3)内容监控-鉴黄,非法信息审核4)业务数据监控-QPS,load获取在线用户数,在线人数,消息量记录 |
保证推流稳定性[4-消息处理] | 1)消息投递先过滤,队列削峰填谷,2)多线程处理消息,3)房间分桶降低下行压力 |
常见问题排查[1-卡顿] | 画面卡顿根本原因是-帧率小于10,可能的原因有,推流端性能不足编码帧率下降,播放端性能不足解码帧率下降,带宽不足数据包阻塞等 |
常见问题排查[2-花屏] | 花屏根本原因是渲染未完成或数据包重复乱序. |
测试音视频质量的算法 | PEVQ算法,PEAQ算法,PESQ算法, |
RTC和IM的区别 | 区别: IM是即时通信要求可靠(采用TCP), RTC是实时通信要求低延迟和接通率(采用UDP) |
附上比较详细的一些讲解文章
各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
直播技术学习笔记(直播协议+流媒体服务器+音视频处理+FFmpeg)