2012-03-24 15 views
6

Po ustawieniu formatu wideo MPEG-2 (stała wartość 8) TS i formacie audio ACC (stała wartość 3) nagrywa wideo tylko bez dźwięku w formacie ACC . Ale nie daje żadnego błędu. Próbowałem go na Samsung Galaxy Tab (Honeycomb). Ponieważ MPEG-2TS obsługuje na Androida w wersji 3.0+. Jeśli używam domyślnego formatu wideo i audio, działa dobrze. Jak mogę to zrobić. Proszę pomóż.Sposób nagrywania wideo w formacie wyjściowym MPEG-2 TS i formacie kodowania 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

opublikować dziennik błędów. –

+0

po napisaniu kodu do kodeka :-) –

+0

W jaki sposób sprawdzasz, czy nie ma dźwięku? Czy demuxingujesz plik .TS? – freeone3000

Odpowiedz

0

Wygląda na to, że Twój problem związany jest z koderami audio. Przed wersją Androida 2.3.3 (GingerBread) należy ustawić koder na AMR_NB. Od wersji 2.3.3 można również używać AMR_WB i AAC jako kodeków audio.

+1

nie dostaniesz mojego wymogu. Nie jest w stanie multipleksować audio i wideo w mpeg2ts i aac. –

+0

@SuvamRoy Co to jest "mux"? –

+0

Właściwie to wymagam, że chcę nagrywać wideo w formacie wyjściowym MERG-2TS, a dla tego formatu tylko kodek ACC audio obsługuje zgodnie z Androidem przewodnik programisty. Dzięki temu mogę nagrywać wideo w tym formacie bez dźwięku. Jeśli zmienię swój kodek audio, daje to wyjątek. Jeśli używam domyślnego kodera wideo i audio, jest on w stanie nagrywać wideo i audio. –

0

mMediaRecorder.setAudioEncodingBitRate (44100): 44100 nie jest dobrą przepustowością audio. Bardziej prawdopodobna jest częstotliwość próbkowania. 128000 to częściej bitrate audio.

Mam również problem z nagrywaniem do formatu m2ts na Samsung Galaxy S3 w ogóle.

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); 

Opcja OutputFormat.OUTPUT_FORMAT_MPEG2TS jest rzeczywiście ukryty w Android 4.2.2 SDK. Stąd użycie "8". Może to być wskazówką, że ten format nie jest tak naprawdę obsługiwany.

0

Rozwiązanie polega na zastosowaniu poprawki w M2ts Writer. Utwórz libstagefright.so i naciśnij do urządzenia. Ustaw również poniżej w aplikacji

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

lub w przeciwnym razie nie zostanie nagrany całkowicie. Nie przekopałem się jednak z powodu ustawienia powyższych parametrów.

poprawka dla M2tsWriter w 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)) {