2012-05-23 26 views
8

Quello che voglio è quello di broadcast un video della videocamera Android in posizioni remote, per chiunque di guardare quel video sul proprio cellulare o sito web. Ho avuto successo con lo unicast sul lettore vlc sul mio pc. Ho provato il server red5 server, Adobe media server, ffmpeg ma tutto in vail. Ognuno di loro era in grado di eseguire il video solo da broadcast da un file preregistrato ma non da uno streaming live. Qualcuno può suggerirmi cosa faccio.Broadcasting Android Camera Video

risposta

7

Ho letto (penso che fosse anche su StackOverflow) che è possibile fornire al MediaRecorder un FileHandle di una connessione TCP. Quindi puoi ascoltare quella connessione, leggere i dati, impacchettarli e rinviarli come RTSP/RTP-Stream.

Se trovo il post originale, farò riferimento qui.

EDIT:

L'originale messaggio era: Streaming Video From Android

E la parte che riguarda il descrittore di file è da: http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

Solo nel caso, cito l'esempio secondo dal 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(); 

Tuttavia, questo invia solo il Video Fi le Dati sul filo. Puoi salvarlo e poi riprodurlo. Ma come detto, non è ancora un flusso.

UPDATE: Non è nemmeno necessario utilizzare un socket TCP per il primo passaggio. Ho appena inciampato su "LocalSocket" (1), che ti dà anche un FileHandle per alimentare il MediaRecorder. Questi socket locali sono "AF_LOCAL/UNIX socket del flusso del dominio". Vedi http://developer.android.com/reference/android/net/LocalSocket.html

Non ho ancora provato tutto questo da oggi, ma lo farò presto. Quindi forse posso essere di maggiore aiuto nel prossimo futuro :)

(1) LocalSocket non è utilizzabile sulle versioni Android più recenti per motivi di sicurezza! Vedi aggiornamento dal 25/11/2015.

UPDATE 2: appena visto nelle Fonti Android il "OUTPUT_FORMAT_RTP_AVP". Ma è nascosto :(Quindi credo che sarà disponibile nelle versioni API future di Android https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java Linea 219:.

public static final int OUTPUT_FORMAT_RTP_AVP = 7; 

Non ho provato solo ingannando la pelle, fornendo un hardcoded 7 ... Se nessuno lo fa, si prega di lasciare un commento qui

UPDATE 2015-11-25

ho appena incontrato libstreaming:! https://github.com/fyhertz/libstreaming ho fatto non guardarlo troppo profondamente, ma sembra che ci sia molto da imparare sullo streaming da Android da questo progetto (se non solo usandolo).Ho letto che la soluzione LocalSocket non è valida per le versioni Android più recenti :(Ma presentano un'alternativa: ParcelFileDescriptor.

+0

Sono stato in grado di inviare stream raw al server in questo modo, ma non sono mai stato in grado di capire Si può dare l'handle del socket client e spingere tutto al server –

+0

Suppongo che sarà in alcuni pacchetti di pacchetti. Quindi dovrete prima depacketize per ottenere i dati grezzi e poi riconfezionarli in pacchetti RTP. H264 è diverso da MPEG_4_SP in Fileformat – Fildor

+0

Sarebbe molto interessante per me prendere un file audio memorizzato lokal sul mio android e inviarlo via RTP al mio PC (stessa wlan) dove posso ascoltarlo. fare questo? – B770