Android视频录制、播放的两种方式一

 时间:2024-11-22 18:45:06

1、注意:这里播放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- 此值设置获取视频文件的大小,以字节为单位.

2、空白窗口Activity的XML布局视图:

Android视频录制、播放的两种方式一

3、Activity的代码如下: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;@Overrideprotected 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() {@Overridepublic void onPlay() {Toast.makeText(MainActivity.this,"播放",Toast.LENGTH_SHORT).show();iv.setVisibility(View.INVISIBLE);}@Overridepublic void onPause() {Toast.makeText(MainActivity.this,"暂停",Toast.LENGTH_SHORT).show();iv.setVisibility(View.VISIBLE);}});btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT,videoPath);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);startActivityForResult(intent,REQUST_VIDEO);}});}private Bitmap getVideoBitmap(String videoPath){MediaMetadataRetriever retriever = null;try {retriever = new MediaMetadataRetriever();retriever.setDataSource(videoPath);Bitmap bitmap = retriever.getFrameAtTime();return bitmap;}finally {retriever.release();}}private Bitmap getVideoBitmap2(Uri uri){MediaMetadataRetriever retriever = null;try {retriever = new MediaMetadataRetriever();retriever.setDataSource(this,uri);Bitmap bitmap = retriever.getFrameAtTime();return bitmap;}finally {retriever.release();}}public void start(View view){iv.setVisibility(View.INVISIBLE);video.start();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK){if (requestCode == REQUST_VIDEO){fl.setVisibility(View.VISIBLE);btn_start.setVisibility(View.VISIBLE);Uri uri = data.getData();video.setVideoURI(uri);// Bitmap bitmap = getVideoBitmap(videoPath);Bitmap bitmap = getVideoBitmap2(uri);iv.setImageBitmap(bitmap);}}}}//自定义VideoViewpublic class CustomVideoView extends VideoView {private PlayPauseListener listener;public CustomVideoView(Context context) {super(context);}public CustomVideoView(Context context, AttributeSet attrs) {super(context, attrs);}public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public void setPlayPauseListener(PlayPauseListener listener){this.listener = listener;}@Overridepublic void pause() {super.pause();if (listener!=null){listener.onPause();}}@Overridepublic void start() {super.start();if (listener!=null){listener.onPlay();}}interface PlayPauseListener{void onPlay();void onPause();}}

4、最终效果图如下:

Android视频录制、播放的两种方式一
  • 什么是p2p网络摄像机
  • 如何安装视频监控采集卡
  • 简单网线水晶头接法图文详解
  • 监控摄像头维修教程
  • 海康威视客户端怎么添加摄像头
  • 热门搜索
    认识大自然手抄报 唐诗宋词手抄报 国庆节手抄报资料 古诗配画手抄报 心理健康手抄报素材 勾股定理手抄报 卫生手抄报图片 低碳生活手抄报图片 规范语言文字手抄报 文化手抄报