RTSP推流方案调优

本文记录了一次解决RTSP推流导致的音频直播卡顿问题的调试过程。通过分析源码,使用live555的延时任务机制优化推流间隔,并针对TCP延迟确认机制进行调整,最终在实时操作系统上解决问题,消除了40毫秒的延迟,实现了流畅的音频播放。
摘要由CSDN通过智能技术生成

本项目是一个互联网音频广播得项目,其中APP推音频流到EasyDarwin服务器,云喇叭(音响,使用wifi联网)从EasyDarwin上拉流解码播放,但是在公司里测试时,老是出现播放卡顿的问题(公司网络不太稳定),前后大约耗时3个星期才从根本原因上解决问题。定位解决的过程大致如下:

一、一开始从源码去分析的,因为MP3一帧播放的时长大约是26.12毫秒,但是IOS得APP在填写RTP包的时间戳时舍去了0.12毫秒,直接填写26毫秒,也是起一个定时器,每隔26毫秒去推送一帧数据的,但是如果遇到网络情况不好的情况,那么不断每隔26毫秒去推送,那么会导致网络上的包越来越多,更加导致网络状况差,另一个方面,如果网络状态好时,因为这0.12毫秒的累积,最后也有可能导致拉流端的缓冲被填满的风险。于是做了第一次优化,优化方案就是使用了live555的taskschedule的机制,起了一个延时任务,在该任务里先记下上一帧推送RTP包后的系统时间戳(lastFrameTimestamp),然后记下推送当前帧的系统时间戳(currentTimeStamp),如果currentTimeStamp - lastFrameTimestamp的差值大于一帧数据的播放时长,则提前发送,提前的时间是delaySendTime = frameduration - (currentTimeStamp - g_lastFrameTimestamp - frameduration),同时把这个差值累积起来(deltaDelayTime),如果该差值达到了一帧数据的播放时长,则立马发送下一帧数据。整个的核心代码如下ÿ

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值