当前位置: 首页 > 工具软件 > CAREYE > 使用案例 >

CarEye推流库中对于MP4文件推送的优化心得

尉迟德惠
2023-12-01

之前的CarEye推流库推送MP4文件的逻辑是创建推送通道成功后就一直推送媒体流到队列中,然后推送线程读取队列信息进行推送,跟推送实时媒体流数据是一个逻辑,不过后来发现这样会造成这么一个问题,当网络不好的时候会丢帧,推送文件毕竟不同于推送实时流,用户是需要看到完整影像的,基于此点进行逻辑的优化:

开始的时候在解码线程中进行推流通道的网络状态检测,如果断网则暂停推送,恢复连接后就继续推送,这样实施起来相对也简单,不过在实现后发现暂停推送后网络不会自动重连,查看libRTMP库代码后发现是只有你推流的过程中推流失败会重新连接一次网络,如果不推流则不进行重连,这样就有些为难了,这得区分是推送文件还是推送实时流。

然后在推流线程中进行检测,当为推送文件并推送失败时,检测网络状态,网络断开则进行定时重连并报告给解码线程,解码线程检测到网络断开暂停解码,重连成功后继续解码,修改完成后倒是可以正常推送了,但正如你所想,事情不会这么简单的,测试发现断开重连后播放端会看到快进播放的情况或播放失败的情况,这是如何造成的呢?解码线程的时间同步问题。。。费了一番力气后将时间同步问题解决,再进行测试就OK了!~!

808, 905部标流媒体开源项目:https://github.com/Car-eye-team QQ群: 590411159

 类似资料: