1. 程式人生 > >webrtc(5) 採集模組

webrtc(5) 採集模組

採集器VideoCapturer

採集器的定義

class VideoCapturer : public sigslot::has_slots<>, public rtc::VideoSourceInterface<webrtc::VideoFrame>
  • 可以看到採集器繼承了VideoSourceInterface,因此採集器就是一個數據源

採集器的介面和實現

  • VideoCapturer是一個抽象的類,實際的採集器是VideoCapturer的子類WebRtcVideoCapturer;但是他們只定義了一些比較通用的對外的介面,而具體的採集功能是通過VideoCaptureModule實現的
  • VideoCaptureModule是採集模組,它也是一個抽象類,具體的實現位於VideoCaptureImpl
  • 可以這樣看:VideoCapturer/WebRtcVideoCapturer定義了採集的介面,具體的採集功能由VideoCaptureModule/VideoCaptureImpl實現

採集器包含的子模組

  • WebRtcVideoCapturer包含下面的一些模組:
    • VideoCaptureModule,視訊採集模組
    • WebRtcVcmFactory,主要是為了建立VideoCaptureModule,沒有其他太大的用處

採集的流程

  • 1、VideoCapturer::AddOrUpdateSink,註冊資料輸出點
  • 2、WebRtcVideoCapturer::Start,註冊一些資料回撥函式,然後開始採集
  • 3、VideoCaptureImpl::IncomingFrame,實際的採集工作交給VideoCaptureImpl處理,得到一幀之後VideoCaptureImpl::IncomingFrame被呼叫,這個函式會進行一些簡單的前處理
  • 4、VideoCaptureImpl::DeliverCapturedFrame,進行一些資料統計
  • 5、WebRtcVideoCapturer::OnFrame(步驟1註冊了資料回撥函式)
  • 6、VideoCapturer::OnFrame,簡單的資料轉發
  • 7、VideoBroadcaster::OnFrame,VideoBroadcaster相當於資料輸出點的集合
  • 8、VideoSinkInterface::OnFrame,到了這裡,原始的幀資料就從採集模組傳輸到了下一個模組(一般是編碼模組)