WebRTC source code analysis - receiver and decoder

Reference: Process analysis after WebRTC receives offer instruction and process analysis of jitterbuffer data to decoder |

rtp_video_stream_receiver2.cc : OnReceivedPayloadData   video_header.is_last_packet_in_frame |= rtp_packet.Marker();

video_rtp_depacketizer_h264.cc:

absl::optional<VideoRtpDepacketizer::ParsedRtpPayload>

VideoRtpDepacketizerH264::Parse(rtc::CopyOnWriteBuffer rtp_payload)

packet_buffer_.InsertPacket

OnInsertedPacket --- The result of framing goes here

rtp_video_stream_receiver2.cc : OnAssembledFrame

buffered_frame_decryptor.cc: ManageEncryptedFrame ->DecryptFrame 

rtp_video_stream_receiver2.cc : OnDecryptedFrame

OnCompleteFrames

OnCompleteFrame

 http://receive_statistics_proxy.cc 的 ReceiveStatisticsProxy::OnCompleteFrame

 VideoStreamBufferController::InsertFrame  ->  stats_proxy_->OnCompleteFrame(metadata.is_keyframe, metadata.size,metadata.contentType); receiv:key+delta

void VideoStreamBufferController::MaybeScheduleFrameForRelease

There is less frame in the middle

VideoStreamBufferController::ForceKeyFrameReleaseImmediately()

VideoStreamBufferController::OnFrameReady

VideoReceiveStream2::OnEncodedFrame

VideoReceiveStream2::DecodeAndMaybeDispatchEncodedFrame

VCMGenericDecoder :: Decode ( real decode ) -- the decoder_ here is VideoDecoderSoftwareFallbackWrapper

VideoDecoderSoftwareFallbackWrapper::Decode

     硬解: RTCVideoDecoderAdapter::Decode

     Soft solution : H264DecoderImpl::Decode (FFmpeg decoding)

   (The hardware_decoder and software_decoder will be created in video_codec_factory.cc, and passed to the webrtc fallback module through webrtc:: CreateVideoDecoderSoftwareFallbackWrapper )

VideoReceiveStream2::OnCompleteFrame(std::unique_ptr<EncodedFrame> frame)

VideoStreamBufferController::InsertFrame

FrameBuffer::InsertFrame

Hardware decoding failed:

NotifyError will enter the error state. Once it enters the error state, it will return directly to std:: move (decode_cb). Run (DecoderStatus::Codes::kInterrupted);

media/gpu/windows/d3d11_video_decoder.cc

log keyword:

deocde失败:Failed to decode frame

Decoded frame is not a CVPixelBuffer 

Decryption failed: Failed to unprotect

Error code:

avcodec_send_packet error: -1094995529  FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input

avcodec_receive_packet -35: AVERROR(EAGAIN) output is not available in the current state - user must try to send input

Guess you like

Origin blog.csdn.net/luyumiao1990/article/details/131751381