Przesyłanie strumieniowe wideo z MediaRecorder przez LocalSocket
Próbuję wysłać wideo h264 / AAC z Android MediaRecorder za pośrednictwem lokalnego gniazda. Celem jest wysłanie wideo do serwera WOWZA poprzez RTMP lub RTSP, ale to sprawia mi wiele problemów i na razie próbuję tylko zapisać dane do pliku z LocalServerSocket.
Oto kod. Niestety nie jest to naprawdę czyste, ale spędziłem wiele godzin na testowaniu wielu rzeczy, a mój projekt jest teraz bałaganem.
W działaniu kamery konfiguracja pliku wyjściowego:
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());
Implementacja 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) {}
}
}
Problem polega na tym, że plik wynikający z tego nie może być odczytany przez żaden odtwarzacz multimedialny. Czy uważasz, że to z powodu problemu z kodowaniem? Ten kod powinien wygenerować plik binarny, jeśli dobrze rozumiem?
Z góry dziękuję, okrzyki.