几个月前,TSINGSEE青犀视频开发团队增加了EasyDSS对DASH直播的支持,在EasyDSS的DASH版本中,不仅直播分发了DASH流,并且经过研究,虚拟直播推到直播间也拥有了DASH流数据。
此版本虚拟直播采用新内核“lalserver”中拉flv本地文件流输出RTMP流。实现完成后还是存在会虚拟直播中断的问题,发现是在调用“lalserver”push方法时,返回了error,” context deadline exceeded”如图:
于是我们对该问题进行了优化调整。首先将拉flv推rtmp方法使用递归处理,如果返回error,则重新推流,这样会发现如果有虚拟直播中断推流不成功,则就一直在推流-返回error,会导致程序一直卡在push方法中一直循环。
经测试发现,代码逻辑中对pushsession做释放是放在for循环之后,但是代码中返回error时,for直接return,而pushsession则无法释放,导致下次pushsession推流时则继续报error,所以现在加defer,将释放资源提到for循环上面,则就会执行到释放资源方法。
defer:将会在该方法返回前最后执行的关键字
递归处理:
将session释放放在最上面: