WebRTC和Node.JS:为什么远程视频无法显示



我正在研究没有信号服务器的WebRTC用例,URL如下:

https://github.com/lesmana/webrtc-without-signaling-server

此示例代码仅用于与文本聊天。

我修改了这些示例代码,以便它也能成功地支持视频。

发送结束代码URL:

https://cstsang.gossipcafe.hk:442/webrtc/webcam/caller.html

接收端代码URL:

https://cstsang.gossipcafe.hk:442/webrtc/webcam/callee.html

测试程序:

  1. 浏览"发送端URL",因为所有消息都会写入控制台,所以请打开控制台视图
  2. 点击"创建优惠"按钮,等待几秒钟。如果"offer"创建成功,文本区域将填充"offer"json字符串,复制文本区域中的所有内容
  3. 然后在新选项卡中打开"接收端URL",因为所有消息都会写入控制台,所以请打开控制台视图
  4. 将"报价"粘贴到提供的文本区域然后单击"报价粘贴"按钮
  5. "答案"将填充第二个文本区域,然后复制"答案">
  6. 返回"发送端URL"选项卡,单击"报价发送"按钮
  7. 将显示一个新的文本区域,将"答案"粘贴到此文本区域
  8. 然后单击"粘贴的答案"按钮

上述URL即使在android设备上也能正常工作。

为了删除上述过程,我正在创建一个基于URL编码的node.js应用程序。

问题是我不知道为什么远程视频没有显示。同样,所有消息都被写入控制台,不幸的是,我在控制台中找不到任何错误消息。测试URL如下:

https://webchat.gossipcafe.hk/

测试程序:

  1. 使用带有网络摄像头的计算机(称为计算机a(浏览上述URL。请打开控制台视图
  2. 在另一台计算机(称为计算机B(上浏览上述URL,也请打开控制台视图
  3. 在计算机A上,单击呼叫按钮,几秒钟后,计算机B的远程视图上将显示一个视频

但是,它不会发生。

我在两个浏览器控制台上都找不到任何错误消息。

这是服务器的源代码:

var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
var options = {
key: fs.readFileSync('private.key'),
ca: [fs.readFileSync('ca_bundle.crt')],
cert: fs.readFileSync('certificate.crt')
};
var serverPort = 443;
var server = https.createServer(options, app);
var io = require('socket.io')(server);
app.get('/', (req, res) => {        
res.sendFile(__dirname + '/index.html');
});
app.get('/common.js', (req, res) => {       
res.sendFile(__dirname + '/common.js');
});
app.get('/style.css', (req, res) => {       
res.sendFile(__dirname + '/style.css');
});
app.get('/WebRTC.js', (req, res) => {       
res.sendFile(__dirname + '/WebRTC.js');
});
io.on('connection', function(socket) {
console.log('new connection');
socket.emit('message', 'This is a message from the dark side.');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on("send_answer", (answer) =>{
console.log("receive an answer:"+answer);
socket.broadcast.emit("receive_answer",answer);
});
socket.on("send_offer", (offer) =>{
console.log("receive an offer:"+offer);
socket.broadcast.emit("receive_offer",offer);
});  
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
server.listen(serverPort, function() {
console.log('server up and running at %s port', serverPort);
});

附言:两台服务器将于凌晨1点至7点(香港时间,即UTC+8(离线

最后,我按照下面的网站说明构建我的web应用程序,它可以工作。

https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling

特别是下面的图表显示了握手序列,它非常有用。

https://mdn.mozillademos.org/files/12363/WebRTC%20-%20信号%20Diagram.svghttps://mdn.mozillademos.org/files/12365/WebRTC%20-%20ICE%20候选%20Exchange.svg

并在RTCPeerConnection.ondatachannel事件处理程序中绑定数据通道事件处理程序。

RTCDataChannel发送方法未发送数据

最新更新