VLC对Live555 RTSP视频直播稳定性问题

本文探讨了2015年VLC安卓版对RTSP协议支持的稳定性问题,并针对使用Live555作为网络直播流媒体服务时遇到的播放速度与流下载速度不匹配的问题提出了解决方案。文章强调了在doGetNextFrame函数中加入延迟执行的重要性,以避免播放中断和崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值