2012-03-24 48 views
6

當我設置視頻格式MPEG-2(常數值8)TS和音頻格式ACC(常數值3)時,它僅以ACC格式錄製沒有音頻的視頻。但它不會給出任何錯誤。我在Samsung Galaxy Tab(Honeycomb)上試了一下。由於MPEG-2TS支持Android 3.0以上版本。如果我使用默認的視頻和音頻格式,它工作正常。 我該怎麼做。請幫忙。如何以MPEG-2 TS輸出和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

發表您的錯誤日誌。 – 2012-03-24 12:31:45

+0

發佈你的密碼好友:-) – 2012-03-24 13:05:10

+0

你如何檢查它沒有音頻?你是否demuxing .TS文件? – freeone3000 2012-04-24 23:57:49

回答

0

看起來像你的問題是與音頻編碼器相關聯。在Android 2.3.3之前(GingerBread),您必須將編碼器設置爲AMR_NB。從2.3.3開始,您還可以使用AMR_WB和AAC作爲音頻編解碼器。

+1

你沒有得到我的要求。無法在mpeg2ts和aac中複用音頻和視頻。 – 2012-04-21 18:20:23

+0

@SuvamRoy什麼是「mux」? – 2012-04-21 18:22:41

+0

其實我的要求是我想要以MERG-2TS輸出格式錄製視頻,而對於這種格式,只有ACC音頻編碼器支持根據android開發者指南。因此,我可以在沒有音頻的情況下以該格式錄製視頻。如果我更換我的音頻編碼器,它會發出異常。如果我使用所有默認的視頻和音頻編碼器,它可以錄製視頻和音頻。 – 2012-04-22 06:20:04

0

mMediaRecorder.setAudioEncodingBitRate(44100):44100不是一個好的音頻比特率。這更可能是一個採樣率。 128000更常見的是音頻比特率。

話雖如此,我在三星Galaxy S3上也無法錄製到m2ts格式。

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

OutputFormat.OUTPUT_FORMAT_MPEG2TS選項實際上隱藏在Android 4.2.2 SDK中。因此使用'8'。這可能是這種格式不被真正支持的線索。

0

解決方案是在M2ts Writer中應用一個補丁。建立libstagefright.so並推送到設備。同樣在應用程序中設置如下

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

否則它將不會完全記錄剪輯。我沒有深入探討設置上述參數的原因。

修補程序M2tsWriterlibstagefright

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)) { 
相關問題