2012-07-17 8 views
13

Sto lavorando su live dispositivo per lo streaming di server in Android. Sono in grado di inviare dati in byte sul server ma quando riproduco quel file durante la registrazione sul server VLC dire che l'atomo MOOV non è stato trovato. Dopo un sacco di soluzioni ho trovato che l'atomo MOOV genera un file alla fine. Ma devo riprodurre quel file sul server mentre la registrazione significa dal vivo. Vado attraverso il codice sorgente di SPYDROID e SIPROIDI ma non funziona. Ho provato ad aggiungere move atom su serveride usando FFMPEG ma non ha avuto alcun successo. Qualcuno ha idea di come posso ottenere questo. Grazie in anticipo.Come aggiungere un atomo di MOOV in un file video mp4

risposta

2

Eseguire qt_faststart per spostare l'atomo moov all'inizio del flusso.

qt-faststart in.mp4 out.mp4 
+0

hi d33pika..thnx per ur rply, Voglio inviare i dati video su un server durante la registrazione, ma un atomo moov genera dopo la registrazione finito così ecco perché penso che qt-faststart non sarà utile qui. – Ravinder

+0

Hai risolto il tuo problema @Ravinder? Sto cercando di fare esattamente lo stesso adesso e non vedo una soluzione praticabile. Se ne conosci uno, per favore pubblica un commento qui. –

+0

Come si usa qt-faststart in Android? Qualcuno può pubblicare un codice di esempio? –

6

Hai un problema. La scatola 'moov' è una sorta di sommario. Se non tutti i contenuti sono presenti, non è possibile avere un sommario completo. Ahia!

Se si desidera attaccare con MP4 e se si sta scrivendo il file da soli, è possibile scrivere il file come file MP4 frammentato. Un file MP4 frammentato contiene più piccoli pezzi autonomi del video, ognuno con il proprio sommario. Ti permetterebbe di riprodurre il file prima che la registrazione completa sia finita.

Se non è necessario attenersi a MP4, un'opzione potrebbe essere quella di scrivere il flusso di h264 non elaborato sul server. Quindi non hai quel tipo di tabella dei contenuti. VLC può riprodurre flussi raw h264.

+0

hi sebsatian, non sono in grado di ottenere dati di riga in Android durante la registrazione di video, puoi dirmi come posso ottenerlo. – Ravinder

+0

Conosco MP4 ma non Android in particolare. Forse dovresti creare una nuova domanda. –

+0

Un altro modo per farlo potrebbe essere registrare solo uno o due secondi e concatenarlo di nuovo sul server ?! –

3

Utilizzare MP4Box per spostare l'atomo MOOV all'inizio del file e l'interleaving per lo streaming nel blocco.

MP4Box test.mp4 test.mp4 
+3

Non funziona per me. Restituisce: Errore - 2 nomi di input specificati, verificare l'uso MP4Box versione 0.5.0-rev4065 –

0

Aggiungi alla tua Gradle questo lib: compilazione 'net.ypresto.qtfaststartjava: qtfaststart: 0.1.0' e poi

File input = new File(path + "/input.mp4"); // Your input file 
File output = new File(path + "/output.mp4"); // Your output file 
try{ 
    if(!output.exists()) // if there is no output file we'll create one 
     output.createNewFile(); 
    } 
}catch (IOException e){ 
    Log.e("TAG", e.toString()); 
} 

try{ 
    QtFastStart.fastStart(input, output); // Adds moov to your input 
              // Now your output file is ready to stream! 
}catch (QtFastStart.MalformedFileException m){ 
    Log.e("QT", m.toString()); 
}catch (QtFastStart.UnsupportedFileException q){ 
    Log.e("QT", q.toString()); 
}catch (IOException i){ 
    Log.e("QT", i.toString()); 
} 

Qui è tutto quello che

0

è possibile per spostare l'atomo moov all'inizio del file video usando FFMpeg.

ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags +faststart output_video_file.mp4 
Problemi correlati