面试系列——直播模块设计总结和思考

Posted BridgeGeorge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试系列——直播模块设计总结和思考相关的知识,希望对你有一定的参考价值。

背景

支持IOT平台的直播功能,要求低功耗高性能高可用。

整体架构图

架构设计

直播技术选型

RTMP
实时消息传输协议,CDN支持良好,协议简单易实现。
基于TCP,传输成本高,Adobe 私有协议,不支持浏览器推送

WebRTC
w3c标准,基于UDP,CDN较差

UDP自定义协议
定制化空间大,协议私有化,缺点:开发成本高,CDN不友好。

整体接入

统一接入标准 函数实现
首帧为sps pps 数据,推送数据帧的方法 方便接入和后续扩展;

对外接口

外观模式 对外提供统一接口 业务层访问统一接口不需要跟具体模块交互

内部接口

策略模式 内部提供不同实现,发起时候 动态指定实现类,方便线上做AB test. 或者后期做动态切换。

可靠性保证

  1. 帧数据监控,帧率监控, 首帧数据重发 便于SDK 及时矫正
  2. 告诉系统编码器执行动态丢帧策略,动态码率,根据系统资源情况动态调整;

性能优化

内存优化

  • 系统层 内存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的基础上,优化帧间和帧内预测算法,旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,需要更高级别硬件的支持 未来将会成为主流。

以上是关于面试系列——直播模块设计总结和思考的主要内容,如果未能解决你的问题,请参考以下文章

面试系列——录制模块架构设计和思考

面试系列——录制模块架构设计和思考

面试系列——播报SDK开发和总结概述

面试系列——播报SDK开发和总结概述

直播 | 滴滴开源监控夜莺的架构设计思考

Java面试——Spring系列总结