yangrtc/(又名metaRTC)源码分析(四)
这一次,我们解决了一个通信系统中常见的问题。
语音播放数据的延迟问题。
项目场景:
业务流程大致如下:
- yangrtc拉取OPUS流,解码存入队列之后;
- 业务线程从队列取出数据,进行编码修改后丢入编码后队列;
- Play业务取出编码后数据进行消费。
问题描述
在使用yangrtc库,进行二次开发的过程中,出现了一个问题,语音数据随着“拉流时间持续时间越来越长”,播放端出现了延迟越来越大的情况?
原因分析:
当右侧的编码后队列,不停的膨胀,而Play业务的消费能力跟不上时,会产生积压。
最终导致播放延迟。
解决方案:
- 计算左侧队列的生产能力,如每秒多少条;我这边是1秒生产50条;
- 计算右侧队列的消费能力。我这边是1秒消费12.5条;
- 当两者达到平衡状态时,能够保证语音流的实时性;
最终我的解决方案:
- 业务线程,根据右侧编码队列的消费能力,做了适当的流控,保证速度达到一致的平衡。