Sto provando a inviare video h264/AAC da MediaRecorder di Android tramite un socket locale. L'obiettivo è quello di inviare video a un server WOWZA tramite RTMP o RTSP, ma mi dà un sacco di problemi e per ora sto solo cercando di scrivere i dati su un file dal LocalServerSocket.Streaming video da MediaRecorder tramite LocalSocket
Ecco un codice. Spiacente, non è molto pulito, ma ho passato ore a testare molte cose e il mio progetto è un casino in questo momento.
Nell'attività fotocamera, l'impostazione del file di output:
LocalSocket outSocket = new LocalSocket();
try {
outSocket.connect(new LocalSocketAddress(LOCAL_SOCKET));
} catch (Exception e) {
Log.i(LOG_TAG, "Error connecting socket: "+e);
}
mMediaRecorder.setOutputFile(outSocket.getFileDescriptor());
L'implementazione LocalServerSocket:
try {
mLocalServerSocket = new LocalServerSocket(mName);
} catch (Exception e) {
Log.e(LOG_TAG, "Error creating server socket: "+e);
return;
}
while (true) {
File out = null;
FileOutputStream fop = null;
try {
mLocalClientSocket = mLocalServerSocket.accept();
InputStream in = mLocalClientSocket.getInputStream();
out = new File(mContext.getExternalFilesDir(null), "testfile.mp4");
fop = new FileOutputStream(out);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) >= 0) {
Log.i(LOG_TAG, "Writing "+len+" bytes");
fop.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
fop.close();
mLocalClientSocket.close();
} catch (Exception e2) {}
}
}
Il problema è che il file risultante da questo non è leggibile da qualsiasi lettore multimediale. Pensi che questo sia dovuto a un problema di codifica? Questo codice dovrebbe generare un file binario se ho capito bene ?!
Grazie in anticipo, grazie.
se non si verificano errori è probabilmente causato da problemi di codifica/nome file. Cosa [OutputFormat] (http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html) hai impostato? Forse rinominarlo in '.3gp' o così aiuta - vedi [qui] (http://stackoverflow.com/questions/9110711/android-mediarecorder-getting-3gp-instead-of-mpeg4) – zapl
Il formato di output è MPEG_4, quindi suppongo che dovrebbe andare bene con un'estensione .mp4. Inoltre, se scrivo direttamente in un file .mp4 in mMediaRecorder.setOutputFile() funziona perfettamente. – Simon
hai controllato se qualcosa come [mediainfo] (http://mediainfo.sourceforge.net/en) può leggere le proprietà del video creato? Si potrebbe anche provare un diff binario (almeno dell'intestazione) di un file generato direttamente e un file inviato attraverso il socket locale per verificare se il file generato sembra corretto. – zapl