Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以MPEG-2 TS输出和ACC音频编码格式录制视频_Android_Video Streaming_Aac_Android Mediarecorder_Mpeg2 Ts - Fatal编程技术网

Android 如何以MPEG-2 TS输出和ACC音频编码格式录制视频

Android 如何以MPEG-2 TS输出和ACC音频编码格式录制视频,android,video-streaming,aac,android-mediarecorder,mpeg2-ts,Android,Video Streaming,Aac,Android Mediarecorder,Mpeg2 Ts,当我设置视频格式MPEG-2(常量值8)TS和音频格式ACC(常量值3)时,它只录制视频,而不录制ACC格式的音频。但它没有给出任何错误。我在三星Galaxy Tab(蜂巢)上试用过。因为android版本3.0+支持MPEG-2TS。如果我使用默认的视频和音频格式,效果很好。 我怎样才能做到这一点。请帮忙 if(mCamera == null) { mCamera = Camera.open(); mCamera.unlock(); } if(mMediaRecorder

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

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

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

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\u FORMAT\u MPEG2TS选项实际上隐藏在Android 4.2.2 SDK中。因此使用了“8”。这可能表明此格式不受支持。

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

recorder.setAudioSamplingRate(48000); 
recorder.setAudioEncodingBitRate(128000);
否则它将无法完全录制该剪辑。不过,我没有深入探讨设置上述参数的原因

libstagefright
中的
M2tsWriter
修补程序:

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)) { 
diff--git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp
索引c9ed5bb..a42371f 100644
---a/media/libstagefright/MPEG2TSWriter.cpp
+++b/media/libstagefright/MPEG2TSWriter.cpp
@@-411,6+411,7@@void MPEG2TSWriter::SourceInfo::onMessageReceived(const sp&msg){
(const uint8_t*)缓冲区->数据()
+缓冲区->范围\偏移量(),
缓冲区->范围长度();
+readMore();
}else if(缓冲区->范围长度()>0){
如果(mStreamType==0x0f){
如果(!appendAACFrames(buffer)){

您不了解我的要求。它无法在mpeg2ts和aac中多路复用音频和视频。实际上,我的要求是,我希望以MERG-2TS输出格式录制视频,并且对于这种格式,根据android开发者指南,只有ACC音频编码器支持。因此,我能够在没有音频的情况下以该格式录制视频。如果我更改我的音频编码der,它给出了一个例外。如果我使用所有默认的视频和音频编码器,它可以录制视频和音频。你如何检查它是否没有音频?你是否正在对.TS文件进行解组?当我使用所有默认格式时,我得到的是音频。但是当我设置此格式时,我没有得到任何音频。Hi@SuvamRoy。我尝试了你的代码,但使用了mMediaRecorder.setOutputFormat(8);选项我无法保存文件。没有录制甚至没有视频。我使用的是android 4.1.2。你成功了吗?我面临着同样的问题。我尝试使用修改过的audioloop命令行应用程序。当使用AACWriter对音频进行编码时,它会正确地生成输出,但当我尝试MPEG2TSWriter时,没有输出。我相信AAC编码器不是问题,但MPEG2TS多路复用器在与AAC音频或AMR音频一起使用时存在问题。