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