• 请教一个问题:关于 webrtc 通信的问题


    在下是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、潜心学习,戒骄戒躁真的很重要。

    【全都是流水账,仅仅记录进步的点滴】
  • 相关阅读:
    PHP操作二进制字节数据
    Linux端口转发-rinted工具部署、配置、使用
    Netty学习(八)-Netty的心跳机制
    Navicat Premium 12破解方法
    App界面设计规范-字体规范
    PHP 扩展开发之Zephir
    rinetd 一个linux下的端口转发工具
    windows node版本管理工具nvm
    vue cli 常见问题汇总
    监听微信返回
  • 原文地址:https://www.cnblogs.com/Travel/p/5461355.html
Copyright © 2020-2023  润新知