VLC對Live555 RTSP視訊直播穩定性問題
阿新 • • 發佈:2019-02-15
從不同時間測試來看,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 其他程式碼
}