我只想以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压缩方案套件的视频格式的一部分。

10-08 14:14