Usando un ejemplo muy simple de peerjs.com entre dos pares.
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
peer.on('call', function(call) {
getUserMedia({video: true, audio: true}, function(stream) {
call.answer(stream); // Answer the call with an A/V stream.
call.on('stream', function(remoteStream) {
// Show stream in some video/canvas element.
console.log('Received stream', remoteStream);
});
}, function(err) {
console.log('Failed to get local stream' ,err);
});
});
call.on ('stream') siempre recibe dos mismos streams remotos.
Aquí hay una captura de pantalla.
¿Es un problema conocido?
Gracias
alguien puede comentar sobre esto por favor?
Me encontré con este problema, parece que esto sucede cuando transferimos una transmisión a otro cliente (audio: verdadero, video: verdadero), tratamos de verificar esto, transfiero la transmisión tanto de video como de audio, y luego solo con audio, yo Resolví este problema posiblemente incorrectamente, pero funciona, verifico si ya recibí esta transmisión (cuando la recibo, guardo la transmisión, por ejemplo, en una matriz y escribo una clave única para ella, por ejemplo, la identificación del usuario que se puede obtener pasando {metadata: {user_id: 123}}
)
Sí, stream
llamadas de eventos en cada pista. Entonces, si tu transmisión contiene dos pistas, el evento stream
debería llamar dos veces.
Por favor, ¿podemos manejar este comportamiento? Puedo transmitir video pero no tengo sonido
Sigue siendo un problema
Sipjs lo maneja de esta manera https://sipjs.com/guides/attach-media/ al tener onTrackAdded
Por favor, ¿podemos manejar este comportamiento? Puedo transmitir video pero no tengo sonido
Pensé que estaba equivocado. Ambas transmisiones recibidas contienen audio y video. Olvidé eliminar el accesorio mudo de mi etiqueta HTML ...
Tengo tanto video como audio, es solo el comportamiento lo que me molesta.
El vie., 17 abr. 2020 a las 10:27, Baptiste Arnaud (<
[email protected]>) escribió:
Por favor, ¿podemos manejar este comportamiento? Puedo transmitir video pero no tengo
sonidoPensé que estaba equivocado. Ambas transmisiones recibidas contienen audio y video. yo
Olvidé quitar el accesorio mudo de mi etiqueta HTML ...-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/peers/peerjs/issues/609#issuecomment-615115594 , o
darse de baja
https://github.com/notifications/unsubscribe-auth/AA47FG5NRKADFOYTFWURTI3RNAHFRANCNFSM4J4HHKVA
.
¿Alguien tiene una solución de trabajo para estos? aún el evento de transmisión se llama dos veces.
Estas cosas todavía tienen un problema a día de hoy, ¿alguien tiene una idea con la que lidiar?
creo una matriz.
const callList = [];
Cuando recibo una llamada o llamo a otros usuarios, primero verifico esa lista en el evento onStream y, si esa llamada no está en mi lista, hago mis cosas (agregar a la página un elemento de video o cualquier otra cosa).
Ejemplo aquí (estoy llamando a otro usuario y otro usuario responde con una transmisión):
// make a call (userId is other users peer id)
const call = peer.call(userId, myVideoElement.srcObject, { metadata: { userId: peer.id } });
// create a video element
const video = createVideoElement(); // this is my custom function for create a html video element, it returns a video element.
// call on stream
call.on('stream', remoteStream => {
// check call list if call not in the list then add to list and page
if(!callList[call.peer]){
// add stream to video element
video.srcObject = remoteStream;
// show on page
showVideoElemenetOnPage(video); // this is my custom function for append video element to another element on the page
// add call objec to global object
callList[call.peer] = call;
}
});
Esto puede resolver el problema de dos ejecuciones.
creo una matriz.
const callList = [];
Cuando recibo una llamada o llamo a otros usuarios, primero verifico esa lista en el evento onStream y, si esa llamada no está en mi lista, hago mis cosas (agregar a la página un elemento de video o cualquier otra cosa).
Ejemplo aquí (estoy llamando a otro usuario y otro usuario responde con una transmisión):// make a call (userId is other users peer id) const call = peer.call(userId, myVideoElement.srcObject, { metadata: { userId: peer.id } }); // create a video element const video = createVideoElement(); // this is my custom function for create a html video element, it returns a video element. // call on stream call.on('stream', remoteStream => { // check call list if call not in the list then add to list and page if(!callList[call.peer]){ // add stream to video element video.srcObject = remoteStream; // show on page showVideoElemenetOnPage(video); // this is my custom function for append video element to another element on the page // add call objec to global object callList[call.peer] = call; } });
Esto puede resolver el problema de dos ejecuciones.
Esto soluciona mi problema, gracias
después de usar el método anterior, todavía aceptaba dos veces.
const callList = [];
peer.on ('llamar', llamar => {
call.answer (myMedia);
// inicializando acepta booleano para cada nuevo usuario
var accept = true;
call.on ('stream', data => {
console.log ("acceptcall");
// para aceptar la llamada solo una vez para otro usuario
if (aceptar) {
addvideoElement (falso, datos);
aceptar = falso;
}
});
});
socket.on ('usuario conectado', ID => {
var call = peer.call(ID,myMedia);
call.on('stream', data => {
if(!callList.includes(ID)){
console.log("user-connected");
addvideoElement(false,data);
callList.push(ID);
}
});
});
Si tiene un problema de transmisión doble, intente crear un elemento de video antes de la línea call.on('stream', data => {
. @ dipanshubhola1009
Ahora está funcionando como se esperaba
El mismo problema aquí :( Hice el trabajo para ignorar el segundo evento
Comentario más útil
creo una matriz.
Cuando recibo una llamada o llamo a otros usuarios, primero verifico esa lista en el evento onStream y, si esa llamada no está en mi lista, hago mis cosas (agregar a la página un elemento de video o cualquier otra cosa).
Ejemplo aquí (estoy llamando a otro usuario y otro usuario responde con una transmisión):
Esto puede resolver el problema de dos ejecuciones.