WebRT C и Node.JS: почему удаленное видео не может быть отображено - PullRequest
0 голосов
/ 02 мая 2020

Я изучаю WebRT C без случая использования сервера сигналов, URL-адрес:

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

Этот пример кода предназначен для чата только с текстом.

Я изменяю эти примеры кодов, чтобы они также могли успешно поддерживать видео.

URL-адрес кода завершения отправки:

https://cstsang.gossipcafe.hk: 442 / webrtc / веб-камера / звонящий. html

URL-адрес конечного кода получения:

https://cstsang.gossipcafe.hk: 442 / webrtc / веб-камера / вызываемый абонент. html

Процедура тестирования:

  1. Просмотрите "URL-адрес окончания отправки", поскольку все сообщения будут записываться в консоль, поэтому, пожалуйста, откройте представление консоли.
  2. Нажмите кнопку «создать предложение» и подождите несколько секунд. Если «предложение» успешно создано, текстовое поле будет заполнено строкой «предложение» json. Скопируйте все содержимое текстового поля.
  3. , затем откройте «Конечный URL-адрес получения» на новой вкладке, оно потому что все сообщения будут записываться на консоль, поэтому, пожалуйста, откройте представление консоли.
  4. Вставьте «предложение» в предоставленную текстовую область и затем нажмите кнопку «предложение вставлено»
  5. «Ответ» заполнит вторую текстовую область, затем скопирует «ответ»
  6. Go обратно на вкладку «конечный URL-адрес отправки», нажмите кнопку «отправить предложение»
  7. Будет показана новая текстовая область, вставьте «ответ» в эту текстовую область
  8. и затем нажмите кнопку «Ответ вставлен»

Указанные выше URL работают правильно даже на android устройствах.

Чтобы удалить описанную выше процедуру, я создаю приложение node.js на основе URL-кодировки.

Проблема в том, что я не знаю, почему удаленное видео не отображается. Снова все сообщения записываются в консоль, к сожалению, я не могу найти никаких сообщений об ошибках в консоли. URL-адрес тестирования:

https://webchat.gossipcafe.hk/

Процедура тестирования:

  1. Просмотрите вышеуказанный URL-адрес на компьютере с веб-камера (известная как компьютер А). Откройте представление консоли.
  2. Просмотрите вышеуказанный URL-адрес на другом компьютере (также называемом компьютером B), откройте также представление консоли.
  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);
});

PS: оба сервера будут в автономном режиме с 1:00 до 7:00 (время HK, т.е. UTC + 8)

1 Ответ

0 голосов
/ 06 мая 2020

Наконец, я следую приведенным ниже инструкциям на веб-сайте для создания своего веб-приложения, оно работает.

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

Особенно на следующих диаграммах показана последовательность рукопожатия , это очень полезно.

https://mdn.mozillademos.org/files/12363/WebRTC%20-%20Signaling%20Diagram.svg https://mdn.mozillademos.org/files/12365/WebRTC%20-%20ICE%20Candidate%20Exchange.svg

И связать обработчик событий канала данных в обработчике событий RTCPeerConnection.ondatachannel .

Метод отправки RTCDataChannel не отправляет данные

...