使用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布局:
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始录制"/>
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:padding="10dp"
android:layout_height="wrap_content"
android:text="url"/>
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放"/>
<VideoView
android:id="@+id/video_v"
android:layout_width="match_parent"
android:layout_height="300dp" />
我们在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();
}
}
最后加上权限即可
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
运行结果
demo地址
下一篇将简单介绍下用SurfaceView和TextureView进行预览的过程。
用SurfaceView和TextureView预览视频