2012-05-23 24 views
8

Lo que quiero es broadcast un video de la cámara de Android en ubicaciones remotas, para que cualquiera pueda ver ese video en su móvil o sitio web. He tenido éxito al unicast al reproductor vlc en mi pc. Probé el servidor red5, Adobe media server, ffmpeg servidor pero todo en vail. Cada uno de ellos solo pudo obtener broadcast video de un archivo pregrabado pero no de ninguna transmisión en vivo. ¿Puede alguien sugerirme lo que hago?Broadcasting Android Camera Video

Respuesta

7

He leído (creo que incluso en stackoverflow) que puede proporcionar el MediaRecorder con un FileHandle de una conexión TCP. Luego puede escuchar esa conexión, leer los datos, empaquetarlos y volver a enviarlos como RTSP/RTP-Stream.

Si encuentro la publicación original, la haré referencia aquí.

EDIT:

El Post original era: Streaming Video From Android

Y la parte sobre el descriptor de fichero es de: http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

Por si acaso, cito el ejemplo de acuerdo desde el blog:

String hostname = "your.host.name"; 
int port = 1234; 
Socket socket = new Socket(InetAddress.getByName(hostname), port); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
MediaRecorder recorder = new MediaRecorder(); // Additional MediaRecorder setup (output format ... etc.) omitted 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.prepare(); 
recorder.start(); 

Sin embargo, esto solo envía el Video Fi le Data por el cable. Puedes guardarlo y luego reproducirlo. Pero como se mencionó, todavía no es una transmisión.

ACTUALIZACIÓN: Ni siquiera tiene que usar un Socket TCP para el primer paso. Acabo de tropezar con "LocalSocket" (1), que también le proporciona un FileHandle para alimentar el MediaRecorder. Esos sockets locales son "sockets de secuencia de dominio AF_LOCAL/UNIX". Ver http://developer.android.com/reference/android/net/LocalSocket.html

No he intentado todo lo anterior a mí mismo a partir de hoy, pero lo haré muy pronto. Así que tal vez pueda ser de más ayuda en el futuro cercano :)

(1) ¡LocalSocket no se puede usar en las versiones más nuevas de Android por razones de seguridad! Vea la actualización del 2015-11-25.

ACTUALIZACIÓN 2: Acabo de ver en las fuentes de Android el "OUTPUT_FORMAT_RTP_AVP". Pero se oculta :(Así que supongo que estará disponible en futuras versiones de la API de Android https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java Línea 219:.

public static final int OUTPUT_FORMAT_RTP_AVP = 7; 

No he probado simplemente engañar a la piel, proporcionando una hardcoded 7 ... Si nadie lo hace, por favor dejar un comentario aquí

ACTUALIZACIÓN 2015-11-25

me acabo de encontrar con libstreaming: https://github.com/fyhertz/libstreaming lo hice No lo analice demasiado, pero parece que hay mucho que aprender acerca de la transmisión desde Android de este proyecto (si no solo de usarlo).Leí allí que la solución LocalSocket no es válida para las versiones más nuevas de Android :(Pero presentan una alternativa: ParcelFileDescriptor.

+0

Pude enviar flujo de datos sin procesar al servidor de esta manera, pero nunca pude sacarle sentido a Puede darle el control del socket del cliente y enviarlo todo al servidor –

+0

Supongo que estará empaquetado en algunos archivos, por lo que tendrá que desempaquetarlo primero para obtener los datos brutos y luego volver a empaquetarlos en paquetes RTP. H264 es diferente de MPEG_4_SP en Fileformat. – Fildor

+0

Sería muy interesante para mí tomar un archivo de audio almacenado lokal en mi Android y enviarlo a través de RTP a mi PC (mismo wlan) donde puedo escucharlo. Cualquier idea de cómo puedo haz esto? – B770