android音视频学习之路三-视频采集、预览,取到 NV21 的数据回调

使用Camera API进行视频的采集,并使用SurfaceView 和TextureView 进行视频的预览

使用手机进行视频录制有两种方法,其中一种为调用系统摄像头进行视频的录制,第二种便是通过使用Camera API进行采集。
我们先说一下第一种,使用系统摄像头进行视频的录制,直接上代码:

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
 //设置视频录制的最长时间
 intent.putExtra (MediaStore.EXTRA_DURATION_LIMIT,30);
 //设置视频录制的画质
 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
 startActivityForResult (intent, VIDEO_CAPTURE);

简单说一下使用系统摄像头中的几个参数

MediaStore.EXTRA_OUTPUT:设置媒体文件的保存路径。
MediaStore.EXTRA_VIDEO_QUALITY:设置视频录制的质量,0为低质量,1为高质量。
MediaStore.EXTRA_DURATION_LIMIT:设置视频最大允许录制的时长,单位为毫秒。
MediaStore.EXTRA_SIZE_LIMIT:指定视频最大允许的尺寸,单位为byte。

然后在onActivityResult()中,通过data.getData()方法得到视频的地址:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (requestCode == RESULT_OK&&resultCode == VIDEO_CAPTURE){
            Uri uri = null;
            if (data != null) {
                uri = data.getData();
                tv1.setText(uri.toString());
            }
        }
    }

至于播放,直接使用系统的VideoView来播放
xml布局:

我们在onActivityResult中已经将视频的Uri写在了textview中,直接获取播放。

    private void playVideo() {
        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mVideoView.start();
            }
        });
        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                stopPlayVideo();
            }
        });
        mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                stopPlayVideo();
                return true;
            }
        });

        try {
            Uri uri = Uri.parse(tv1.getText().toString().trim());
            mVideoView.setVideoURI(uri);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

停止播放

    private void stopPlayVideo() {
        try {
            mVideoView.stopPlayback();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

最后加上权限即可


运行结果

image.png

demo地址

下一篇将简单介绍下用SurfaceView和TextureView进行预览的过程。
用SurfaceView和TextureView预览视频

你可能感兴趣的:(android音视频学习之路三-视频采集、预览,取到 NV21 的数据回调)