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收包流程源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript +new Date
- 下一篇: html 5 video audio