webrtc 关键模块创建的时机

文章目录

    • [一 webrtc 各个模块创建的时机](#一 webrtc 各个模块创建的时机)
      • [1 CreatePeerConnectionFactory](#1 CreatePeerConnectionFactory)
        • [1.1.1 创建的模块](#1.1.1 创建的模块)
        • [1.1.2 关键代码](#1.1.2 关键代码)
      • 2PeerConnectionFactory::Initialize
        • [1.2.1 创建的模块](#1.2.1 创建的模块)
        • [1.2.2 关键代码](#1.2.2 关键代码)
      • [3 CreatePeerConnection](#3 CreatePeerConnection)
        • [1.3.1 创建的模块](#1.3.1 创建的模块)
        • [1.3.2 关键代码](#1.3.2 关键代码)
      • [4 PeerConnection::Initialize](#4 PeerConnection::Initialize)
        • [1.4.1 创建的模块](#1.4.1 创建的模块)
        • [1.4.2 关键代码](#1.4.2 关键代码)
      • 5PeerConnection::AddTransceiver
        • [1.5.1 创建的模块](#1.5.1 创建的模块)
        • [1.5.2 关键代码](#1.5.2 关键代码)
      • 6PeerConnection::SetLocalDescription
        • 6.1PushdownTransportDescription
          • [1.6.1.1 创建的模块](#1.6.1.1 创建的模块)
          • [1.6.1.2 关键代码](#1.6.1.2 关键代码)
        • 6.2UpdateTransceiversAndDataChannels
          • [1.6.2.1 创建的模块](#1.6.2.1 创建的模块)
          • [1.6.2.2 关键代码](#1.6.2.2 关键代码)
        • [6.3 UpdateSessionState](#6.3 UpdateSessionState)
          • [1.6.3.1 创建的模块](#1.6.3.1 创建的模块)
          • [1.6.3.2 关键代码](#1.6.3.2 关键代码)

一 webrtc 各个模块创建的时机

1 CreatePeerConnectionFactory

1.1.1 创建的模块
c 复制代码
TaskQueueFactory
CallFactory
CompositeMediaEngine
WebRtcVoiceEngine
WebRtcVideoEngine
1.1.2 关键代码
c 复制代码
/*
api/create_peerconnection_factory.h
CreatePeerConnectionFactory 函数

PeerConnectionFactoryDependencies dependencies;
dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
dependencies.call_factory = CreateCallFactory();
创建:

dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_dependencies));
创建了:
CompositeMediaEngine
WebRtcVoiceEngine
WebRtcVideoEngine
*/

2PeerConnectionFactory::Initialize

1.2.1 创建的模块
c 复制代码
BasicNetworkManager
BasicPacketSocketFactory
ChannelManager
1.2.2 关键代码
c 复制代码
/*
// 关键代码
default_network_manager_.reset(new rtc::BasicNetworkManager());	
default_socket_factory_.reset(
      new rtc::BasicPacketSocketFactory(network_thread_));
	  
channel_manager_ = std::make_unique<cricket::ChannelManager>(
	  std::move(media_engine_), std::make_unique<cricket::RtpDataEngine>(),
	  worker_thread_, network_thread_);

// 收集音频编码器
channelManager::Init -> media_engine_->Init  -> voice().Init();
*/

3 CreatePeerConnection

1.3.1 创建的模块
c 复制代码
Call
RtpTransportControllerSend
BasicPortAllocator
PeerConnection
1.3.2 关键代码
c 复制代码
/*
PeerConnectionFactory::CreatePeerConnection

创建call
    PeerConnectionFactory::CreateCall_w
    CallFactory::CreateCall
    Call::Create
创建:RtpTransportControllerSend
创建 BasicPortAllocator
*/

4 PeerConnection::Initialize

1.4.1 创建的模块
c 复制代码
JsepTransportController
WebRtcSessionDescriptionFactory
1.4.2 关键代码
c 复制代码
// 创建JsepTransportController
transport_controller_.reset(new JsepTransportController(
      signaling_thread(), network_thread(), port_allocator_.get(),
      async_resolver_factory_.get(), config));
// 创建WebRtcSessionDescriptionFactory
webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory(
  signaling_thread(), channel_manager(), this, session_id(),
  std::move(dependencies.cert_generator), certificate, &ssrc_generator_));

5PeerConnection::AddTransceiver

1.5.1 创建的模块
c 复制代码
RtpSenderInternal
RtpReceiverInternal
RtpTransceiver
1.5.2 关键代码
c 复制代码
/*
PeerConnection::CreateSender              RtpSenderInternal
PeerConnection::CreateReceiver            RtpReceiverInternal
PeerConnection::CreateAndAddTransceiver   RtpTransceiver
*/

6PeerConnection::SetLocalDescription

6.1PushdownTransportDescription
1.6.1.1 创建的模块
c 复制代码
DtlsTransportInternal 
RtpTransport 
SrtpTransport
DtlsSrtpTransport 
RtpTransportInternal
1.6.1.2 关键代码
c 复制代码
/*
创建:
PeerConnection::PushdownTransportDescription  
transport_controller_->SetLocalDescription
JsepTransportController::ApplyDescription_n 
JsepTransportController::MaybeCreateJsepTransport
*/
6.2UpdateTransceiversAndDataChannels
1.6.2.1 创建的模块
c 复制代码
VoiceMediaChannel
VoiceChannel
或
VideoMediaChannel
VideoChannel
1.6.2.2 关键代码
c 复制代码
/*
创建:
VoiceMediaChannel
VoiceChannel

PeerConnection::UpdateTransceiversAndDataChannels		
PeerConnection::UpdateTransceiverChannel
PeerConnection::CreateVoiceChannel
channel_manager()->CreateVoiceChannel
	
关键代码:			
创建:VoiceMediaChannel
VoiceMediaChannel* media_channel = media_engine_->voice().CreateMediaChannel(call, media_config, options, crypto_options);
创建:VoiceChannel    成员有:VoiceMediaChannel  rtp_transport(MaybeCreateJsepTransport 创建的rtp_transport)

或

创建:
VideoMediaChannel
VideoChannel

PeerConnection::UpdateTransceiversAndDataChannels		
PeerConnection::UpdateTransceiverChannel
PeerConnection::CreateVideoChannel	  
channel_manager()->CreateVideoChannel
	
关键代码:			
创建 VideoMediaChannel
VideoMediaChannel* media_channel = media_engine_->video().CreateMediaChannel
创建:VideoChannel 成员有:VideoMediaChannel  rtp_transport(MaybeCreateJsepTransport 创建的rtp_transport)
*/
6.3 UpdateSessionState
1.6.3.1 创建的模块
c 复制代码
WebRtcAudioSendStream
webrtc::AudioSendStream
ChannelSend
WebRtcVideoSendStream
VideoSendStream
1.6.3.2 关键代码
c 复制代码
/*
创建 WebRtcAudioSendStream
创建 webrtc::AudioSendStream
创建:ChannelSend

PeerConnection::UpdateSessionState
PeerConnection::PushdownMediaDescription
BaseChannel::SetLocalContent
VoiceChannel::SetLocalContent_w
BaseChannel::UpdateLocalStreams_w
WebRtcVoiceMediaChannel::AddSendStream
WebRtcVoiceMediaChannel::WebRtcAudioSendStream
AudioSendStream::AudioSendStream  创建 webrtc::AudioSendStream
voe::CreateChannelSend 创建:ChannelSend

或

创建:WebRtcVideoSendStream
创建: VideoSendStream

PeerConnection::UpdateSessionState
PeerConnection::PushdownMediaDescription
BaseChannel::SetLocalContent
VoiceChannel::SetLocalContent_w
BaseChannel::UpdateLocalStreams_w
WebRtcVideoChannel::AddSendStream
WebRtcVideoChannel::WebRtcVideoSendStream
备注:
1 创建 WebRtcVideoSendStream
2 创建 webrtc::VideoSendStream::Config,把自己传递给 config.send_transport

VideoChannel::SetRemoteContent_w
WebRtcVideoChannel::SetSendParameters
WebRtcVideoChannel::ApplyChangedParams
WebRtcVideoChannel::WebRtcVideoSendStream::SetSendParameter
WebRtcVideoChannel::WebRtcVideoSendStream::SetCodec
WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream
Call::CreateVideoSendStream (参数有webrtc::VideoSendStream::Config)
创建 VideoSendStream
创建 VideoSendStreamImpl(参数有webrtc::VideoSendStream::Config)
创建 rtp_video_sender 其中 参数send_transport 就是 WebRtcVideoChannel
备注:将来分片rtp数据就是通过WebRtcVideoChannel 发送出去
*/
相关推荐
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wuyk5554 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
2601_955662464 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛4 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
QYRdata4 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK4 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
旺仔小馒头wang4 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
chshang19924 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖4 天前
Netty 核心组件与 Reactor 模型详解
网络·架构