He buscado en Internet durante días sobre cómo implementar una función de transmisión de video desde un teléfono Android a otro teléfono Android a través de una conexión WiFi, pero parece que no puedo encontrar nada útil. Busqué en los desarrolladores de Android código de muestra, stackoverflow, google, blogs de Android, pero nada. Todo lo que puedo encontrar son algún tipo de soluciones de teléfono a escritorio o de escritorio a teléfono para la transmisión, pero nada que pueda tomar prestado en mi implementación.
Necesito controlar un robot usando un arduino ADK, así que estoy usando 2 teléfonos, uno que se montará en el robot y otro que recibirá la transmisión de video del robot. Menciono esto porque estoy tratando de lograr el menor retraso entre el tiempo de transmisión y el tiempo de visualización.
Estoy escribiendo 2 aplicaciones, una aplicación maestra para controlar el robot (desde el teléfono de mano) que controlará la aplicación esclava y recibirá la transmisión, y la segunda aplicación esclava que se ejecutará en el teléfono con correa de robot, controlando los motores / actuadores / streaming a la aplicación maestra. Desafortunadamente, no puedo usar aplicaciones de terceros. Necesito integrar el código de transmisión de video en mis 2 aplicaciones.
¿Qué opciones existen para lograrlo? También es muy difícil de hacer porque nunca trabajé con videostreaming, pero lo estoy haciendo bastante bien tanto en el desarrollo de Java como de Android. ¿Cómo debo codificar / decodificar el flujo, cómo inicio la conexión, tendré que trabajar con UDP en lugar de TCP / IP? Realmente no sé por dónde empezar, sin código de muestra en ninguna parte. Estoy bastante seguro de que esto se puede lograr. Simplemente no puedo encontrar nada útil para comenzar en la dirección correcta.
Me encontré con un spydroid pero está usando VLC en un escritorio, por lo que no es bueno para mí.
EDITAR: Echa un vistazo al blog de Cagney Moreau . Entra en detalles sobre la implementación de esto.
fuente
Respuestas:
Si no necesita la funcionalidad de grabación y reproducción en su aplicación, usar la aplicación y el reproductor de transmisión estándar es una opción razonable.
Sin embargo, si necesita que estén en su aplicación, tendrá que buscar en MediaRecorder API (para la aplicación de servidor / cámara) y MediaPlayer (para la aplicación de cliente / reproductor).
Código de muestra rápido para el servidor:
En el lado del jugador, es un poco complicado, puedes probar esto:
Desafortunadamente, a mediaplayer no suele gustarle esto, por lo que tiene un par de opciones: (a) guardar datos de socket en archivo y (después de tener un poco de datos) reproducir con mediaplayer desde archivo, o (b) hacer un pequeño http proxy que se ejecuta localmente y puede aceptar la solicitud GET de mediaplayer, responder con encabezados HTTP y luego copiar los datos del servidor remoto. Para (a) crearía el reproductor multimedia con una ruta de archivo o URL de archivo, para (b) darle una URL http que apunte a su proxy.
Ver también:
Transmita video en vivo de un teléfono a otro usando socket fd
MediaPlayer tartamudea al inicio de la reproducción de mp3
fuente
setDataSource(MediaDataSource)
lugar deFileDescriptor
. La implementaciónMediaDataSource
le permitiría realizar su propia lectura de red y almacenamiento en búfer, sin escribir en un archivo temporal.Trabajé en algo como esto una vez, pero enviar un video y reproducirlo en tiempo real es algo realmente complejo. Te sugiero que trabajes solo con PNG. En mi implementación, lo que hice fue capturar PNGs usando la cámara host y luego enviarlos a través de la red al cliente, que mostrará la imagen tan pronto como se reciba y solicitará la siguiente imagen al host. Dado que está conectado a wifi, la comunicación será lo suficientemente rápida como para obtener entre 8 y 10 imágenes por segundo (solo una aproximación, trabajé en Bluetooth). Entonces esto se verá como un video continuo pero con mucho menos esfuerzo. Para la comunicación, puede usar sockets UDP (más rápidos y menos complejos) o DLNA (no estoy seguro de cómo funciona).
fuente
Puede utilizar la cámara web IP o tal vez utilizar DLNA. Por ejemplo, los dispositivos Samsung vienen con una aplicación llamada AllShare que puede compartir y acceder a dispositivos habilitados para DLNA en la red. Sin embargo, creo que la cámara web IP es tu mejor opción. Debería poder abrir la transmisión que crea usando el reproductor de video MX o algo así.
fuente
Puede verificar el VLC de Android , puede transmitir y reproducir video, si desea indagate más, puede verificar su GIT para analizar lo que hacen. ¡Buena suerte!
fuente