VLC对Live555 RTSP视频直播稳定性问题
扫描二维码
随时随地手机看文章
从不同时间测试来看,2015 VLC安卓版对rtsp兼容不太好,很不稳定;2016年已经稳定下来了,但官网提供的android app还是存在直播时卡机问题,开发人员需要进行提取去掉部分功能才能集成到自己的app中。
若使用live555做为网络直播流媒体服务,当网络延迟造成播放速度快于流下载的速度,即doGetNextFrame函数调用时流还没有传输过来;此时,用户需要增加延迟N毫秒执行任务,不能直接return返回;否则公网/内网播放是很容易中断的(不是立即断,所以是很多人长时间纠结也不容易发现中断的原因),同时也会造成崩溃情况。
总的来说:当doGetNextFrame没流时,不能直接return,一定要加延迟执行 。也不能什么 都不处理,直接让执行到函数中末尾FramedSource::afterGetting(this)代码(很容易崩溃);
下面列出关键延迟执行代码(来自网络开发人员启发),定义延迟执行回调函数
void LiveStreamSource::GetNextFrame(void* clientData) { LiveStreamSource* obj=(LiveStreamSource*)clientData; if(obj!=NULL) { if (!obj->isCurrentlyAwaitingData()) return; obj->doGetNextFrame(); } }
接着,在doGetNextFrame函数中视具体情况适当位置增加
void LiveStreamSource::doGetNextFrame() { //TODO 其他代码 if(xxx) { delayTask=envir().taskScheduler().scheduleDelayedTask(30000,GetNextFrame,this);//没数据延迟30毫秒 return; } //TODO 其他代码 }