请教一个问题:关于 webrtc 通信的问题
2016-05-05 12:09
369 查看
在下是webrtc开发新手,目前遇到了个问题,翻来翻去一直没弄明白。可能英文不佳,看文档看蒙了,所以一直没找到解决方法。
开发环境:
node.js 搭建的服务器
目前是用socket.io做通信
开发目的:
A同学向B同学发起请求,B同学收到请求后,A能观看B的视频直播。
如果有清楚的同学麻烦告知我哈,真的麻烦大家了 O(∩_∩)O~~
问题描述:
目前在搭建两人视频的demo,但是在双方信号交换信息上出问题了。控制台打印出来是这样的:
View Code
问题已解决,造成这个原因是因为:
1、A作为发起offer者,通过onicecandidate这个接口收集到ice候选信息之后,向服务器发送收集到的ice信息。
2、服务器在接收到A发送过来的信息后,分别用broadcast.emit,和emit把ice发送回给所有客户端,这就包括了发送者自己A。
3、所有的客户端包括A在内在接收到服务器发回来的ice后,为自己添加了A的ice候选信息。
4、但是A在接收到自己的候选信息的时候又会调用onicecandidate这个接口监听ice候选信息,然后在这个函数内又把ice发送给服务器。
由此由重新执行1、2、3、4部操作,直到ice为null为止。
总得来说:
1、能出现这样的错误主要是对通信流程的不熟悉,以及对底层架构的不了解。随便看了点文档觉得很简单就撸起袖子瞎忙活,结果遇到bug的时候根本就不知道从何处入手,并且花的时间更多。
2、但收获的好处倒是锻炼了看英文文档以及调试代码的耐心。
3、潜心学习,戒骄戒躁真的很重要。
开发环境:
node.js 搭建的服务器
目前是用socket.io做通信
开发目的:
A同学向B同学发起请求,B同学收到请求后,A能观看B的视频直播。
如果有清楚的同学麻烦告知我哈,真的麻烦大家了 O(∩_∩)O~~
问题描述:
目前在搭建两人视频的demo,但是在双方信号交换信息上出问题了。控制台打印出来是这样的:
var servers = null; localPeerConnection = new RTCPeerConnection(servers); localPeerConnection.onicecandidate = function (evt){ socket.send(JSON.stringify({ "candidate": evt.candidate })); } localPeerConnection.addStream(localStream); localPeerConnection.createOffer(gotDescription, handleError); function gotDescription(evt) { localPeerConnection.setLocalDescription(evt); socket.send(JSON.stringify({ "sdp": evt })); } socket.on('pushMessageDone', function (evt) { if (!localPeerConnection){ console.log(1); call(false); } var signal = JSON.parse(evt); if (signal.sdp){ localPeerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp), function() { if ( localPeerConnection.remoteDescription.type == "offer" ) { localPeerConnection.onaddstream = function (evt) { remoteVideo.src = URL.createObjectURL(evt.stream); }; }; localPeerConnection.createAnswer(gotDescription, handleError); }); } else { localPeerConnection.addIceCandidate(new RTCIceCandidate(signal.candidate)); } }); function handleError(){}
View Code
问题已解决,造成这个原因是因为:
1、A作为发起offer者,通过onicecandidate这个接口收集到ice候选信息之后,向服务器发送收集到的ice信息。
2、服务器在接收到A发送过来的信息后,分别用broadcast.emit,和emit把ice发送回给所有客户端,这就包括了发送者自己A。
3、所有的客户端包括A在内在接收到服务器发回来的ice后,为自己添加了A的ice候选信息。
4、但是A在接收到自己的候选信息的时候又会调用onicecandidate这个接口监听ice候选信息,然后在这个函数内又把ice发送给服务器。
由此由重新执行1、2、3、4部操作,直到ice为null为止。
总得来说:
1、能出现这样的错误主要是对通信流程的不熟悉,以及对底层架构的不了解。随便看了点文档觉得很简单就撸起袖子瞎忙活,结果遇到bug的时候根本就不知道从何处入手,并且花的时间更多。
2、但收获的好处倒是锻炼了看英文文档以及调试代码的耐心。
3、潜心学习,戒骄戒躁真的很重要。
相关文章推荐
- 《Linux内核设计与实现》第17章读书笔记
- Django session 详解-part II-session
- js代码的调试
- java 中== equal hashcode()什么的之间的关系
- android dialog activity
- POJ 1773 Parity game 带权并查集
- git仓库之间同步
- MYSQL必知必会读书笔记第六章之过滤数据
- Python MySQLdb在Linux下的快速安装
- MVC 导出excel
- PHP生成静态HTML页面简单方法
- StringAPI
- 【NoSql】redis安装&部署
- 冒泡
- 利用java制作一个小的目录查询器
- Flume Push数据到spark streaming或者接收Spark streaming的poll数据时实际运行程序总结
- 【深入理解JVM】:Java对象的创建、内存布局、访问定位
- php实现计算百度地图坐标之间距离的方法
- 跟开涛学SpringMVC(5):处理器拦截器详解
- Instant Client package is required for Baic and TNS connection