【问题标题】:How to use MediaRecorder to capture video on Android?如何在 Android 上使用 MediaRecorder 捕捉视频?
【发布时间】:2011-10-25 15:35:58
【问题描述】:

我想用MediaRecorder制作一个短视频,但不知道怎么用。

在我的清单文件中,我在 application-end-tag 之前添加了这些权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
</application>

当用户按下按钮时,我使用此代码创建一个MediaRecorder

    private void startRecording() {
    mRecorder = new MediaRecorder();
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setOutputFile("myvideo.mpeg4");

    try {
        mRecorder.prepare();
    } catch (IOException e) {

    }
    mRecorder.start();
}

但是当我运行该代码时,我收到“强制关闭 - 应用程序已意外停止。请重试”消息。我应该如何使用MediaRecorder 以及如何调试我的应用程序以查看导致异常的原因?我需要向清单文件添加任何其他用户权限吗?

【问题讨论】:

  • 你能发布logcat以获得更多详细信息

标签: android user-permissions mediarecorder


【解决方案1】:

首先在你的 Manifest 文件中声明权限...

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.Camera"/>

然后在您的主应用代码中...

Camera cam = Camera.open();
cam.unlock();

if(recorder == null) { recorder=new MediaRecorder(); }

recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(fileName);
recorder.setPreviewDisplay(holder.getSurface());

try{ recorder.prepare(); recorder.start(); } 
catch( IOException e ) { e.printStackTrace(); }

【讨论】:

    【解决方案2】:

    要宣传您的应用程序依赖于摄像头,请在清单文件中添加一个标签:

    <manifest ... >
    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />
    ...
    

    使用相机应用录制视频

        static final int REQUEST_VIDEO_CAPTURE = 1;
    
     private void dispatchTakeVideoIntent() {
            Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
            }
        }
    

    // 观看视频

     @Override
           protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
        if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) 
        {
            Uri videoUri = intent.getData();
            mVideoView.setVideoURI(videoUri);
        }
    }
    

    【讨论】:

    • 这并不能回答你不使用 MediaRecorder 的问题
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2012-03-03
    • 2016-05-09
    • 2016-01-15
    • 2012-12-16
    相关资源
    最近更新 更多