简单的WebRTC示例!但是为什么它不起作用以及我做错了什么呢?

汤姆

我在互联网上找到此链接,该链接演示了WebRTC的工作方式https://shanetully.com/2014/09/a-dead-simple-webrtc-example/

它的源代码在这里https://github.com/shanet/WebRTC-Example

现在,我尝试遵循该示例,并在此处进行以下操作:

1-我创建了一个文件夹名称 voicechat

2-我在里面创建了2个文件夹voicechat那是voicechat\clientvoicechat\server

3-我将index.htmlwebrtc.js放入voicechat\client

4-我把server.jsvoicechat\server

5-我将该文件夹voicechat放入Tomcatwebapps文件夹中。所以路径会像这样C:\apache-tomcat-7.0.53\webapps\ROOT\voicechat

6-我启动了Tomcat。

7-我在PC上打开了http://xxx.xxx.xxx.xxx/voicechat/client/index.html,并且该网页显示了PC的摄像头(摄像头1)。没问题。

8-我在另一台PC上打开了http://xxx.xxx.xxx.xxx/voicechat/client/index.html,该网页还显示了另一台PC的网络摄像头(网络摄像头2)。但是我看不到PC的网络摄像头1。当我在PC上讲话时,坐在其他PC上的人听不到我在说什么,反之亦然。

那么,为什么它不起作用?我做错了什么?

这是3个文件的代码:

index.html

    <html>
    <head>
        <script src="webrtc.js"></script>
    </head>

    <body>
        <video id="localVideo" autoplay muted style="width:40%;"></video>
        <video id="remoteVideo" autoplay style="width:40%;"></video>

        <br />

        <input type="button" id="start" onclick="start(true)" value="Start Video"></input>

        <script type="text/javascript">
            pageReady();
        </script>
    </body>
</html>

webrtc.js

    var localVideo;
var remoteVideo;
var peerConnection;
var peerConnectionConfig = {'iceServers': [{'url': 'stun:stun.services.mozilla.com'}, {'url': 'stun:stun.l.google.com:19302'}]};

navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
window.RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate || window.webkitRTCIceCandidate;
window.RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription || window.webkitRTCSessionDescription;

function pageReady() {
    localVideo = document.getElementById('localVideo');
    remoteVideo = document.getElementById('remoteVideo');

    serverConnection = new WebSocket('ws://127.0.0.1:3434');
    serverConnection.onmessage = gotMessageFromServer;

    var constraints = {
        video: true,
        audio: true,
    };

    if(navigator.getUserMedia) {
        navigator.getUserMedia(constraints, getUserMediaSuccess, errorHandler);
    } else {
        alert('Your browser does not support getUserMedia API');
    }
}

function getUserMediaSuccess(stream) {
    localStream = stream;
    localVideo.src = window.URL.createObjectURL(stream);
}

function start(isCaller) {
    peerConnection = new RTCPeerConnection(peerConnectionConfig);
    peerConnection.onicecandidate = gotIceCandidate;
    peerConnection.onaddstream = gotRemoteStream;
    peerConnection.addStream(localStream);

    if(isCaller) {
        peerConnection.createOffer(gotDescription, errorHandler);
    }
}

function gotMessageFromServer(message) {
    if(!peerConnection) start(false);

    var signal = JSON.parse(message.data);
    if(signal.sdp) {
        peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp), function() {
            peerConnection.createAnswer(gotDescription, errorHandler);
        }, errorHandler);
    } else if(signal.ice) {
        peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice));
    }
}

function gotIceCandidate(event) {
    if(event.candidate != null) {
        serverConnection.send(JSON.stringify({'ice': event.candidate}));
    }
}

function gotDescription(description) {
    console.log('got description');
    peerConnection.setLocalDescription(description, function () {
        serverConnection.send(JSON.stringify({'sdp': description}));
    }, function() {console.log('set description error')});
}

function gotRemoteStream(event) {
    console.log('got remote stream');
    remoteVideo.src = window.URL.createObjectURL(event.stream);
}

function errorHandler(error) {
    console.log(error);
}

server.js

 var WebSocketServer = require('ws').Server;

var wss = new WebSocketServer({port: 3434});

wss.broadcast = function(data) {
    for(var i in this.clients) {
        this.clients[i].send(data);
    }
};

wss.on('connection', function(ws) {
    ws.on('message', function(message) {
        console.log('received: %s', message);
        wss.broadcast(message);
    });
});
xdumaine

server.js旨在作为Websocket信令的节点服务器运行。使用运行它node server.js您根本不需要Tomcat。

从项目自述文件中:

信令服务器使用Node.js和ws,可以这样启动:

$ npm install ws
$ node server/server.js

在客户端运行的情况下,在Firefox或Chrome的最新版本中打开client / index.html。

您可以仅使用文件URL打开index.html。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZeroMQ Pub / Sub最简单的示例不起作用-我做错了什么?

来自分类Dev

策略模式不起作用:我做错了什么?

来自分类Dev

此查询不起作用。我究竟做错了什么?

来自分类Dev

绑定不起作用,我做错了什么?

来自分类Dev

我正在尝试做一个简单的jersey restful webservice hello world,但是它不起作用。谁能检查我在哪里做错了?

来自分类Dev

我用 Javascript 函数和验证写了这个 HTML 代码..但是验证不起作用,我做错了什么

来自分类Dev

RSpec中的简单instance_variable_set不起作用,但是为什么不呢?

来自分类Dev

这个简单的左联接操作不起作用,但是为什么呢?

来自分类Dev

git评论不起作用?但是当我进行推送时,我就能看到自己的更改。我究竟做错了什么?

来自分类Dev

我试图使用angularjs将数据从servlet提取到jsp中。但是,ng-click似乎不起作用。我究竟做错了什么?

来自分类Dev

为什么直接绑定我们的&foo不起作用,但是通过动态查找间接起作用呢?

来自分类Dev

当curl有效时,python请求模块不起作用。我究竟做错了什么?

来自分类Dev

jQuery的删除父在整个行不起作用!我究竟做错了什么?

来自分类Dev

使用 <link> 标记引用外部 CSS 文件不起作用,我做错了什么?

来自分类Dev

flask-CORS 扩展不起作用。我究竟做错了什么?

来自分类Dev

为什么这个简单JAX RS示例不起作用?

来自分类Dev

为什么这个简单的JAX RS示例不起作用?

来自分类Dev

为什么最简单的补丁创建示例不起作用?

来自分类Dev

为什么我设置了〜/ .bashrc但它不起作用?

来自分类Dev

p:blockUI / pe:blockUI:为什么在我的简单示例中不起作用?

来自分类Dev

我正在尝试构建一个模块,但是不介意为什么它不起作用?

来自分类Dev

我在网格中使用数字文本框。但是数据没有绑定。为什么它不起作用?

来自分类Dev

为什么我的$ emit和$ broadcast示例不起作用?

来自分类Dev

为什么我的WeakReference示例不起作用?

来自分类Dev

为什么SetBasePath在.NET Core 3.1中不起作用?我尝试添加nuget程序包,但是它不起作用

来自分类Dev

文件上传和文件下载控件不起作用。我已经附上了下面的代码。我做错了什么?

来自分类Dev

¿我做错了什么?

来自分类Dev

尝试使用Python / Kivy在线制作apk文件,但是它不起作用。为什么?

来自分类Dev

为什么我的简单echo命令不起作用?

Related 相关文章

  1. 1

    ZeroMQ Pub / Sub最简单的示例不起作用-我做错了什么?

  2. 2

    策略模式不起作用:我做错了什么?

  3. 3

    此查询不起作用。我究竟做错了什么?

  4. 4

    绑定不起作用,我做错了什么?

  5. 5

    我正在尝试做一个简单的jersey restful webservice hello world,但是它不起作用。谁能检查我在哪里做错了?

  6. 6

    我用 Javascript 函数和验证写了这个 HTML 代码..但是验证不起作用,我做错了什么

  7. 7

    RSpec中的简单instance_variable_set不起作用,但是为什么不呢?

  8. 8

    这个简单的左联接操作不起作用,但是为什么呢?

  9. 9

    git评论不起作用?但是当我进行推送时,我就能看到自己的更改。我究竟做错了什么?

  10. 10

    我试图使用angularjs将数据从servlet提取到jsp中。但是,ng-click似乎不起作用。我究竟做错了什么?

  11. 11

    为什么直接绑定我们的&foo不起作用,但是通过动态查找间接起作用呢?

  12. 12

    当curl有效时,python请求模块不起作用。我究竟做错了什么?

  13. 13

    jQuery的删除父在整个行不起作用!我究竟做错了什么?

  14. 14

    使用 <link> 标记引用外部 CSS 文件不起作用,我做错了什么?

  15. 15

    flask-CORS 扩展不起作用。我究竟做错了什么?

  16. 16

    为什么这个简单JAX RS示例不起作用?

  17. 17

    为什么这个简单的JAX RS示例不起作用?

  18. 18

    为什么最简单的补丁创建示例不起作用?

  19. 19

    为什么我设置了〜/ .bashrc但它不起作用?

  20. 20

    p:blockUI / pe:blockUI:为什么在我的简单示例中不起作用?

  21. 21

    我正在尝试构建一个模块,但是不介意为什么它不起作用?

  22. 22

    我在网格中使用数字文本框。但是数据没有绑定。为什么它不起作用?

  23. 23

    为什么我的$ emit和$ broadcast示例不起作用?

  24. 24

    为什么我的WeakReference示例不起作用?

  25. 25

    为什么SetBasePath在.NET Core 3.1中不起作用?我尝试添加nuget程序包,但是它不起作用

  26. 26

    文件上传和文件下载控件不起作用。我已经附上了下面的代码。我做错了什么?

  27. 27

    ¿我做错了什么?

  28. 28

    尝试使用Python / Kivy在线制作apk文件,但是它不起作用。为什么?

  29. 29

    为什么我的简单echo命令不起作用?

热门标签

归档