我只想以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选项卡上测试此代码 最佳答案
MPEG-4是一种定义音频和视频(AV)数字数据压缩的方法。一种用于存储基于时间的媒体内容的文件格式。它是一种通用格式,是许多其他更特定文件格式(例如3GP,Motion JPEG 2000,MPEG-4 Part 14)的基础。因此,压缩结果(或“编解码器” “),您使用的是MPEG4,而您的手机生成的视频格式为3gp,实际上这是媒体MPEG4压缩方案套件的视频格式的一部分。