WebRtc libjingle_PeerConnection层(二) CreateOffer
2015-09-14 13:09
585 查看
发起视频通话流程图如下
创建dsp描述符,CreateOffer在流程中位于 OnSignalingMessage(offer)
CreateOffer的第一个参数是webrtc:CreateSessionDescriptionObserver,故CConductor继承自webrtc:CreateSessionDescriptionObserver,重写OnSuccess和OnFailure,当调用CreateOffer成功后,OnSuccess会被函数会被触发,就可以获得sdp信息。
再将sdp传递到外部,有通讯现成发送至RemotPeer。
从调试来看webrtc似乎是用了类似Windows的消息机制,很多命令都是通过DispatchMessage来派发消息。
注意如果没有调用rtc::ThreadManager::Instance()->SetCurrentThread()函数和DispatchMessage,会导致CreateOffer调用后,无法回调OnSuccess。(掉坑了)
调试的时候。仅需在OnSuccess中打断点即可。
仅含工程代码,无webrtc项目源码
http://download.csdn.net/detail/q339659207/9104747
创建dsp描述符,CreateOffer在流程中位于 OnSignalingMessage(offer)
void CConductor::ConnectToPeer(int peer_id) { if (peer_connection_.get()) { LOG(LS_ERROR) << "We only support connecting to one peer at a time"; return; } if (InitializePeerConnection()) { peer_connection_->CreateOffer(this, NULL); } else { LOG(LS_ERROR) << "Failed to initialize PeerConnection"; } } void CConductor::OnSuccess(webrtc::SessionDescriptionInterface* desc) { peer_connection_->SetLocalDescription( DummySetSessionDescriptionObserver::Create(), desc); std::string sdp; desc->ToString(&sdp); // For loopback test. To save some connecting delay. if (loopback_) { // Replace message type from "offer" to "answer" webrtc::SessionDescriptionInterface* session_description( webrtc::CreateSessionDescription("answer", sdp)); peer_connection_->SetRemoteDescription( DummySetSessionDescriptionObserver::Create(), session_description); return; } Json::StyledWriter writer; Json::Value jmessage; jmessage[kSessionDescriptionTypeName] = desc->type(); jmessage[kSessionDescriptionSdpName] = sdp; SendMessage(writer.write(jmessage)); } void CConductor::OnFailure(const std::string& error) { LOG(LERROR) << error; }
CreateOffer的第一个参数是webrtc:CreateSessionDescriptionObserver,故CConductor继承自webrtc:CreateSessionDescriptionObserver,重写OnSuccess和OnFailure,当调用CreateOffer成功后,OnSuccess会被函数会被触发,就可以获得sdp信息。
再将sdp传递到外部,有通讯现成发送至RemotPeer。
int main(){ ... rtc::Win32Thread w32_thread; rtc::ThreadManager::Instance()->SetCurrentThread(&w32_thread); ... rtc::scoped_refptr<CConductor> conductor( new rtc::RefCountedObject<CConductor>(&client, &viceo_show)); ... while ((gm = ::GetMessage(&msg, NULL, 0, 0)) != 0 && gm != -1) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } ... }
从调试来看webrtc似乎是用了类似Windows的消息机制,很多命令都是通过DispatchMessage来派发消息。
注意如果没有调用rtc::ThreadManager::Instance()->SetCurrentThread()函数和DispatchMessage,会导致CreateOffer调用后,无法回调OnSuccess。(掉坑了)
调试的时候。仅需在OnSuccess中打断点即可。
仅含工程代码,无webrtc项目源码
http://download.csdn.net/detail/q339659207/9104747
相关文章推荐
- 百度地图Geocoding API 用法,返回json解析
- flask 如何传参数到 js中,避免& # 39等转义
- node.js在windows下的安装与配置(附sublime-text的配置)
- ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用
- 【笔记】HTML+CSS基础课程(慕课)-HTML部分
- 《剑指offer》数据流中的中位数
- JS高级程序设计-笔记
- angularjs ui-view替换掉父标签
- Jquery 数组操作
- jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
- nodejs 捕获未处理异常
- javascript正则表达式
- css属性
- js切换底图位置的动画
- JavaScript对下一个元旦倒计时,经常用于网店限时销售
- children和childNodes
- 前端积累-----网页性能优化
- HTML5新特性
- css3 动画效果 定义和绑定执行
- [转]ADT中通过DDMS导入文件出错ddms transfer error: Read-only file system,Failed to push selection: Read-only file system