我正在研究没有信号服务器的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
测试程序:
- 浏览"发送端URL",因为所有消息都会写入控制台,所以请打开控制台视图
- 点击"创建优惠"按钮,等待几秒钟。如果"offer"创建成功,文本区域将填充"offer"json字符串,复制文本区域中的所有内容
- 然后在新选项卡中打开"接收端URL",因为所有消息都会写入控制台,所以请打开控制台视图
- 将"报价"粘贴到提供的文本区域然后单击"报价粘贴"按钮
- "答案"将填充第二个文本区域,然后复制"答案">
- 返回"发送端URL"选项卡,单击"报价发送"按钮
- 将显示一个新的文本区域,将"答案"粘贴到此文本区域
- 然后单击"粘贴的答案"按钮
上述URL即使在android设备上也能正常工作。
为了删除上述过程,我正在创建一个基于URL编码的node.js应用程序。
问题是我不知道为什么远程视频没有显示。同样,所有消息都被写入控制台,不幸的是,我在控制台中找不到任何错误消息。测试URL如下:
https://webchat.gossipcafe.hk/
测试程序:
- 使用带有网络摄像头的计算机(称为计算机a(浏览上述URL。请打开控制台视图
- 在另一台计算机(称为计算机B(上浏览上述URL,也请打开控制台视图
- 在计算机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发送方法未发送数据