Android 如何使用intent将文件的输出设置为mp4,并使用action\u VIDEO\u CAPTURE动作将其设置为摄像头?

Android 如何使用intent将文件的输出设置为mp4,并使用action\u VIDEO\u CAPTURE动作将其设置为摄像头?,android,file,android-intent,camera,mp4,Android,File,Android Intent,Camera,Mp4,当我使用本机app camera拍摄视频时,输出文件具有3gp扩展名。我需要使用动作\视频\捕获意图动作来拍摄意图,该动作将生成一个具有mp4文件扩展名的文件。如何执行此操作?您可以在启动intent之前添加以下代码: videoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"fname_" + String.valueOf(System.currentTimeMillis()) + ".mp4"))

当我使用本机app camera拍摄视频时,输出文件具有3gp扩展名。我需要使用动作\视频\捕获意图动作来拍摄意图,该动作将生成一个具有mp4文件扩展名的文件。如何执行此操作?

您可以在启动intent之前添加以下代码:

videoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"fname_" + String.valueOf(System.currentTimeMillis()) + ".mp4"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);

videoUri=Uri.fromFile(新文件(Environment.getExternalStorageDirectory(),“fname_”+String.valueOf(System.currentTimeMillis())+“.mp4”);
intent.putExtra(MediaStore.EXTRA_输出,videoUri);

您可以继续尝试dis代码:

intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);    
   fileUri = getOutputMediaFile(MEDIA_TYPE_VIDEO);  // create a file to save the video in specific folder (this works for video only)
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

    // start the Video Capture Intent
    startActivityForResult(intent, REQUEST_VIDEO_CAPTURED_NEXUS);
捕获完成后,将调用此函数

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == Activity.RESULT_OK) {
            switch (requestCode) {
    case REQUEST_VIDEO_CAPTURED_NEXUS:
    this.videoFromCamera(resultCode, data);
    break;

default:
                break;
            }
        }
    }
私有void videoFromCamera(int结果代码、意图数据){

使用以下方法获取输出媒体文件uri

public Uri getOutputMediaFile(int type)
    {
        // To be safe, you should check that the SDCard is mounted

        if(Environment.getExternalStorageState() != null) {
            // this works for Android 2.2 and above
            File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "SMW_VIDEO");

            // This location works best if you want the created images to be shared
            // between applications and persist after your app has been uninstalled.

            // Create the storage directory if it does not exist
            if (! mediaStorageDir.exists()) {
                if (! mediaStorageDir.mkdirs()) {
                    Log.d(TAG, "failed to create directory");
                    return null;
                }
            }

            // Create a media file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            File mediaFile;
           if(type == MEDIA_TYPE_VIDEO) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "VID_"+ timeStamp + ".mp4");
            } else {
                return null;
            }

            return Uri.fromFile(mediaFile);
        }

        return null;
    }

这将以纯MP4格式保存捕获的视频。

该文件是真正的MP4视频?还是仅仅是文件扩展名?这似乎与LG G3上的默认摄像头应用程序不兼容。该文件仍然是3gp文件,只是文件扩展名发生了更改。@Waboodoo您是否找到了解决方案。我也有同样的问题。某些手机忽略您提供的任何文件路径,并在使用摄像机捕获意图时在3gp中录制。@horsejockey不幸没有,我没有继续解决此问题。我的结论是,我们无法控制摄像机返回的视频类型,因此如果我们要强制执行某一类型的视频,我们必须对视频本身进行转码es和/或实现我们自己的录像机。视频输出为mp4视频格式,但其mime类型为3gpp。因此,它不是纯mp4视频,因此无法使用默认播放器在ios设备上播放视频
public Uri getOutputMediaFile(int type)
    {
        // To be safe, you should check that the SDCard is mounted

        if(Environment.getExternalStorageState() != null) {
            // this works for Android 2.2 and above
            File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "SMW_VIDEO");

            // This location works best if you want the created images to be shared
            // between applications and persist after your app has been uninstalled.

            // Create the storage directory if it does not exist
            if (! mediaStorageDir.exists()) {
                if (! mediaStorageDir.mkdirs()) {
                    Log.d(TAG, "failed to create directory");
                    return null;
                }
            }

            // Create a media file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            File mediaFile;
           if(type == MEDIA_TYPE_VIDEO) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "VID_"+ timeStamp + ".mp4");
            } else {
                return null;
            }

            return Uri.fromFile(mediaFile);
        }

        return null;
    }