说明media thread 是主线程, 而 mediamgr里是worker thread networkmgr是network thread了。 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\Manager.cpp 
class  Manager  final  :  public  std:: enable_shared_from_this< Manager>  { 
private : struct  ResolvedNetworkStatus  { bool  isLowCost =  false ; bool  isLowDataRequested =  false ; bool  operator == ( const  ResolvedNetworkStatus & rhs)  const ; bool  operator != ( const  ResolvedNetworkStatus & rhs)  const ; } ; public : static  rtc:: Thread * getMediaThread ( ) ; Manager ( rtc:: Thread * thread,  Descriptor && descriptor) ; ~ Manager ( ) ; void  start ( ) ; void  receiveSignalingData ( const  std:: vector< uint8_t >  & data) ; void  setVideoCapture ( std:: shared_ptr< VideoCaptureInterface>  videoCapture) ; void  sendVideoDeviceUpdated ( ) ; void  setRequestedVideoAspect ( float  aspect) ; void  setMuteOutgoingAudio ( bool  mute) ; void  setIncomingVideoOutput ( std:: weak_ptr< rtc:: VideoSinkInterface< webrtc:: VideoFrame>>  sink) ; void  setIsLowBatteryLevel ( bool  isLowBatteryLevel) ; void  setIsLocalNetworkLowCost ( bool  isLocalNetworkLowCost) ; void  getNetworkStats ( std:: function< void ( TrafficStats,  CallStats) >  completion) ; void  setAudioInputDevice ( std:: string id) ; void  setAudioOutputDevice ( std:: string id) ; void  setInputVolume ( float  level) ; void  setOutputVolume ( float  level) ; void  addExternalAudioSamples ( std:: vector< uint8_t >  && samples) ; private : void  sendSignalingAsync ( int  delayMs,  int  cause) ; void  receiveMessage ( DecryptedMessage && message) ; void  updateCurrentResolvedNetworkStatus ( ) ; void  sendInitialSignalingMessages ( ) ; rtc:: Thread * _thread; EncryptionKey _encryptionKey; EncryptedConnection _signaling; bool  _enableP2P =  false ; bool  _enableTCP =  false ; bool  _enableStunMarking =  false ; ProtocolVersion _protocolVersion =  ProtocolVersion:: V0; FilePath _statsLogPath; std:: vector< RtcServer>  _rtcServers; std:: unique_ptr< Proxy>  _proxy; MediaDevicesConfig _mediaDevicesConfig; std:: shared_ptr< VideoCaptureInterface>  _videoCapture; std:: function< void ( State) >  _stateUpdated; std:: function< void ( AudioState,  VideoState) >  _remoteMediaStateUpdated; std:: function< void ( bool ) >  _remoteBatteryLevelIsLowUpdated; std:: function< void ( float ) >  _remotePrefferedAspectRatioUpdated; std:: function< void ( const  std:: vector< uint8_t >  & ) >  _signalingDataEmitted; std:: function< void ( int ) >  _signalBarsUpdated; std:: function< void ( float ) >  _audioLevelUpdated; std:: function< rtc:: scoped_refptr < webrtc:: AudioDeviceModule> ( webrtc:: TaskQueueFactory* ) >  _createAudioDeviceModule; std:: function< uint32_t ( const  Message & ) >  _sendSignalingMessage; std:: function< void ( Message&& ) >  _sendTransportMessage; std:: unique_ptr< ThreadLocalObject< NetworkManager>>  _networkManager; std:: unique_ptr< ThreadLocalObject< MediaManager>>  _mediaManager; State _state =  State:: Reconnecting; bool  _didConnectOnce =  false ; bool  _enableHighBitrateVideo =  false ; DataSaving _dataSaving =  DataSaving:: Never; std:: vector< std:: string>  _preferredCodecs; bool  _localNetworkIsLowCost =  false ; bool  _remoteNetworkIsLowCost =  false ; bool  _remoteIsLowDataRequested =  false ; absl:: optional< ResolvedNetworkStatus>  _currentResolvedLocalNetworkStatus; absl:: optional< ResolvedNetworkStatus>  _currentResolvedNetworkStatus; } ; 
_signaling ( EncryptedConnection:: Type:: Signaling, _encryptionKey, [ = ] ( int  delayMs,  int  cause)  {  sendSignalingAsync ( delayMs,  cause) ;  } ) , 
 
void :: sendSignalingAsync ( int ,  int )  { auto  task =  [ weak =  std:: weak_ptr < Manager> ( shared_from_this ( ) ) ,  cause]  { const  auto  strong =  weak. lock ( ) ; if  ( ! strong)  { return ; } if  ( const  auto  prepared =  strong-> _signaling. prepareForSendingService ( cause) )  { strong-> _signalingDataEmitted ( prepared-> bytes) ; } } ; if  ( delayMs)  { _thread-> PostDelayedTask ( std :: move ( task) ,  delayMs) ; }  else  { _thread-> PostTask ( std :: move ( task) ) ; } 
} 
	_sendTransportMessage =  [ = ] ( Message && message)  { _networkManager-> perform ( RTC_FROM_HERE,  [ message =  std:: move ( message) ] ( NetworkManager * networkManager)  { networkManager-> sendMessage ( message) ; } ) ; } ; 
但是_sendSignalingMessage 是外部传递下来的: 
 
void  Manager :: receiveMessage ( DecryptedMessage && message)  { const  auto  data =  & message. message. data; if  ( const  auto  candidatesList =  absl:: get_if < CandidatesListMessage> ( data) )  { _networkManager-> perform ( RTC_FROM_HERE,  [ message =  std:: move ( message) ] ( NetworkManager * networkManager)  mutable  { networkManager-> receiveSignalingMessage ( std:: move ( message) ) ; } ) ; }  else  if  ( const  auto  videoFormats =  absl:: get_if < VideoFormatsMessage> ( data) )  { _mediaManager-> perform ( RTC_FROM_HERE,  [ message =  std:: move ( message) ] ( MediaManager * mediaManager)  mutable  { mediaManager-> receiveMessage ( std:: move ( message) ) ; } ) ; }  else  if  ( const  auto  remoteMediaState =  absl:: get_if < RemoteMediaStateMessage> ( data) )  { if  ( _remoteMediaStateUpdated)  { _remoteMediaStateUpdated ( remoteMediaState-> audio, remoteMediaState-> video) ; } _mediaManager-> perform ( RTC_FROM_HERE,  [ video =  remoteMediaState-> video] ( MediaManager * mediaManager)  { mediaManager-> remoteVideoStateUpdated ( video) ; } ) ; }  else  if  ( const  auto  remoteBatteryLevelIsLow =  absl:: get_if < RemoteBatteryLevelIsLowMessage> ( data) )  { if  ( _remoteBatteryLevelIsLowUpdated)  { _remoteBatteryLevelIsLowUpdated ( remoteBatteryLevelIsLow-> batteryLow) ; } }  else  if  ( const  auto  remoteNetworkStatus =  absl:: get_if < RemoteNetworkStatusMessage> ( data) )  { _remoteNetworkIsLowCost =  remoteNetworkStatus-> isLowCost; _remoteIsLowDataRequested =  remoteNetworkStatus-> isLowDataRequested; updateCurrentResolvedNetworkStatus ( ) ; }  else  { if  ( const  auto  videoParameters =  absl:: get_if < VideoParametersMessage> ( data) )  { float  value =  ( ( float ) videoParameters-> aspectRatio)  /  1000.0 ; if  ( _remotePrefferedAspectRatioUpdated)  { _remotePrefferedAspectRatioUpdated ( value) ; } } _mediaManager-> perform ( RTC_FROM_HERE,  [ = ,  message =  std:: move ( message) ] ( MediaManager * mediaManager)  mutable  { mediaManager-> receiveMessage ( std:: move ( message) ) ; } ) ; } 
} 
	if  ( const  auto  candidatesList =  absl:: get_if < CandidatesListMessage> ( data) )  { _networkManager-> perform ( RTC_FROM_HERE,  [ message =  std:: move ( message) ] ( NetworkManager * networkManager)  mutable  { networkManager-> receiveSignalingMessage ( std:: move ( message) ) ; } ) ; } 
	}  else  if  ( const  auto  videoFormats =  absl:: get_if < VideoFormatsMessage> ( data) )  { _mediaManager-> perform ( RTC_FROM_HERE,  [ message =  std:: move ( message) ] ( MediaManager * mediaManager)  mutable  { mediaManager-> receiveMessage ( std:: move ( message) ) ; } ) ; 
    }  else  if  ( const  auto  remoteMediaState =  absl:: get_if < RemoteMediaStateMessage> ( data) )  { if  ( _remoteMediaStateUpdated)  { _remoteMediaStateUpdated ( remoteMediaState-> audio, remoteMediaState-> video) ; } _mediaManager-> perform ( RTC_FROM_HERE,  [ video =  remoteMediaState-> video] ( MediaManager * mediaManager)  { mediaManager-> remoteVideoStateUpdated ( video) ; } ) ; } 
	}  else  if  ( const  auto  remoteBatteryLevelIsLow =  absl:: get_if < RemoteBatteryLevelIsLowMessage> ( data) )  { if  ( _remoteBatteryLevelIsLowUpdated)  { _remoteBatteryLevelIsLowUpdated ( remoteBatteryLevelIsLow-> batteryLow) ; } }  
    }  else  if  ( const  auto  remoteNetworkStatus =  absl:: get_if < RemoteNetworkStatusMessage> ( data) )  { _remoteNetworkIsLowCost =  remoteNetworkStatus-> isLowCost; _remoteIsLowDataRequested =  remoteNetworkStatus-> isLowDataRequested; updateCurrentResolvedNetworkStatus ( ) ; }