WEBRTC 视频接收原理及流程



创建解码器
VideoChannel::SetRemoteContent_w->BaseChannel::UpdateRemoteStreams_w->
WebRtcVideoChannel2::AddRecvStream->WebRtcVideoChannel2::AddRecvStream[new WebRtcVideoReceiveStream]->
WebRtcVideoReceiveStream::ConfigureCodecs->WebRtcVideoChannel2::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder->
VideoDecoder::Create->H264Decoder::Create|VP8Decoder::Create|VP9Decoder::Create()->
WebRtcVideoReceiveStream::RecreateWebRtcStream->Call::CreateVideoReceiveStream[new VideoReceiveStream]->


VCMGenericDecoder::RegisterDecodeCompleteCallback->H264DecoderImpl::RegisterDecodeCompleteCallback
/*
VideoCodingModuleImpl::RegisterReceiveCallback->VideoReceiver::RegisterReceiveCallback->
VCMDecodedFrameCallback::SetUserReceiveCallback->*/
注册用户接收已解码视频帧
1.VideoStreamDecoder::VideoStreamDecoder->VideoReceiver::RegisterReceiveCallback[注册VideoStreamDecoder为回调]->
2.VCMDecodedFrameCallback::SetUserReceiveCallback

解码线程
VideoReceiveStream::DecodeThreadFunction->VideoReceiveStream::Decode->
VideoReceiver::Decode(uint16_t maxWaitTimeMs)->VCMReceiver::FrameForDecoding[返回VCMEncodedFrame*]->
VideoReceiveStream::Encoded(EncodedImage& encoded_image)[从网络接收处理后完整的已编码帧传入]->
VideoReceiver::Decode->VCMCodecDataBase::GetDecoder(const VCMEncodedFrame& frame,VCMDecodedFrameCallback*)
[传入解码后的回调类VCMDecodedFrameCallback]->VCMGenericDecoder::RegisterDecodeCompleteCallback->
H264DecoderImpl::RegisterDecodeCompleteCallback->
VCMCodecDataBase::CreateAndInitDecoder->
H264DecoderImpl::Decode(const EncodedImage& input_image)[H264解码成功后调用之前注册的回调]->
VCMDecodedFrameCallback::Decoded->VCMReceiveCallback::FrameToRender->
VideoStreamDecoder::FrameToRender->
IncomingVideoStream::OnFrame(const VideoFrame& video_frame)->
IncomingVideoStreamProcess[线程]->IncomingVideoStream::DeliverFrame->
VideoReceiveStream::OnFrame(const VideoFrame& video_frame)[从编码传入又到解码输出]
[config_.renderer->OnFrame(video_frame);renderer为何物]
在构造函数初始化WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream
config_.renderer = this renderer为视频引擎流接收对象WebRtcVideoReceiveStream,流回到视频引擎]
->WebRtcVideoChannel2::WebRtcVideoReceiveStream::OnFrame(const webrtc::VideoFrame& frame)
->VideoSinkInterface::OnFrame(const VideoFrameT& frame)[WebRtcVideoReceiveStream::SetSink接收者]
VideoRtpReceiver::VideoRtpReceiver[provider_->SetVideoPlayout(ssrc_, true, &broadcaster_),
即实际接收者为 VideoBroadcaster::OnFrame][最终用户通过VideoBroadcaster::AddOrUpdateSink 注册观察者]->


WebRtcSession::SetVideoPlayout->VideoChannel::SetSink->VideoMediaChannel::SetSink->


关键类图








  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值