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

如何在android中录制mp4格式的低质量视频?,android,Android,我正在从摄像机录制一段低质量的视频,并将其上传到服务器。问题是录制的视频采用3gp格式。即使我用mp4扩展路径给出额外的_输出标志,它仍然记录在3gp中 实际上,在iOS设备上,这个3gp视频没有播放,我不想使用ffmpeg将其转换为mp4,因为它有开销,转换需要时间 这是我正在使用的代码:- ContentValues values = new ContentValues(); String fileName = System.currentTi

我正在从摄像机录制一段低质量的视频,并将其上传到服务器。问题是录制的视频采用3gp格式。即使我用mp4扩展路径给出额外的_输出标志,它仍然记录在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格式或任何其他格式录制低质量视频?

首先,对于说明特定的视频容器格式(例如MP4),没有关于
操作\u视频\u捕获
的额外记录。尝试这样做的最佳方法是为文件传递一个
Uri
,其中文件扩展名为
.mp4
,但即使这样也只是一个希望

其次,有数千个摄像头应用程序宣传支持
动作视频捕获
,包括数百个预装的摄像头应用程序。没有人会尊重你的额外成就。没有人需要注意文件扩展名来选择视频容器格式


如果您希望对视频录制进行一定程度的控制,请自己录制视频,例如使用
MediaRecorder

您可能需要更深入地了解使用相机的技巧: 创建一个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);

“但即使这只是一个希望”——我想知道这些答案是否合适@DanielWilson:这些是“为文件传递Uri,其中文件扩展名为.mp4”。没有要求任何应用程序注意该文件扩展名。在仔细查看后应该更具体。您对@PKV在第二个链接中的答案有何看法?这对我来说是合理的。(S) 他似乎从响应中的文件数据流创建了一个MP4:InputStream in=getContentResolver().openInputStream(data.getData()),我希望这与通过MediaStore.EXTRA请求intent中的MP4完全不同_OUTPUT@DanielWilson:这个答案更糟糕,因为很少有摄像头应用程序可以使用该代码。它也不能解决这个问题。您正在调用第三方相机应用程序。该应用的开发者可以随心所欲。这包括不实际录制视频,更不用说不以所需格式录制视频了。如果你需要以特定的格式录制视频,请自己录制。好吧,该死的。我理解第三方的意图可能是脆弱的,我们不能保证视频,但我想,如果我得到了一个视频,我至少可以在大多数情况下将视频转换为Mp4。我的选择似乎是使用该死的媒体录像机(我现在正在这么做,但它充满了奇怪的设备特定问题),或者可能在我们的服务器上转换文件。我会做更多的研究,谢谢你的时间:)