WebRTC的TaskQueue原始碼分析

2021-08-19 20:55:02 字數 990 閱讀 1134

taskqueue的中文翻譯是「任務佇列」,顧名思義,它的作用就是把一些「任務」儲存在佇列中,然後再從佇列中取出任務並執行。由於佇列是fifo,所以任務佇列具有有序性。

**提供的介面是posttask(std::unique_ptr task):

void taskqueue::posttask(std::unique_ptrtask)
posttask作用是將任務傳遞給taskqueue::impl_ ,impl_ 是taskqueue中的內部類impl的例項,當任務傳遞至impl中的posttask函式後,會將任務推送至佇列pending_中。

void taskqueue::impl::posttask(std::unique_ptrtask)
void channel::processandencodeaudio;
processandencodeaudio函式對音訊幀audio_frame進行判斷、處理後,將會執行

encoder_queue_->posttask(std::unique_ptr(

new processandencodeaudiotask(std::move(audio_frame), this)));

這樣,就把編碼一幀音訊的任務放到了任務佇列中encoder_queue_,然後processandencodeaudiotask會被非同步執行。當有很多幀音訊被放進encoder_queue__中之後,由於佇列的fifo特性,會將音訊幀按照採集順序依次進行編碼。

taskqueue的設計很巧妙,把乙個個closure放進佇列中,然後在執行執行緒中把任務closure取出後執行。

這樣能夠保證同乙個taskqueue物件中的任務,都會在乙個執行緒內執行,並且具有先後順序。此外,處理不同型別的任務,只要new出不同的taskqueue物件就可以,十分方便,這是因為taskqueue中佇列儲存的是closure,而不是具體的物件或指標。

WebRTC入門學習之初識WebRTC

引言 先宣告本人只是小小實習生一枚,若有不正確的,希望大家幫忙指正。一 webrtc基本架構 二 w3c提供的webrtc api 英文api 個人建議看英文版 中文api 版 三個主要api rtcdatachannel 用以任意應用資料通訊 學習重點 offer answer狀態機變化和ice狀...

WebRTC的優缺點

作為google開源的技術,webrtc並不是乙個可以拿來就用並且效能很好的產品,需要工程師們對其進行較多的改善。本文主要來談一談webrtc的優缺點。webrtc的優點 3.強大的打洞能力。webrtc技術包含了使用stun ice turn rtp over tcp的關鍵nat和防火牆穿透技術,...

簡單的WebRTC例子

home lang en b answer.html 作為answer home lang en text align center class videos container peer1 to peer2 autoplay controls demo用 postmessage傳遞資料,業務使用可...