面试系列——直播模块设计总结和思考
Posted BridgeGeorge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试系列——直播模块设计总结和思考相关的知识,希望对你有一定的参考价值。
背景
支持IOT平台的直播功能,要求低功耗高性能高可用。
整体架构图
架构设计
直播技术选型
RTMP
实时消息传输协议,CDN支持良好,协议简单易实现。
基于TCP,传输成本高,Adobe 私有协议,不支持浏览器推送
WebRTC
w3c标准,基于UDP,CDN较差
UDP自定义协议
定制化空间大,协议私有化,缺点:开发成本高,CDN不友好。
整体接入
统一接入标准 函数实现
首帧为sps pps 数据,推送数据帧的方法 方便接入和后续扩展;
对外接口
外观模式 对外提供统一接口 业务层访问统一接口不需要跟具体模块交互
内部接口
策略模式 内部提供不同实现,发起时候 动态指定实现类,方便线上做AB test. 或者后期做动态切换。
可靠性保证
- 帧数据监控,帧率监控, 首帧数据重发 便于SDK 及时矫正
- 告诉系统编码器执行动态丢帧策略,动态码率,根据系统资源情况动态调整;
性能优化
内存优化
- 系统层 内存Buffer 复用,避免内存频繁分配;
- 应用层 采用SparseArray 保存 映射
- 应用层 SDK 延迟初始化,懒加载,
- H264 byte buffer 采用对象池,高效对象复用,内存copy函数
CPU优化
- 系统层
CPU 动态调频,功能开启时 核心数跑满 结束时,结束功能时关闭调频,设置最大调频时长,防止异常情况下系统处于性能模式 降低发热等降低使用寿命; - 应用层
线下尝试不同的码率和分辨率测试组 和不同的丢帧策略,找到效果和 性能的平衡点,线上支持动态配置和切换,支持通过指令动态切换;最终将CPU控制从30%降低到15%左右, 优化幅度达到50% .
项目总结
- 评估排期 评估 测试用例 及时沟通 暴露风险等 保证项目交付
- 日会拉齐各方进度和问题,保证问题delay 体现责任感 和 沟通能力
杂项
H264
H264视频压缩技术中使用最广泛,最流行视频编解码数据
将YUV原始数据 根据算法压缩成对应的视频帧数据。
SPS PPS
含义:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)。
作用:包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。
特征:
在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f == 8.
I B P 帧
I帧关键帧;B帧 双向差别帧;P帧 前向差别帧;
H265
在H264的基础上,优化帧间和帧内预测算法,旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,需要更高级别硬件的支持 未来将会成为主流。
以上是关于面试系列——直播模块设计总结和思考的主要内容,如果未能解决你的问题,请参考以下文章