原因:上个文章只是介绍了一下client和server端的简单协议交互,并没有涉及到webRTC的信令交互.即offer,answer,candidate等。
概述:webRTC的通信为点对点,则每个点都会创建自己的offer和candidate发送给对端,对端收到后创建自己的answer和candidate进行回复。然后webRTC内部进行candidate连通测试。下面利用代码进行简单描述。
接上文获取在线列表成员,然后点击成员进行连接调用代码如下,通过代码可以看出首先进行创建PeerConnection对象,然后创建本地的audio_track,video_track及准备需要的Mediastream.然后初始化成功后调用CreateOffer方法.
void Conductor::ConnectToPeer(int peer_id) {
LOG(INFO) << __FUNCTION__;
RTC_DCHECK(peer_id_ == -1);
RTC_DCHECK(peer_id != -1);
if (peer_connection_.get()) {
main_wnd_->MessageBox("Error",
"We only support connecting to one peer at a time", true);
return;
}
if (InitializePeerConnection()) {
peer_id_ = peer_id;
peer_connection_->CreateOffer(this, NULL);
} else {
main_wnd_->MessageBox("Error", "Failed to initialize PeerConnection", true);
}
}
当CreateOffer成功后则内部会进行事件回调,事件主要定义在CreateSessionDescriptionObserver中.通过定义可以看出主要实现回调为CreateOffer和CreateAnswer.
// CreateOffer and CreateAnswer callback interface.
class CreateSessionDescriptionObserver : public rtc::RefCountInterface {
public:
// This callback transfers the ownership of the |desc|.
// TODO(deadbeef): Make this take an std::unique_ptr<> to avoid confusion
// around ownership.
virtual void OnSuccess(SessionDescriptionInterface* desc) = 0;
virtual void OnFailure(const std::string& error) = 0