日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webrtc收包流程源码分析

發布時間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webrtc收包流程源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版本:

webrtc M59

收包流程:

AsyncUDPSocket::OnReadEvent

AllocationSequence::OnReadPacket

HandleIncomingPacket

UDPPort::OnReadPacket

Connection::OnReadPacket

P2PTransportChannel::OnReadPacke

SignalReadPacket

BaseChannel::OnPacketRead

BaseChannel::HandlePacket(該接口內的WantsPacket會判斷rtp包的payload type是否在std::set<int> payload_types_集合內,不在的話不會處理)

BaseChannel::OnPacketReceived

WebRtcVoiceMediaChannel::OnPacketReceived

PacketReceiver::DeliveryStatus Call::DeliverRtp

AudioReceiveStream::OnRtpPacket(video通話為VideoReceiveStream::OnRtpPacket)

Channel::OnRtpPacket

Channel::ReceivePacket

RtpReceiverImpl::IncomingRtpPacket

?NetEqImpl::InsertPacket

NetEqImpl::InsertPacketInternal

語音流程:

WebRtcVoiceMediaChannel::OnPacketReceived

?AudioReceiveStream::OnRtpPacket

ChannelProxy::OnRtpPacket

?Channel::OnRtpPacket

Channel::ReceivePacket

RtpReceiverImpl::IncomingRtpPacket

RTPReceiverAudio::ParseAudioCodecSpecific

Channel::OnReceivedPayloadData

AudioCodingModuleImpl::IncomingPacket

AcmReceiver::InsertPacket

ps:可參考http://www.it610.com/article/5250159.htm

視頻收包流程:

WebRtcVideoChannel2::OnPacketReceived

PacketReceiver::DeliveryStatus Call::DeliverRtp

RtpStreamReceiver::ReceivePacket

RtpReceiverImpl::IncomingRtpPacket

RTPReceiverVideo::ParseRtpPacket

RtpStreamReceiver::OnReceivedPayloadData

PacketBuffer::InsertPacket(組幀)

?RtpStreamReceiver::OnReceivedFrame(檢查是否需要請求關鍵幀、再查找幀的參考關系是否滿足)

void RtpFrameReferenceFinder::ManageFrame

void RtpFrameReferenceFinder::ManageFrameGeneric

VideoReceiveStream::OnCompleteFrame

FrameBuffer::InsertFrame (將幀插入到jitter buffter至此數據包的接收和處理已經完成)

?

視頻解碼流程:

VideoReceiveStream::VideoReceiveStream(創建解碼線程在該構造函數里面,調用VideoReceiveStream::DecodeThreadFunction)

VideoReceiveStream::Decode( 如果有幀才會去解碼,最長等待3秒,在VideoReceiveStream::Decode中有設置等待時間)

FrameBuffer::ReturnReason FrameBuffer::NextFrame (獲取幀)

VideoReceiver::Decode

VCMGenericDecoder* VCMCodecDataBase::GetDecoder(獲取解碼,如果沒有創建則調用)

CreateAndInitDecoder(硬解的話走的是External codec流程也就是new VCMGenericDecoder(external_dec_item->external_decoder_instance, true))

VCMGenericDecoder::InitDecode

MediaCodecVideoDecoder::InitDecode

MediaCodecVideoDecoder::InitDecodeOnCodecThread()

VCMDecodedFrameCallback::Decoded(解碼完成)

VideoStreamDecoder::FrameToRender(收到解碼后的數據)

IncomingVideoStream::OnFrame? ?(將幀放入隊列VideoRenderFrames(incoming_video_stream_接收解碼對象通過VideoStreamDecoder::VideoStreamDecoder ->VideoReceiver::RegisterReceiveCallback(this)–>VCMDecodedFrameCallback::SetUserReceiveCallback)

IncomingVideoStream::Dequeue

?

?

ps: 這個只是一部分,其余的后續補充

?

轉載于:https://my.oschina.net/xgcode/blog/2120620

總結

以上是生活随笔為你收集整理的webrtc收包流程源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。