zoukankan      html  css  js  c++  java
  • webrtc第一篇

    1.介绍

    众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转。比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是一样。这样甲与乙之间的一次消息要通过两段信道,通信的效率同时受制于这两段信道的带宽。同时这样的信道并不适合数据流的传输,如何建立浏览器之间的点对点传输,一直困扰着开发者。WebRTC应运而生

    参考:https://segmentfault.com/a/1190000000436544

    一个浏览器打开url:http://localhost/1.html,我们称它A客户端,另一个浏览器打开同一个url,我们称她为B客户端。

    现在是需要A客户端往B客户端发消息。

    最简单的方法是A客户端将消息发送到服务器上,服务器对A的消息进行中转,发送到B处。服务器将消息发给客户端现在通常的方法是使用websocket技术。客户端和服务器建立websocket连接,服务器对客户端的消息就行转发。

    // 与信令服务器的WebSocket连接
            var socket = new WebSocket("ws://127.0.0.1:3000");

    这样的信道并不适合数据流的传输,比如音视频。webrtc主要解决A客户端将音视频发给B客户端。

    2.步骤

    1)获取本地音频和视频流,createOffer得到sdp信息。

    // 获取本地音频和视频流
            navigator.webkitGetUserMedia({
                "audio": true,
                "video": true
            }, function(stream){
                //绑定本地媒体流到video标签用于输出
                document.getElementById('localVideo').src = URL.createObjectURL(stream);
                //向PeerConnection中加入需要发送的流
                pc.addStream(stream);
                //如果是发起方则发送一个offer信令
                if(isCaller){
                    pc.createOffer(sendOfferFn, function (error) {
                        console.log('Failure callback: ' + error);
                    });
                }
            }, function(error){
                //处理媒体流创建失败错误
                console.log('getUserMedia error: ' + error);
            });

    2)A客户端createOffer得到sdp信息通过服务器中转发给B客户端。通常使用websocket。

    3) B客户端createAnswer建立与A客户端的连接。

    // 如果是一个offer,那么需要回复一个answer
                    if(json.event === "_offer") {
                        pc.createAnswer(sendAnswerFn, function (error) {
                            console.log('Failure callback: ' + error);
                        });
                    }

    对于iOS,android客户端也是类似,A客户端获取本地音频和视频流,得到sdp信息,通过xmpp,MQTT等技术发给B客户端。

    关于ice,stun服务器本文并未提及。

    资料:

    http://blog.gopersist.com/2014/10/21/webrtc-simple/

    https://segmentfault.com/a/1190000000436544

  • 相关阅读:
    证券交易买进卖出手续费公式
    iOS学习之 plist文件的读写
    蓝桥杯——基础练习之字母图形
    SNMP协议具体解释
    Android开发框架SmartAndroid2.0 强劲框架
    隐藏快捷方式扩展名(.lnk)
    Filter及FilterChain的使用具体解释
    uva 1393
    深入浅出Windows BATCH
    科大讯飞2014公布会看点二:智能语音装进车载车机!
  • 原文地址:https://www.cnblogs.com/javastart/p/5355135.html
Copyright © 2011-2022 走看看