如果对音视频、AIGC、区块链技术感兴趣,可以关注一下保持联系:
我们在知识星球上创建的音视频技术社群关键帧的音视频开发圈已经运营了一段时间了,在这里大家可以一起交流和分享音视频技术知识和实战方案。我们会不定期整理一些音视频相关的面试题,汇集一份音视频面试题集锦(可进入免费订阅)。也会循序渐进地归纳总结音视频技术知识,绘制一幅音视频知识图谱(可进入免费订阅)。
下面是第 24 期面试题精选,我们来讲讲直播相关技术指标优化的面试题:
1、直播打开成功率如何优化? 2、直播播放秒开如何优化? 3、直播播放卡顿如何优化? 4、直播延时如何优化?
1、直播打开成功率如何优化?
直播流从推流端到服务端再到播放器播放的过程中会经过主播端推流、服务端转码、CDN 分发、播放端拉流、解封装、音视频解码、音视频同步、音视频渲染等阶段,每个阶段遇到了问题都可能造成播放错误。
我们可以从下面几个方面来优化直播打开成功率:
1、推流端降低推流断流率 断流主动重连 退后台保持推流尽量避免断流 推流多模板策略适配不同网络情况降低断流和卡顿 推流码率自适应适配网络抖动情况降低断流和卡顿 2、网络传输问题优化 使用 HTTPDNS 防止 DNS 劫持和 DNS 解析转发问题带来的网络错误 网络中断重连 TCP 预连接、连接复用、连接可用性定期维护等方案来保证网络连接质量 3、视频格式和编码问题优化 音视频编码格式及封装格式统一来降低解封装和解码错误 4、视频同步问题优化 推流时对音视频进行均匀交错 推流时对齐音视频时间戳避免跳变
更多的优化方案可以参考:
2、直播播放秒开如何优化?
拆解直播间打开并播放的过程,我们大致可以分为下面几个阶段:
业务请求直播间数据 播放器初始化 DNS 解析 TCP 连接 HTTP 响应 音视频探测 媒体封装格式探测 音频编码格式探测(要创建解码器) 视频编码格式探测(要创建解码器) 音视频解码 缓冲和起播策略 渲染
从这个阶段拆分切入,下面这些思路可以参考来优化直播播放秒开:
1、客户端业务侧提前获取流地址 2、上下滑场景提前加载播放器 3、通过封面图占位衔接来优化秒开体验,占位封面图可以降低清晰度来提升加载速度 4、使用 HTTPDNS 优化 DNS 解析耗时 5、定时更新 HTTPDNS 本地缓存,网络切换时主动更新 HTTPDNS 本地缓存,提升 HTTPDNS 有效率 6、通过 TCP 预连接和连接复用优化建连耗时 7、提升 CDN 边缘节点命中率,降低 CDN 回源耗时 8、统一直播流封装格式和编码格式,优化 avformat_find_stream_info,降低音视频流探测耗时 9、业务层提前获取直播流 VideoHeader(包括 SPS、PPS、VPS 等数据)信息,并基于编码信息提前创建解码器,降低直播间打开时的创建解码器的耗时 10、优化缓冲和起播策略,视频首帧数据到达就立即渲染 11、流媒体服务器侧 GOP 缓存,保证播放端在接入直播时能先获取到 I 帧马上渲染出画面 12、服务端快速下发策略,比如在拉取直播流时,服务端将以 5 倍于平时带宽的速度下发前面缓存的 1s 的数据,提升首帧速度
更多的优化方案可以参考:
3、直播播放卡顿如何优化?
优化直播卡顿大致上可以分为几个大方向:
码率调控 播放器策略 推流端策略 CDN 策略
下面是一些可以参考的直播播放卡顿的优化思路:
1、推流端使用 H.265 推流,相对 H.264 降低推流码率 2、播放端支持 H.265 软解,从而支持 H.265 低码率流 3、按业务场景对部分直播间推流分辨率 540P,相对 720P 降低推流码率 4、推流端使用软编,软编相对硬编可以适当降低推流码率 5、支持直播播放过程中的自适应码率选择,在用户卡顿时降低播放码率 6、使用多级缓冲水位策略,当发生卡顿时提升缓冲水位以加载更多数据后再下次起播,降低后面卡顿概率 7、低缓冲时低倍速播放,降低对缓冲区数据的消耗速度,降低卡顿概率 8、推流端支持退后台继续推流,降低主播使用手机推流时退后台导致的播放端卡顿 9、在 CDN 服务端来控制下发视频数据的带宽和速度,在拉取直播流时,服务端以数倍于平时带宽的速度下发前面缓存,降低开播卡顿
更多的优化方案可以参考:
4、直播延时如何优化?
直播播放延时,指的是从主播推流一帧画面到用户观看到这帧画面之间的时间差。
要统计直播播放延时,可以在推流端编码视频时增加 SEI 信息,其中可以添加时间戳信息。在播放时,将 SEI 中的时间戳解出来,同时获取本地的时间戳,这两个时间戳的差值即直播播放延时。
这里有一个问题:这两个时间戳如果是从本地取得,则可能由于设备对时问题存在误差。这种情况下可以从服务端的 NTP 服务来取时间。
下面是优化直播延时的一些参考思路:
1、高缓冲高倍速播放,即当播放器缓冲区的数据累积的较多时,对应的播放延时会比较大,这时候可以加速播放来加快对缓冲区数据的消耗从而降低延时 2、丢帧降延时,当缓冲区的累积的数据已经非常多,可以直接丢掉缓冲区的音视频帧来消耗这个延时 3、CDN 吐数据控制总是从一个 GOP 开始下发,下发数据长度不超过拉流端缓冲区长度的前提 4、基于 RTC 协议来实现直播,降低延时
更多的优化方案可以参考:
更多的音视频知识、面试题、技术方案干货可以进群来看: