视频播放的三种方法

第一种播放:跳转到系统自带的播放器

①创建button按钮

  <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/start1"
        android:text="第一种方式"
        />

②创建button按钮点击事件,查找播放资源并播放

   case R.id.start1:
               //sdcard资源 
                 Uri uri = Uri.parse("storage/emulated/legacy/ace1.mp4");
                Intent intent = new Intent(Intent.ACTION_VIEW); 
                intent.setDataAndType(uri, "video/mp4");
                //播放代码
                startActivity(intent);
                break;

第二种播放:用VideoView组件播放(此方法可以有播放上一个/下一个)

①创建button按钮和VideoView组件

  <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/start2"
        android:text="第二种方式"
        />
    <VideoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/vv"
        />

②创建button按钮点击事件,查找播放资源并播放

private String[] videoPath = {"ace1.mp4","first.mp4"};
            private int index = 0;
                  MediaController controller = new MediaController(this);//控制条
                  mVv.setMediaController(controller);//添加控制条
                  mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
                  mVv.start();
            //添加上一个下一个视频的监听
            controller.setPrevNextListeners(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                index--;
                if(index<0){
                    index = videoPath.length-1;
                }
                    mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
                    mVv.start();
                }
            }, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                index ++;
                if(index >= videoPath.length){
                    index = 0;
                }
                mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
                mVv.start();
            }
        });
                break;

第三种播放:用SurfaceView组件播放(此方法只可以播放)

①创建ImageView和SurfaceView组件

   <ImageView
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:id="@+id/img"
        />
    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sfv"
        />

②设置首帧图片

  private void getFirstFrame() {
        MediaMetadataRetriever mr = new MediaMetadataRetriever();
        mr.setDataSource("storage/emulated/legacy/ace1.mp4");
        //option
        //OPTION_CLOSEST    在给定的时间,检索最近一个帧,这个帧不一定是关键帧。
        //OPTION_CLOSEST_SYNC   在给定的时间,检索最近一个同步帧(关键帧)。
        //OPTION_NEXT_SYNC 在给定时间之后检索一个同步帧(关键帧)。
        //OPTION_PREVIOUS_SYNC  在给定时间之前检索一个同步帧(关键帧)
        Bitmap frameAtTime = mr.getFrameAtTime(1000 * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
        mImg.setImageBitmap(frameAtTime);
    }

③使用SurfaceView组件播放

     setContentView(R.layout.activity_surface_view);
          mImg = (ImageView) findViewById(R.id.img);
        mSfv = (SurfaceView) findViewById(R.id.sfv);

       MediaPlayer mp = new MediaPlayer();
        try {
            mp.setDataSource("storage/emulated/legacy/ace1.mp4");
            mp.prepareAsync();//准备一下资源,加载资源

            holder = mSfv.getHolder();
            holder.addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    mp.setDisplay(holder);//mp和surfaceview的结合
                    mp.start();//播放视频开始
                }
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                }
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
            //解决万一ace1.mp4被删除了的,第二套

        }

不要忘记:

要写出sdcard权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。