webrtc(6) 編碼模塊

編碼模塊VideoStreamEncoder

媒體流

  • 其實對比較高層的開發者來說,編碼器是不可見的,可見的只有流,例如:
    • 1、視頻發送流:VideoSendStream
    • 2、視頻接收流:VideoReceiveStream
    • 3、音頻發送流:AudioSendStream
    • 4、音頻接收流:AudioReceiveStream

媒體流包含的子模塊

  • 以視頻發送流VideoSendStream爲例,它包含了編碼器和發送模塊:
    • 1、VideoStreamEncoder,視頻編碼器
    • 2、VideoSendStreamImpl,視頻流發送模塊

編碼器

  • 1、VideoStreamEncoder是編碼器的高層類,分裝了很多與編碼器相關的東西,它的定義如下:
class VideoStreamEncoder : public VideoStreamEncoderInterface,private EncodedImageCallback,protected AdaptationObserverInterface
  • 其中:VideoStreamEncoderInterface的基類是數據輸出點,因此編碼器本身可以作爲採集模塊的輸出點

  • 2、編碼器自己不能產生數據,因此需要調用SetSource接口來設置數據源(即採集模塊)

  • 3、編碼器編碼之後的數據需要傳給下一個模塊,因此需要調用SetSink接口來設置編碼器的輸出點

  • 4、VideoStreamEncoder對外表現爲一個編碼器,但是實際上它並不執行編碼的功能,而是通過子模塊 vcm::VideoSender去操作

  • 5、接口VideoStreamEncoder::OnFrame從採集模塊中得到圖像數據,然後設置時間戳等信息,然後調用下面的一些接口和函數:

    • 5.1、VideoStreamEncoder::MaybeEncodeVideoFrame
    • 5.2、VideoStreamEncoder::EncodeVideoFrame
    • 5.3、VideoSender::AddVideoFrame,將圖像轉發給VideoSender模塊
  • 6、VideoSender模塊會調用實際的VPx、H264等編碼進行編碼,編碼完成之後通過回調函數把編碼後的數據傳給下一個模塊:

    • 6.1、VideoStreamEncoder::OnEncodedImage接口
    • 6.2、 EncoderSink/EncodedImageCallback的OnEncodedImage接口
    • 6.3、VideoSendStreamImpl::OnEncodedImage
  • 7、編碼後的數據最終通過VideoSendStreamImpl::OnEncodedImage傳到VideoSendStreamImpl模塊中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章