如何在android中以mp4格式录制低质量视频?

时间:2015-09-21 10:36:25

标签: android

我正在从相机录制低质量视频并将其上传到服务器。问题是录制的视频是3gp格式。即使我给出带有mp4扩展路径的EXTRA_OUTPUT标志,它仍然以3gp记录。

实际上,在iOS设备上,这个3gp视频没有播放,我不想使用ffmpeg将其转换为mp4,因为它有开销,转换需要时间。

这是我正在使用的代码: -

            ContentValues values = new ContentValues();
            String fileName = System.currentTimeMillis() + ".mp4";
            values.put(MediaStore.Video.Media.TITLE, fileName);
            values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
            try {
                Uri videoUriFromCamera = getContentResolver().insert(
                        MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUriFromCamera);
                if (videoSize != -1)
                    intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, videoSize);
                if (videoDuration != -1)
                    intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, videoDuration);

                startActivityForResult(intent, ACTION_REQUEST_VIDEO_FROM_CAMERA);
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(VideoPickActivity.this, "SD-Card not available", Toast.LENGTH_LONG).show();
            }

是否有任何方法或标志可以使用默认的相机意图以mp4格式或任何其他格式录制低质量视频?

2 个答案:

答案 0 :(得分:1)

没有

首先,在ACTION_VIDEO_CAPTURE上没有记录额外的用于声明特定视频容器格式(例如,MP4)的额外内容。尝试询问的最佳方法是为文件传递Uri,文件扩展名为.mp4,但即便如此也是如此。

其次,有数以千计的相机应用宣传支持ACTION_VIDEO_CAPTURE,包括预装的数百个相机应用。没有人必须尊重你的任何额外内容。没有必要注意文件扩展名以选择视频容器格式。

如果您希望对视频录制实现这种程度的控制,请自行录制视频,例如使用MediaRecorder

答案 1 :(得分:0)

您可能需要更深入地了解使用相机的机制: 创建一个MediaRecorder,并设置一个CamcorderProfile,你可以设置一些技巧。

    mCamera = Camera.open();
    mRec = new MediaRecorder();
    mRec.setCamera(mCamera);
    mRec.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRec.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
    mProfile.fileFormat = MediaRecorder.OutputFormat.MPEG_4;
    mRec.setProfile(mProfile);