Я пытаюсь реализовать функцию общего доступа в видеоконференции webrtc. Из предложения я теперь следую решению муаз-хана, используя https://www.webrtc-experiment.com/getScreenId/. Я могу легко захватить образы приложений одного однорангового узла и заменить поток видео на поток захвата. Но это эксперимент по видеоконференции, поэтому двум браузерам необходимо провести видеоконференцию друг с другом. Например, браузер 1 имеет видеопотоки A (локальное видео), видеопотоки B (удаленное видео); браузер 2 имеет видеопотоки B (локальное видео), видеопотоки A (удаленное видео). Поэтому, когда я в браузере 1 и пытаюсь предоставить общий доступ к экрану, поток экрана общего доступа должен заменить локальное видео в браузере 1, а удаленное видео в браузере. 2.Поделиться экраном, используя getScreenId.js в WebRTC для двух сверстников
Но сейчас я могу сделать только экран совместного использования локальное видео в браузере 1, браузер 2 не имеет каких-либо изменений, cann't видеть какие-либо изменения в своем удаленном видео (которое является местным видео в браузере 1). Я не знаю, как вызвать изменения в браузере 2. мне нужно сигнализировать об общих потоках экрана на сервере? и соответственно изменить удаленный поток?
Вот мой код в JavaScript:
$(function() {
var brokerController, ws, webRTC, localid;
// ws = new XSockets.WebSocket("wss://rtcplaygrouund.azurewebsites.net:443", ["connectionbroker"], {
ws = new XSockets.WebSocket("ws://localhost:4502", ["connectionbroker"], {
ctx: "152300ed-4d84-4e72-bc99-965052dc1e95"
});
var addRemoteVideo = function(peerId,mediaStream) {
var remoteVideo = document.createElement("video");
remoteVideo.setAttribute("autoplay", "true");
remoteVideo.setAttribute("rel",peerId);
attachMediaStream(remoteVideo, mediaStream);
remoteVideo.setAttribute("class", "col-md-3");
remoteVideo.setAttribute("height", $(document).height() * 0.3);
remoteVideo.setAttribute("id", 'remoteVideo');
$("#videoscreen").append(remoteVideo);
};
var onConnectionLost = function (remotePeer) {
console.log("onconnectionlost");
var peerId = remotePeer.PeerId;
var videoToRemove = $("video[rel='" + peerId + "']");
videoToRemove.remove();
};
var oncConnectionCreated = function() {
console.log("oncconnectioncreated", arguments);
}
var onGetUerMedia = function(stream) {
console.log("Successfully got some userMedia , hopefully a goat will appear..");
webRTC.connectToContext(); // connect to the current context?
};
var onRemoteStream = function (remotePeer) {
addRemoteVideo(remotePeer.PeerId, remotePeer.stream);
console.log("Opps, we got a remote stream. lets see if its a goat..");
};
var onLocalStream = function(mediaStream) {
console.log("Got a localStream", mediaStream.id);
localid = mediaStream.id;
console.log("check this id: meadiastram id ", mediaStream.id);
var video = document.createElement("video");
video.setAttribute("height", "100%");
video.setAttribute("autoplay", "true");
video.setAttribute("id", "localvideo");
video.setAttribute("name", mediaStream.id);
attachMediaStream(video, mediaStream);
$("#videoscreen").append(video);
$('#share').click(function() {
getScreenId(function (error, sourceId, screen_constraints) {
navigator.getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
navigator.getUserMedia(screen_constraints, function (stream) {
$('#localvideo').attr('src', URL.createObjectURL(stream));
}, function (error) {
console.error(error);
});
});
});
};
var onContextCreated = function(ctx) {
console.log("RTC object created, and a context is created - ", ctx);
webRTC.getUserMedia(webRTC.userMediaConstraints.hd(true), onGetUerMedia, onError);
};
var onOpen = function() {
console.log("Connected to the brokerController - 'connectionBroker'");
webRTC = new XSockets.WebRTC(this);
webRTC.onlocalstream = onLocalStream;
webRTC.oncontextcreated = onContextCreated;
webRTC.onconnectioncreated = oncConnectionCreated;
webRTC.onconnectionlost = onConnectionLost;
webRTC.onremotestream = onRemoteStream;
};
var onConnected = function() {
console.log("connection to the 'broker' server is established");
console.log("Try get the broker controller form server..");
brokerController = ws.controller("connectionbroker");
brokerController.onopen = onOpen;
};
ws.onconnected = onConnected;
});
Я использую xsocket в качестве сервера, а коды для мыши акции и изменить локальный поток с долей экрана потоки просто очень просто:
$('#share').click(function() {
getScreenId(function (error, sourceId, screen_constraints) {
navigator.getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
navigator.getUserMedia(screen_constraints, function (stream) {
$('#localvideo').attr('src', URL.createObjectURL(stream));
}, function (error) {
console.error(error);
});
});
Любая помощь или предложение были бы вам признательны.
Спасибо за то, что указал другой пост: How to addTrack in MediaStream in WebRTC, но я не думаю, что они одинаковы. А также я не уверен, как в этом случае пересмотреть дистанционную связь.
Xsocket.webrtc.js файл для подключения WebRTC: https://github.com/XSockets/XSockets.WebRTC/blob/master/src/js/XSockets.WebRTC.latest.js
Как я могу пересмотреть удаленное соединение в данном случае?
Возможный дубликат [Как addTrack в MediaStream в WebRTC] (http://stackoverflow.com/questions/35504214/how-to-addtrack-in-mediastream-in-webrtc) – jib
Если вы используя Firefox, вы также можете использовать [replaceTrack] (http://stackoverflow.com/a/32465439/918910). – jib
@jib, Спасибо, что указали на другое сообщение: Как добавитьTrack в MediaStream в WebRTC, похоже, что это может помочь, но не уверен, что они все те же, но использование переопределения может помочь обновить удаленный поток в браузере 2 .. Итак, вы имеете в виду приложению общего доступа в локальном потоке браузера 1, затем запускаете команду на сервер и уведомляете обозреватель обозревателя 2, чтобы обновить его удаленный поток (который = локальный поток в браузере 1). Но в этом случае в браузере 2 удаленный поток по-прежнему использует старую конфигурацию getusermedia. Поскольку я просто обновляю источник в локальном потоке, ничего больше. –