Ниже находится мой сервер Node.js webrtc, и мне интересно, как я могу получить самый низкий объем потоковой задержки между клиентами. При просмотре трансляции из разных сетей существует около 0,7 -секундной задержки. Вещи, которые я сделал до сих пор, в виртуальной камере OBS понижает мое разрешение как можно больше и снижает частоту кадров до 30. Я также добавил сервер поворота для надежности. < /P>
server.js
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
let broadcaster;
const port = 4000;
io.sockets.on("error", (e) => console.log(e));
io.sockets.on("connection", (socket) => {
console.log("A user connected:", socket.id, socket.handshake.address);
socket.on("broadcaster", () => {
broadcaster = socket.id;
socket.broadcast.emit("broadcaster");
console.log(socket.id, "is broadcasting");
});
socket.on("watcher", () => {
console.log(socket.id, "is watching");
socket.to(broadcaster).emit("watcher", socket.id);
});
socket.on("offer", (id, message) => {
socket.to(id).emit("offer", socket.id, message);
console.log(socket.id, "sent an offer to", id);
});
socket.on("answer", (id, message) => {
socket.to(id).emit("answer", socket.id, message);
console.log(socket.id, "sent an answer to", id);
});
socket.on("candidate", (id, message) => {
socket.to(id).emit("candidate", socket.id, message);
console.log(socket.id, "sent a candidate to", id);
});
socket.on("disconnect", () => {
console.log("A user disconnected:", socket.id);
socket.to(broadcaster).emit("disconnectPeer", socket.id);
});
});
server.listen(port, "0.0.0.0", () =>
console.log(`Server is running on http://0.0.0.0:${port}`)
);
< /code>
broadcast.html
Broadcaster
const peerConnections = {};
const config = {
iceServers: [
],
};
const socket = io.connect('http://:4000');
socket.on("answer", (id, description) => {
peerConnections[id].setRemoteDescription(description);
});
socket.on("watcher", id => {
const peerConnection = new RTCPeerConnection(config);
peerConnections[id] = peerConnection;
let stream = videoElement.srcObject;
stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
peerConnection.onicecandidate = event => {
if (event.candidate) {
socket.emit("candidate", id, event.candidate);
}
};
peerConnection
.createOffer()
.then(sdp => peerConnection.setLocalDescription(sdp))
.then(() => {
socket.emit("offer", id, peerConnection.localDescription);
});
});
socket.on("candidate", (id, candidate) => {
peerConnections[id].addIceCandidate(new RTCIceCandidate(candidate));
});
socket.on("disconnectPeer", id => {
peerConnections[id].close();
delete peerConnections[id];
});
window.onunload = window.onbeforeunload = () => {
socket.close();
};
// Get camera stream
const videoElement = document.querySelector("video");
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
videoElement.srcObject = stream;
socket.emit("broadcaster");
})
.catch(error => console.error("Error: ", error));
< /code>
watch.html
Broadcaster
const peerConnections = {};
const config = {
iceServers: [
,
],
};
const socket = io.connect('http://:4000');
socket.on("answer", (id, description) => {
peerConnections[id].setRemoteDescription(description);
});
socket.on("watcher", id => {
const peerConnection = new RTCPeerConnection(config);
peerConnections[id] = peerConnection;
let stream = videoElement.srcObject;
stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
peerConnection.onicecandidate = event => {
if (event.candidate) {
socket.emit("candidate", id, event.candidate);
}
};
peerConnection
.createOffer()
.then(sdp => peerConnection.setLocalDescription(sdp))
.then(() => {
socket.emit("offer", id, peerConnection.localDescription);
});
});
socket.on("candidate", (id, candidate) => {
peerConnections[id].addIceCandidate(new RTCIceCandidate(candidate));
});
socket.on("disconnectPeer", id => {
peerConnections[id].close();
delete peerConnections[id];
});
window.onunload = window.onbeforeunload = () => {
socket.close();
};
// Get camera stream
const videoElement = document.querySelector("video");
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
videoElement.srcObject = stream;
socket.emit("broadcaster");
})
.catch(error => console.error("Error: ", error));
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-possible
Нижняя задержка WEBRTC как можно больше [закрыто] ⇐ Html
Программисты Html
-
Anonymous
1739791270
Anonymous
Ниже находится мой сервер Node.js webrtc, и мне интересно, как я могу получить самый низкий объем потоковой задержки между клиентами. При просмотре трансляции из разных сетей существует около 0,7 -секундной задержки. Вещи, которые я сделал до сих пор, в виртуальной камере OBS понижает мое разрешение как можно больше и снижает частоту кадров до 30. Я также добавил сервер поворота для надежности. < /P>
server.js
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
let broadcaster;
const port = 4000;
io.sockets.on("error", (e) => console.log(e));
io.sockets.on("connection", (socket) => {
console.log("A user connected:", socket.id, socket.handshake.address);
socket.on("broadcaster", () => {
broadcaster = socket.id;
socket.broadcast.emit("broadcaster");
console.log(socket.id, "is broadcasting");
});
socket.on("watcher", () => {
console.log(socket.id, "is watching");
socket.to(broadcaster).emit("watcher", socket.id);
});
socket.on("offer", (id, message) => {
socket.to(id).emit("offer", socket.id, message);
console.log(socket.id, "sent an offer to", id);
});
socket.on("answer", (id, message) => {
socket.to(id).emit("answer", socket.id, message);
console.log(socket.id, "sent an answer to", id);
});
socket.on("candidate", (id, message) => {
socket.to(id).emit("candidate", socket.id, message);
console.log(socket.id, "sent a candidate to", id);
});
socket.on("disconnect", () => {
console.log("A user disconnected:", socket.id);
socket.to(broadcaster).emit("disconnectPeer", socket.id);
});
});
server.listen(port, "0.0.0.0", () =>
console.log(`Server is running on http://0.0.0.0:${port}`)
);
< /code>
broadcast.html
Broadcaster
const peerConnections = {};
const config = {
iceServers: [
],
};
const socket = io.connect('http://:4000');
socket.on("answer", (id, description) => {
peerConnections[id].setRemoteDescription(description);
});
socket.on("watcher", id => {
const peerConnection = new RTCPeerConnection(config);
peerConnections[id] = peerConnection;
let stream = videoElement.srcObject;
stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
peerConnection.onicecandidate = event => {
if (event.candidate) {
socket.emit("candidate", id, event.candidate);
}
};
peerConnection
.createOffer()
.then(sdp => peerConnection.setLocalDescription(sdp))
.then(() => {
socket.emit("offer", id, peerConnection.localDescription);
});
});
socket.on("candidate", (id, candidate) => {
peerConnections[id].addIceCandidate(new RTCIceCandidate(candidate));
});
socket.on("disconnectPeer", id => {
peerConnections[id].close();
delete peerConnections[id];
});
window.onunload = window.onbeforeunload = () => {
socket.close();
};
// Get camera stream
const videoElement = document.querySelector("video");
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
videoElement.srcObject = stream;
socket.emit("broadcaster");
})
.catch(error => console.error("Error: ", error));
< /code>
watch.html
Broadcaster
const peerConnections = {};
const config = {
iceServers: [
,
],
};
const socket = io.connect('http://:4000');
socket.on("answer", (id, description) => {
peerConnections[id].setRemoteDescription(description);
});
socket.on("watcher", id => {
const peerConnection = new RTCPeerConnection(config);
peerConnections[id] = peerConnection;
let stream = videoElement.srcObject;
stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
peerConnection.onicecandidate = event => {
if (event.candidate) {
socket.emit("candidate", id, event.candidate);
}
};
peerConnection
.createOffer()
.then(sdp => peerConnection.setLocalDescription(sdp))
.then(() => {
socket.emit("offer", id, peerConnection.localDescription);
});
});
socket.on("candidate", (id, candidate) => {
peerConnections[id].addIceCandidate(new RTCIceCandidate(candidate));
});
socket.on("disconnectPeer", id => {
peerConnections[id].close();
delete peerConnections[id];
});
window.onunload = window.onbeforeunload = () => {
socket.close();
};
// Get camera stream
const videoElement = document.querySelector("video");
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
videoElement.srcObject = stream;
socket.emit("broadcaster");
})
.catch(error => console.error("Error: ", error));
Подробнее здесь: [url]https://stackoverflow.com/questions/79442564/lower-webrtc-latency-as-much-as-possible[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия