博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
请教一个问题:关于 webrtc 通信的问题
阅读量:6267 次
发布时间:2019-06-22

本文共 1928 字,大约阅读时间需要 6 分钟。

 

在下是webrtc开发新手,目前遇到了个问题,翻来翻去一直没弄明白。可能英文不佳,看文档看蒙了,所以一直没找到解决方法。

 

开发环境:

node.js 搭建的服务器

目前是用socket.io做通信

 

开发目的:

A同学向B同学发起请求,B同学收到请求后,A能观看B的视频直播。

 

如果有清楚的同学麻烦告知我哈,真的麻烦大家了 O(∩_∩)O~~

 

问题描述:

目前在搭建两人视频的demo,但是在双方信号交换信息上出问题了。控制台打印出来是这样的:

 

通信代码如下:

1 var servers = null; 2 localPeerConnection = new RTCPeerConnection(servers); 3 localPeerConnection.onicecandidate = function (evt){ 4   socket.send(JSON.stringify({ "candidate": evt.candidate })); 5 } 6 localPeerConnection.addStream(localStream); 7 localPeerConnection.createOffer(gotDescription, handleError); 8 function gotDescription(evt) { 9     localPeerConnection.setLocalDescription(evt);10     socket.send(JSON.stringify({ "sdp": evt }));11 }12 socket.on('pushMessageDone', function (evt) {13   if (!localPeerConnection){14     console.log(1);15       call(false);16   }17   var signal = JSON.parse(evt);18   if (signal.sdp){19       localPeerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp), function() {20         if ( localPeerConnection.remoteDescription.type == "offer" ) {21            localPeerConnection.onaddstream = function (evt) {22               remoteVideo.src = URL.createObjectURL(evt.stream);23           };24         };25         localPeerConnection.createAnswer(gotDescription, handleError);26       });27   } else {28       localPeerConnection.addIceCandidate(new RTCIceCandidate(signal.candidate));29     }30 });31 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、潜心学习,戒骄戒躁真的很重要。

转载于:https://www.cnblogs.com/Travel/p/5461355.html

你可能感兴趣的文章
fmt标签如何计算两个日期之间相隔的天数
查看>>
Spark核心技术原理透视一(Spark运行原理)
查看>>
《Gradle权威指南》--Gradle任务
查看>>
IntelliJ IDEA创建文件时自动填入作者时间 定制格式
查看>>
Android app启动activity并调用onCreate()方法时都默默地干了什么?
查看>>
远程监视jboss应用java内存的配置
查看>>
前端如何接收 websocket 发送过来的实时数据
查看>>
JavaWeb下载文件response
查看>>
Laravel的三种安装方法总结
查看>>
SpringMVC加载配置Properties文件的几种方式
查看>>
C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginat...
查看>>
java 项目相关 学习笔记
查看>>
numpy opencv matlab eigen SVD结果对比
查看>>
WPF获取某控件的位置,也就是偏移量
查看>>
Boost C++ 库 中文教程(全)
查看>>
solr查询优化(实践了一下效果比较明显)
查看>>
jdk目录详解及其使用方法
查看>>
说说自己对RESTful API的理解s
查看>>
通过layout实现可拖拽自动排序的UICollectionView
查看>>
服务器错误码
查看>>