我想只在带有MPEG4格式的android中录制视频。我希望容器和编解码器是MPEG4。所以这就是我为此所做的。
Thread video = new Thread(new Runnable() {
public void run() {
videoRecorder = new MediaRecorder();
videoRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
videoRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
videoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
videoRecorder.setVideoEncodingBitRate(56 * 8 * 1024);
videoRecorder.setVideoSize(176, 144);
videoRecorder.setVideoFrameRate(12);
videoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
videoRecorder.setOutputFile("/sdcard/video.m4e");
try {
videoRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
videoRecorder.start();
}
});
video.start();
现在,录制完成后,我将视频录制到video.m4e
文件中。但是当我检查它的信息时,我得到了以下内容:
同时我使用以下内容录制音频:
Thread audio = new Thread(new Runnable() {
public void run() {
audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
audioRecorder.setOutputFile("/sdcard/audio.amr");
try {
audioRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
audioRecorder.start();
}
});
audio.start();
我按照预期将容器格式和编解码器作为AMR:
那么,是什么导致MediaRecorder
以3GP格式录制视频?我的程序中没有指定3GP。我正在运行Android 2.2的Samsung Galaxy选项卡上测试此代码
答案 0 :(得分:7)
MPEG-4是一种定义音频和视频(AV)数字数据压缩的方法。
一种用于存储基于时间的媒体内容的文件格式。它是形成许多其他更具体的文件格式(例如3GP,Motion JPEG 2000,MPEG-4 Part 14)的基础的一般格式。
因此,你得到的结果没有阴谋,您使用的压缩方法(或“编解码器”)是MPEG4,手机生成的视频格式为3gp,实际上是媒体MPEG4压缩方案套件的视频格式的一部分。
答案 1 :(得分:0)
这是由框架定义的。具体来说,它有一组参数,可在MediaRecorder类中找到,用于定义所有支持的参数。
答案 2 :(得分:0)
我不明白akkilis的解释。
在官方Android教程"MediaRecorder.OutputFormat"中,
MPEG_4是“媒体文件格式”的选项之一,与THREE_GPP并行。
int AAC_ADTS AAC ADTS文件格式
int AMR_NB AMR NB文件格式
int AMR_WB AMR WB文件格式
int DEFAULT
int MPEG_4 MPEG4媒体文件格式
int RAW_AMR此常量在API级别16中已弃用。不推荐使用MediaRecorder.OutputFormat.AMR_NB
int THREE_GPP 3GPP媒体文件格式
还有另一个参数来指定编码格式: "MediaRecorder.VideoEncoder"
int DEFAULT
int H263
int H264
int MPEG_4_SP
在OP的代码中,他指定了文件格式和编码格式。
videoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); videoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
所以似乎akkilis的解释对这个例子不起作用。