当前位置:首页 > 芯闻号 > 充电吧
[导读]从不同时间测试来看,2015 VLC安卓版对rtsp兼容不太好,很不稳定;2016年已经稳定下来了,但官网提供的android app还是存在直播时卡机问题,开发人员需要进行提取去掉部分功能才能集成到

从不同时间测试来看,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 其他代码
}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭