6

当我设置视频格式 MPEG-2(常数值 8)TS 和音频格式 ACC(常数值 3)时,它只记录视频,而没有 ACC 格式的音频。但它没有给出任何错误。我在三星 Galaxy Tab(蜂窝)上试过。因为 MPEG-2TS 支持 android 版本 3.0+。如果我使用默认的视频和音频格式,它可以正常工作。我怎样才能做到这一点。请帮忙。

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

3 回答 3

0

看起来您的问题与音频编码器有关。在 Android 2.3.3(GingerBread) 之前,您必须将编码器设置为 AMR_NB。从 2.3.3 开始,您还可以使用 AMR_WB 和 AAC 作为音频编解码器。

于 2012-04-21T16:47:15.950 回答
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”。这可能是这种格式不被真正支持的线索。

于 2013-12-02T18:57:15.807 回答
0

解决方案是在M2ts Writer. 构建libstagefright.so并推送到设备。在应用程序中也设置如下

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

否则它不会完整地记录剪辑。不过,我没有深入研究设置上述参数的原因。

补丁:M2tsWriter_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)) { 
于 2014-09-26T21:16:49.037 回答