webrtc(5) 採集模組
阿新 • • 發佈:2019-01-25
採集器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,到了這裡,原始的幀資料就從採集模組傳輸到了下一個模組(一般是編碼模組)