美文网首页webrtc 音视频传输
webrtc获取音视频编码并发送流程

webrtc获取音视频编码并发送流程

作者: 自由侠 | 来源:发表于2020-06-07 18:58 被阅读0次

以mediaosoup-broadcaster-demo为例说明:

函数调用流程:

获取视频帧:

webrtc::test::FrameGeneratorCapturer::InsertFrame  

webrtc::test::TestVideoCapturer::OnFrame

rtc::VideoBroadcaster::OnFrame

webrtc::VideoStreamEncoder::OnFrame

编码:

VideoStreamEncoder::OnFrame      

VideoStreamEncoder::MaybeEncodeVideoFrame

VideoStreamEncoder::EncodeVideoFrame

EncoderSimulcastProxy::Encode

LibvpxVp8Encoder::Encode

LibvpxVp8Encoder::GetEncodedPartitions

VideoStreamEncoder::OnEncodedImage

发送:

webrtc::internal::VideoSendStreamImpl::OnEncodedImage

webrtc::RtpVideoSender::OnEncodedImage

webrtc::RTPSenderVideo::SendVideo

以上调用流程是如何在代码中体现的?

1. createSquaresVideoTrack

          1). 创建factory (peerconnectionfactory) 如果没有

          2). 创建videosource (FrameGeneratorCapturerVideoTrackSource)

              videosource 里边有TestVideoCapturer, FrameGeneratorCapturer,这里边会根据初始化的帧率来连续的产生原始视频数据(yuv数据)  webrtc::test::FrameGeneratorCapturer::InsertFrame;  这个是后续编码, 发送的数据源头.   

          3).   创建videotrack

               actory->CreateVideoTrack(rtc::CreateRandomUuid(), video_track_source_);

 2. pc->AddTransceiver(track, transceiverInit)

     该函数建立videotrack 和 rtpsender之间的关系;    RtpTransceiverInterface 代表一个双向的数据通道, 包含rtpsender/rtpreceiver;   

     从以上流程来看, 我们调用的一些webrtc api 是为了建立各个流程各个模块之间的关联关系,  以至于我们产生的数据能够在后续被处理.  内部通过正常调用, 注册回调等方式把数据往下传递. 

相关文章

网友评论

    本文标题:webrtc获取音视频编码并发送流程

    本文链接:https://www.haomeiwen.com/subject/gunaahtx.html