2012-03-24 12 views
6

Quando si imposta il formato video MPEG-2 (valore costante 8) TS e il formato audio ACC (valore costante 3) registra solo video senza audio nel formato ACC . Ma non dà alcun errore. L'ho provato su Samsung Galaxy Tab (Honeycomb). Perché MPEG-2TS supporta su Android versione 3.0+. Se utilizzo il formato video e audio predefinito, funziona bene. Come posso fare questo. Per favore aiuto.Come registrare video in uscita MPEG-2 TS e formato di codifica audio ACC

if(mCamera == null) { 
    mCamera = Camera.open(); 
    mCamera.unlock(); 
} 


if(mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); 

mMediaRecorder.setPreviewDisplay(surface); 
mMediaRecorder.setCamera(mCamera); 
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
mMediaRecorder.setOutputFormat(8); 
mMediaRecorder.setOutputFile("/mnt/sdcard/temp.ts"); 
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
mMediaRecorder.setVideoSize(640, 480); 

mMediaRecorder.setVideoEncodingBitRate(500000); 
mMediaRecorder.setAudioEncodingBitRate(44100); 
mMediaRecorder.setVideoFrameRate(30); 
mMediaRecorder.setMaxDuration(-1); 
mMediaRecorder.prepare(); 
+0

inviare un vostro log degli errori. –

+0

pubblica il tuo compagno di codice :-) –

+0

Come stai verificando che non ha audio? Stai eseguendo il demuxing del file .TS? – freeone3000

risposta

0

Sembra che il problema sia associato agli encoder audio. Prima di Android 2.3.3 (GingerBread) è necessario impostare l'encoder su AMR_NB. A partire dalla 2.3.3 puoi anche usare AMR_WB e AAC come codec audio.

+1

non si ottiene il mio requisito. Non è in grado di mux audio e video in mpeg2ts e aac. –

+0

@SuvamRoy Che cos'è "mux"? –

+0

In realtà ho bisogno di registrare il video nel formato di uscita MERG-2TS, e per questo formato solo l'encoder audio ACC supporta la guida degli sviluppatori Android. Quindi, sono in grado di registrare video in quel formato senza audio. Se cambio il mio codificatore audio, dà un'eccezione. Se utilizzo tutti i codificatori video e audio predefiniti, è in grado di registrare video e audio. –

0

mMediaRecorder.setAudioEncodingBitRate (44100): 44100 non è un buon bit rate audio. È più probabile una frequenza di campionamento. 128000 è più comunemente un bit rate audio.

Detto questo, ho anche problemi con la registrazione in formato m2ts sul Samsung Galaxy S3.

mediaRecorder = new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(/*MediaRecorder.OutputFormat.OUTPUT_FORMAT_MPEG2TS*/8); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    mediaRecorder.setAudioSamplingRate(48000); 
    mediaRecorder.setAudioEncodingBitRate(128000); 

L'opzione OutputFormat.OUTPUT_FORMAT_MPEG2TS è nascosto in Android 4.2.2 SDK. Quindi utilizzare l''8'. Questo potrebbe essere un indizio del fatto che questo formato non è realmente supportato.

0

La soluzione applica una patch in M2ts Writer. Crea libstagefright.so e invia al dispositivo. Inoltre, impostare nell'applicazione

recorder.setAudioSamplingRate(48000); 
recorder.setAudioEncodingBitRate(128000); 

oppure non registrare completamente il clip. Non ho approfondito il motivo per cui ho impostato i parametri sopra.

Patch per M2tsWriter in libstagefright:

diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp 

index c9ed5bb..a42371f 100644 

--- a/media/libstagefright/MPEG2TSWriter.cpp 

+++ b/media/libstagefright/MPEG2TSWriter.cpp 

@@ -411,6 +411,7 @@ void MPEG2TSWriter::SourceInfo::onMessageReceived(const sp<AMessage> &msg) { 
          (const uint8_t *)buffer->data() 
          + buffer->range_offset(), 
          buffer->range_length()); 
+     readMore(); 
       } else if (buffer->range_length() > 0) { 
        if (mStreamType == 0x0f) { 
         if (!appendAACFrames(buffer)) { 
Problemi correlati