Webrtc Windows 端初始化

1)peerconnection_client 的 main.cc文件:

 2)PC  factory 的代码在 examples/peerconnection/client/conductor.cc中的Conductor::InitializePeerConnection 函数中,这个函数会在Demo 中首页peer 列表元素被双击或收到其他的peer的呼叫信息后被调用。

3)windows 端创建PC.

 

4)创建Source 和Track

        创建PC的目的是为了收发音视频数据,收发的载体就是Track,而Track 的数据来自于Source。

       创建source和Track 的代码在examples/peerconnection/client/conductor.cc的Conductor::AddTracks中,创建完PC之后会被立即调用。

5)CapturerTrackSource 是windows 对webrtc 视频采集接口类做的封装,实现了source 的接口,所以可以用来创建Track。它里面会创建一个Capturer对象,视频数据的传递路径也是Capturer->source->track。

扫描二维码关注公众号,回复: 13272894 查看本文章

 6)创建Offer

        添加完Track 之后,我们明确了需要发送哪些数据,这时就可以开始SDP协商的过程了,首先是发起端创建Offer,并将其作为本地的SDP设置给PC对象,然后把Offer通过Signialing Server给应答端。 

        创建成功之后的回调是Conductor::OnSuccess函数,其中包含了把SDP设置给PC和把Offer发送给应答的逻辑:

7) 创建Answer

        应答端 拿到对方的Offer 后,先将其设置给PC对象,然后创建Answer并设置给PC对象,最后将Answer 通过Signaling Server 发送到发起端,发起端拿到Answer 之后,也需要将Answer设置给PC对象。

   

        同样的,发前端收到Answer后,也是调用SetRemoteDescription 设置给PC对象,代码和应答端设置offer 是一样的。

8)ICE Cadidate回调和设置

        通话双方交换并设置看SDP之后,下一步就是交互并设置ICE Candidate、建立P2P连接了。

examples/peerconnection/client/conductor.cc的Conductor::OnIceCandidate函数,它是PeerConnectionObserver的回到函数之一。

        其中的处理也是把ICE Candidate 发送给对端。对端收到ICE Candidate 后,会在Conductor::OnMessageFromPeer 函数钟添加给PC对象。

        windows 没有使用一个队列保存创建PC前收到的消息。

9)ICE状态回调

        交换了SDP之后,通话两端就开始建立P2P连接了,对于这个过程的状态变化,我们可以监听PC的ICE的连接状态回调。

        

        ICE状态的函数: 

核心API回顾:

概念:

        Capture:负责数据采集,只有视频才有这一层抽象,它有多种实现,包括相机采集(Android 还有Camera1/Camera2 两套)、录屏采集、视频文件采集等。

        Source: 数据源,数据来自于Capture。它把数据交给Track。

        Track:媒体数据交换的载体,发送端把本地的Track发送给远程的接收端。

        Sink:Track数据的消费者,只有视频才有这一层的封装,发送端视频的本地预览,接收端远程视频后的渲染都是Sink。

        Transceriver:负责收发媒体数据(以Track 为载体)

        以视频为例子,数据由发送端的Capture采集,交给Source,再交给本地的Track,然后兵分两路,一路又本地Sink进行预览,一路交给Transceriver发送给接收端。接收端Track把数据交给Sink渲染。

        Capture的创建和销毁完全由App层负责,只需要把它和source关联起来即可;创建Source需要调用PC Factory接口,创建Track 也是,并且需要提供Source参数,Sink 的创建和销毁也由App层负责,只需要把他们添加到Track里即可,创建Transceriver需要调用PC接口(我们调用AddTrack接口,内部会创建Transceriver)。

猜你喜欢

转载自blog.csdn.net/abc1231987/article/details/121037960