javascript - test - webrtc tutorial español
¿Cómo mantener abierto el panel de datos de WebRTC en la pestaña inactiva del navegador del teléfono? (3)
Estoy haciendo una aplicación web que utiliza WebRTC. Funciona bien en navegadores de escritorio. Sin embargo, en un pequeño navegador web para smartphone, hay eventos no deseados:
Cuando se cambian las pestañas en el navegador web móvil Chrome para Android y Firefox para Android, se cierra un canal de datos abierto webrtc que se crea con .createDataChannel
. El dataChannel.onclose
eventos dataChannel.onclose
se dataChannel.onclose
. ¿Cómo evitar que el canal de datos se cierre? Si eso no es posible, ¿es posible volver a abrir el canal de datos sin reiniciar toda la fase de señalización?
Esto también sucede cuando se busca un archivo con <input type="file">
Navegué por stackoverflow un poco y noté que hay otras cosas que se reducen / disminuyen en pestañas inactivas como requestTimeOut
y setInterval
.
¿Se requiere autorización para forzarla a permanecer abierta en el fondo?
Según la documentación de mozilla de webRTC.
Manejo de cambios de estado del canal.
Tanto nuestros compañeros locales como remotos utilizan un método único para manejar eventos que indican un cambio en el estado de la conexión del canal.
Cuando el interlocutor local experimenta un evento de apertura o cierre, se llama al método handleSendChannelStatusChange ():
function handleSendChannelStatusChange(event) {
if (sendChannel) {
var state = sendChannel.readyState;
if (state === "open") {
messageInputBox.disabled = false;
messageInputBox.focus();
sendButton.disabled = false;
disconnectButton.disabled = false;
connectButton.disabled = true;
} else {
messageInputBox.disabled = true;
sendButton.disabled = true;
connectButton.disabled = false;
disconnectButton.disabled = true;
}
}
}
Si el estado del canal ha cambiado a "abierto", eso indica que hemos terminado de establecer el enlace entre los dos pares. La interfaz de usuario se actualiza correspondientemente al habilitar el cuadro de entrada de texto para que se envíe el mensaje, enfocando el cuadro de entrada para que el usuario pueda comenzar a escribir inmediatamente, habilitando los botones "Enviar" y "Desconectar", ahora que se pueden usar. y deshabilitar el botón "Conectar", ya que no es necesario cuando la conexión está abierta.
Si el estado ha cambiado a "cerrado", se produce el conjunto opuesto de acciones: el cuadro de entrada y el botón "Enviar" están deshabilitados, el botón "Conectar" está habilitado para que el usuario pueda abrir una nueva conexión si así lo desea. , y el botón "Desconectar" está deshabilitado, ya que no es útil cuando no existe conexión.
así que intenta jugar con handleReceiveChannelStatusChange
Este ejemplo, un par remoto, por otro lado, ignora los eventos de cambio de estado, excepto para registrar el evento en la consola:
function handleReceiveChannelStatusChange(event) {
if (receiveChannel) {
console.log("Receive channel''s status has changed to " +
receiveChannel.readyState);
}
}
El método handleReceiveChannelStatusChange () recibe como parámetro de entrada el evento que ocurrió ; este será un RTCDataChannelEvent.
Una forma de forzar a un navegador a mantener una pestaña completamente activa incluso en segundo plano es usar la API de audio de Web. De hecho, cualquier aplicación (por ejemplo, reproductor de música) que reproduzca sonido debe mantenerse viva, lo que tiene sentido. Pero, esto no es un hack estándar y por lo tanto no es una prueba de futuro . Comparte tu conocimiento si encuentras otras formas.
no hay ningún evento en safari que te permita detectar si la pestaña se está pausando, sin embargo, puedes detectar si la pestaña se está volviendo a abrir un poco después poniendo una función que se repite regularmente, como este es un ejemplo simple:
var beforeTime = new Date.getTime();
var getTime = function() {
var timeNow = new Date.getTime
if (timeNow - beforeTime > 1000) {
console.log("Woken Up)";
}
beforeTime = nowTime;
setTimeout(getTime, 500);
}
puede usar window.onunload para guardar los datos del canal de datos en una cookie y si se vuelve a abrir después del tiempo especificado en esta función (10 segundos), puede volver a cargar los datos de la cookie.
Espero que te haya ayudado, mukund2003