zoukankan      html  css  js  c++  java
  • WebRTC之PeerConnection的建立过程

    基于第三方webrtc开源平台开发视频会议难度不是很大,主要是业务方面的问题。但是,一旦涉及核心的底层问题就需要阅读源代码,找出bug了,难度不小。

    项目需要,分析了一下peerconnection的创建过程。

    假设clientAclientB分为为offeranswer.

    1. Offer

    pc =new RTCPeerConnection(null);

    pc.onicecandidate=handleIceCandidate;

    pc.onaddstream=handleRemoteStreamAdded;

    pc.onremovestream=handleRemoteStreamRemoved;

    pc.addStream(localStream);

    pc.createOffer(setLocalAndSend,handleCreateOfferError);


    function handleIceCandidate(event){

    //将本地产生的candidate发送给对方

    sendMessage({

    type:”candidate”;

    candidate:event.candidate.candidate;

    ……;

    });

    }


    function setLocalAndSend(sdp){

    pc.setLocalDescription(sdp);//设置本地sdp,完成设置后onicecandidate事件会调用。

    sendMessage(sdp);//offer发送给对方

    }


    offer提供端接收到来自对方的answer: pc.setRemoteDescription(new RTCSessionDescription(message));


    offer端接收到来自对方的candidate时,pc.addIceCandidate(candidate);//将来自对方的candidate设置给本地


    2Answer端的代码与offer端类似,红色部分代码不同

    pc =new RTCPeerConnection(null);

    pc.onicecandidate=handleIceCandidate;

    pc.onaddstream=handleRemoteStreamAdded;

    pc.onremovestream=handleRemoteStreamRemoved;

    pc.addStream(localStream);


    注意区别:offer端是主动调用createOffer函数并将offer发送给对方。Answer端接受到offer后,才会创建peerConnection等一系列操作:

    pc.setRemoteDescription(sdp);//设置接收到的远端offer


    pc.createAnswer(setLocalAndSend,null,sdpConstraints);//创建answer并发送给对方。


    setLocalAndSend中会设置本地sdp,完成设置后onicecandidate事件会调用。然后将candidate发送给对方,对方收到candidate后调用addIceCandidate函数完成peerconnection的创建。

    对于onaddstream事件的调用时机,对于offer端,在接收到offer之后就可能onaddstream事件就被触发了。

  • 相关阅读:
    golang pprof 使用
    iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多...
    二分查找
    golang 切片copy复制和等号复制的区别
    维生素
    LinkedBlockingQueue
    ArrayBlockingQueue
    wordpress文章点击次数统计插件WP Postviews 使用方法
    windows7下cmd窗口使用ssh登录服务器(云、本地)
    WinISO Standard V6.4.1.6137 免费无限制版
  • 原文地址:https://www.cnblogs.com/cther/p/myPeerConnection.html
Copyright © 2011-2022 走看看