peerconnection例子渲染本地視頻
調試peerconnection例子,在WebRtcSession::CreateChannels函數中加上斷點,呼叫端和被呼叫端創建通道的流程並不一樣。呼叫端是從PeerConnection::SetLocalDescription往下執行創建的,而被呼叫端則是收到對端發來的消息後調用PeerConnection::SetRemoteDescription往下執行創建的。根據WebRtcSession::CreateChannels函數創建VoiceChannel和VideoChannel的流程,peerconnection客戶端程序首先調用到libjingle_peerconnection工程,以調用ChannelManager::CreateVoiceChannel為例,該函數以worker_thread_->Invoke形式調用ChannelManager::CreateVoiceChannel_w。
libjingle_peerconnection工程中的ChannelManager::CreateVoiceChannel_w函數,該函數首先執行libjingle_media工程中的 >CompositeMediaEngine<cricket::WebRtcVoiceEngine,cricket::WebRtcVideoEngine>::CreateChannel()函數,進而調用同工程的WebRtcVoiceEngine::CreateChannel()最終返回VoiceMediaChannel*,事實上是WebRtcVoiceMediaChannel指針對象,然後ChannelManager::CreateVoiceChannel_w函數調用libjingle_p2p工程中的cricket::VoiceChannel的構造方法,創建VoiceChannel*並最終返回給libjingle_peerconnection工程中的WebRtcSession類的成員變量talk_base::scoped_ptr<cricket::VoiceChannel> voice_channel_;而WebRtcSession則是作為同工程的PeerConnection類的成員變量talk_base::scoped_ptr<WebRtcSession> session_;。PeerConnection類則是peerconnection客戶端例子中Conductor類的成員變量talk_base::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;。
peerconnection例子本地采集端采集到視頻渲染流程:
peerconnection例子渲染本地視頻