1、通过Intent的方式:Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
2、使用Camera的API,调用Media的MediaRecorder。
Intent的方式
注意:这里播放camera录制的视频使用VideoView,不使用MediaPlayer和SurfaceView的结合。用帧布局Framelayout布局,VideoView和ImageView,播放时隐藏视频缩略图,暂停时或初始化时显示视频缩略图。
因为VideoView没有设置监听播放和暂停状态的事件,所以我自定义一个CustomVideoView继承了VideoView,在里面创建一个监听方法和重写VideoView的播放、暂停的方法。
使用相机intent获取视频是使用最少代码使得你的应用获取视频的捷径.一个视频获取intent可以包含以下额外信息:
MediaStore.EXTRA_OUTPUT-此设置需要一个保存视频的路径和文件名的Uri.此设置是可选的但是强列推荐的.如果你不指定此值,相机应用就把请求到的图像以默认的文件名保存到默认的文件夹下,这些信息保存在返回的intent的Intent.getData()字段中.
MediaStore.EXTRA_VIDEO_QUALITY- 此值在最低质量最小文件尺寸时是0,在最高质量最大文件尺寸时是1.
MediaStore.EXTRA_DURATION_LIMIT- 此值设置获取视频的长度,以秒为单位.
MediaStore.EXTRA_SIZE_LIMIT- 此值设置获取视频文件的大小,以字节为单位.
XML布局视图:
public class MainActivity extends AppCompatActivity {
private static int REQUST_VIDEO = 1;
private Button btn;
private Button btn_start;
private FrameLayout fl;
private CustomVideoView video;
private ImageView iv;
private String sdCard;
private String videoPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
btn = ((Button) findViewById(R.id.btn_recoder));
btn_start = ((Button) findViewById(R.id.btn_start));
fl = ((FrameLayout) findViewById(R.id.fl_video));
video = ((CustomVideoView) findViewById(R.id.video));
iv = ((ImageView) findViewById(R.id.iv));
sdCard = Environment.getExternalStorageDirectory().getPath();
String currenTimeMillis = new SimpleDateFormat("yyyyMMdd HH:mm:ss").format(new Date(System.currentTimeMillis()));
videoPath = sdCard + "/" + "0000.mp4";
MediaController controller = new MediaController(this);
video.setMediaController(controller);
if (video.isPlaying()){
iv.setVisibility(View.INVISIBLE);
}
video.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
@Override
public void onPlay() {
Toast.makeText(MainActivity.this,"播放",Toast.LEN