2012-03-24 49 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)) { 
相关问题