從不同時間測試來看,2015 VLC安卓版對rtsp兼容不太好,很不穩(wěn)定;2016年已經穩(wěn)定下來了,但官網提供的android app還是存在直播時卡機問題,開發(fā)人員需要進行提取去掉部分功能才能集成到自己的app中。
?若使用live555做為網絡直播流媒體服務,當網絡延遲造成播放速度快于流下載的速度,即doGetNextFrame函數(shù)調用時流還沒有傳輸過來;此時,用戶需要增加延遲N毫秒執(zhí)行任務,不能直接return返回;否則公網/內網播放是很容易中斷的(不是立即斷,所以是很多人長時間糾結也不容易發(fā)現(xiàn)中斷的原因),同時也會造成崩潰情況。
?總的來說:當doGetNextFrame沒流時,不能直接return,一定要加延遲執(zhí)行 。也不能什么 都不處理,直接讓執(zhí)行到函數(shù)中末尾FramedSource::afterGetting(this)代碼(很容易崩潰);
下面列出關鍵延遲執(zhí)行代碼(來自網絡開發(fā)人員啟發(fā)),定義延遲執(zhí)行回調函數(shù)
void?LiveStreamSource::GetNextFrame(void*?clientData) { LiveStreamSource*?obj=(LiveStreamSource*)clientData; if(obj!=NULL) { if?(!obj->isCurrentlyAwaitingData())?return; obj->doGetNextFrame(); ? } }
接著,在doGetNextFrame函數(shù)中視具體情況適當位置增加
void?LiveStreamSource::doGetNextFrame()?{ //TODO?其他代碼 if(xxx) { delayTask=envir().taskScheduler().scheduleDelayedTask(30000,GetNextFrame,this);//沒數(shù)據(jù)延遲30毫秒 return; } //TODO?其他代碼 }