¿Cómo cerrar correctamente la conexión WEBRTC de Android? -- java campo con android campo con sockets campo con stream campo con webrtc camp Relacionados El problema

How to properly close Android WebRTC connection?


0
vote

problema

Español

Estoy usando la biblioteca WEBRTC en un servicio y una actividad. En "ONDESTROY" de ambos componentes, estoy tratando de desconectar completamente para que con el servicio / actividad se ejecute nuevamente, el dispositivo puede unirse a la sala con el mismo procedimiento.

En primer lugar, he probado este antiguo código de código aquí combinada con AHORA :

  public void onDestroy() {     for (Peer peer : peers.values()) {         peer.pc.dispose();     }     videoSource.dispose();     factory.dispose();     client.off();<---- You need to turn OFF and then disconnect  and then close it.     client.disconnect();     client.close(); }   

Pero la actividad / servicio se bloquea con este error (no hubo fugas en mi código):

  Channel is unrecoverably broken and will be disposed!   

Luego aprendí que la eliminación de conexiones y fábrica compensa este error. Así que solo los pongo en nulo. La devolución de llamada OnDestroy resultó ser así:

  if(videoTrackFromCamera != null) videoTrackFromCamera.dispose();     //if(rootEglBase != null) rootEglBase.release(); //Causes Crash:: # Fatal error in ../../webrtc/sdk/android/src/jni/peerconnection_jni.cc, line 1031     //    # last system error: 0     //    # Check failed: 0 == (reinterpret_cast<MediaStreamInterface*>(j_p))->Release() (0 vs. 2)     //    # Unexpected refcount.     if(audioSource != null) audioSource.dispose();     if(localAudioTrack != null) localAudioTrack.dispose();      if(localMediaStream != null) localMediaStream.dispose();     if(mRemoteMediaStream != null) mRemoteMediaStream.dispose();     audioConstraints = null;      if (factory != null) {         factory.stopAecDump();     }     if (peerConnection != null) {         //peerConnection.dispose();         //peerConnection.close();         peerConnection = null;     }     if (factory != null) {         //factory.dispose(); //causes error  Channel is unrecoverably broken and will be disposed         factory = null;     }     if (socket != null) {         sendMessage("finished");         socket.disconnect();         socket.close();     }   

Ahora todo está bien, excepto que solo a veces recibo un accidente con este error:

  Channel {0} was not shutdown properly!!! ~*~*~*         Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.     java.lang.RuntimeException: ManagedChannel allocation site   

¿Hay una mejor manera de terminar la conexión WEBRTC? Si quiero permanecer en la habitación, pero deja de enviar y recibir transmisiones, ¿cuál es la forma óptima?

Original en ingles

I am using WebRTC Library in a service and an activity. In "onDestroy" of both components, I am trying to fully disconnect so that with the service/activity running again, the device can join room with the same procedure.

Firstly, I have tried these old code snippet here Combined with here:

public void onDestroy() {     for (Peer peer : peers.values()) {         peer.pc.dispose();     }     videoSource.dispose();     factory.dispose();     client.off();<---- You need to turn OFF and then disconnect  and then close it.     client.disconnect();     client.close(); } 

But the activity/service crashes with this error (There was no leaking in my code):

Channel is unrecoverably broken and will be disposed! 

Then I learned that disposing connections and factory makes up for this error. So I just set them to null. The onDestroy callback turned out to be like this:

if(videoTrackFromCamera != null) videoTrackFromCamera.dispose();     //if(rootEglBase != null) rootEglBase.release(); //Causes Crash:: # Fatal error in ../../webrtc/sdk/android/src/jni/peerconnection_jni.cc, line 1031     //    # last system error: 0     //    # Check failed: 0 == (reinterpret_cast<MediaStreamInterface*>(j_p))->Release() (0 vs. 2)     //    # Unexpected refcount.     if(audioSource != null) audioSource.dispose();     if(localAudioTrack != null) localAudioTrack.dispose();      if(localMediaStream != null) localMediaStream.dispose();     if(mRemoteMediaStream != null) mRemoteMediaStream.dispose();     audioConstraints = null;      if (factory != null) {         factory.stopAecDump();     }     if (peerConnection != null) {         //peerConnection.dispose();         //peerConnection.close();         peerConnection = null;     }     if (factory != null) {         //factory.dispose(); //causes error  Channel is unrecoverably broken and will be disposed         factory = null;     }     if (socket != null) {         sendMessage("finished");         socket.disconnect();         socket.close();     } 

Now everything is fine except that only sometimes I get a crash with this error:

Channel {0} was not shutdown properly!!! ~*~*~*         Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.     java.lang.RuntimeException: ManagedChannel allocation site 

Is there a better way to end WebRTC connection? If I want to stay in the room but stop sending and or receiving streams, what is the optimal way?

              

Lista de respuestas


Relacionados problema

0  Error abierto de Abrir: Error de Scocket WebSocket  ( Websocket open error websocket error ) 
Estamos usando APPTCDEMO Android para audio / videollamada https://apl.tc Hasta la noche anterior está funcionando bien, pero ahora estamos enfrentando a un...

0  Los videos remotos Simple Webrtc no se agregan a veces  ( Simple webrtc remote videos are not added sometimes ) 
Estamos integrando SIMPLEWEBRTC para permitir que los usuarios tengan comunicación grupal. El servicio Xirsys se utiliza para servidores STUN / TURN. Seguimos...

0  PeerJS solo se ejecuta en localhost pero no funciona en el alojamiento remoto  ( Peerjs only run on localhost but not working on remote hosting ) 
He creo un sitio web de video de chat usando PeerJS y WEBRTC, se ejecuta en localhost, pero al implementar el alojamiento remoto no funciona. Ayúdame ! ...

6  Límite de resolución WEBRTC  ( Webrtc resolution limit ) 
Lo intenté este y este , pero la resolución máxima que puedo obtener es 640x480. Las imágenes tomadas por otras aplicaciones de Windows por la misma cámar...

-1  Estoy tratando de deshabilitar mi propio micrófono en Kurento tutorial de muchos a muchos, pero no hay éxito hasta ahora  ( I am trying to disable my own mic in kurento many to many tutorial but no succes ) 
He intentado este código participante.audioenabled = falso Pero no pasa nada. ¿Quieres deshabilitar solo el micrófono, no mi altavoz? ...

0  ¿Por qué los PeerJs Peerserver usan WebSockets?  ( Why does the peerjs peerserver use websockets ) 
El código de los Peerserver para Peerjs consiste principalmente en WebSockets . No veo ninguna referencia a WEBRTC. ¿Por qué están usando WEBRTC para las ...

1  Error de construcción WEBRTC con VS2015  ( Webrtc build error with vs2015 ) 
Después de "GN GEN OUT / DEFAULT - -IDA = VS2015" Intento depurar de WEBRTC con VS2015, falló y muestra la información a continuación: 1> ninja: Entering ...

0  Android Webrtc Guardar secuencia remota  ( Android webrtc save remote stream ) 
Hola, estoy tratando de guardar el flujo remoto recibido de WEBRTC, seguí algunas muestras de código de GIT, intenté varios enfoque para obtener un flujo remo...

2  ¿Cómo funcionan los datos de transmisión de video como MP4 en WEBRTC Android?  ( How do record video stream data as mp4 in webrtc android ) 
¡Por favor ayúdame! Utilicé este ejemplo en https://github.com/pchab/androidrtc para transmitir video y audio de Un dispositivo Android a otro dispositivo A...

2  Soporte WEBRTC para Safari 11 aún roto  ( Webrtc support for safari 11 still broken ) 
He estado esperando ansiosamente la liberación de Safari 11 en OS-X y IOS 11. Ahora que finalmente están aquí, puedo usar Safari para grabar datos de audio de...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos