Live555 直播效能優化

2021-10-10 16:46:03 字數 898 閱讀 3921

void myframedsource::dogetnextframe()

.....省略其他正常邏輯

}static void myframedsource::delayreadframe(framedsource *sourc)

tasktoken basictaskscheduler0::scheduledelayedtask(int64_t microseconds,

taskfunc* proc,

void* clientdata) 

在live555中,凡是分配定時器的地方,用上述**替換,凡是delete alarmhandler物件的地方,呼叫fpool.free(alarmhandler )即可**記憶體再使用。fpool用乙個無鎖的佇列即可(live555是單執行緒工作模式),建議使用list或者queue 實現乙個無鎖記憶體池即可。

擴充套件幀解析buffer大小,即bank_size,預設值為150k,根據傳輸的h264資料幀大小,至少設定為300k。否則超出大小,可能會被live555拋棄。

增加outpacketbuffer::maxsize大小,同樣為了容納超大幀資料,否則可能會導致資料丟失。

在rtpinte***ce中,增加socket傳送緩衝區大小,即increasesendbufferto函式的引數值

對multiframedrtpsink::sendpacketifnecessary中,可以直接呼叫sendnext嘗試組建rtp報文傳送資料報,這樣修改的優點是已讀取的資料會被盡快傳送出去,不過也多占用一些執行緒時間。

對於應用程式將資料從自己的執行緒傳遞給live555的時候,應該儘量減少記憶體拷貝,最好是通過記憶體池的形式,以避免拷貝記憶體阻塞live555事件迴圈

另外live555是基於檔案的直播流伺服器,如果是修改為實時流直播則可以對基層讀取資料邏輯進行優化。

Live555效能優化實踐

優化1 同步讀取資料源修改為非同步讀取資料源,framedsource的子類的dogetnextframe函式中不要阻塞等待資料來源,在無資料時可以重新增加乙個定時器任務,延時再讀取資料。在無資料時增加乙個等待任務 void myframedsource dogetnextframe 省略其他正常邏...

LIVE555 利用FIFO實現直播

1.live555 直播 直播方案採取的是 直播流 fifo 輸出 的技術路線。2.搭建 a.在live555 編譯之後,在bin檔案下,有很多可執行程式生成,這些程式有些是live555伺服器 live555mediaserver 有些是客戶端 testrtspclient 還有大量的流推送服務 ...

live555原始碼分析 live555大致流程

今天大致分析了下live555的流程,以h264為例子進行的分析.從連線到傳送rtp rtcp資料報。首先分析呢,不能太關注細節,先整體再區域性。在分析的過程中,設計到live555自己封裝的乙個高階類 比如迭代器,雜湊表,而且這2個類在live555中運用的範圍還非常的廣,但是無不例外都是用鍊錶進...