Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)

  • 准备
  • 1.储存在raw文件夹
  • 2.储存在assets文件夹
  • 1.视频
  • 1.播放视频
  • 2.暂停播放
  • 3.获取播放时间
  • 4.重新播放
  • 5.播放到指定位置
  • 6.MediaController类(实现进度条,快进,播放暂停)
  • 7.播放网络视频



准备

先导入我们需要用到的音频文件和视频文件

1.储存在raw文件夹

第一步,创建raw文件夹

Android 实时获取相机视频流 android获取本地视频列表_ide


导入文件

Android 实时获取相机视频流 android获取本地视频列表_Android 实时获取相机视频流_02

2.储存在assets文件夹

第一步,创建assets文件夹

Android 实时获取相机视频流 android获取本地视频列表_android_03


第二步导入文件

Android 实时获取相机视频流 android获取本地视频列表_移动开发_04

1.视频

1.播放视频

第一步,添加布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="106dp"
        android:text="播放视频"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="40dp"
        android:layout_marginRight="40dp"
        android:text="暂停播放"
        app:layout_constraintBottom_toBottomOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent" />

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="0dp"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toBottomOf="@id/button2" />

</androidx.constraintlayout.widget.ConstraintLayout>

Android 实时获取相机视频流 android获取本地视频列表_Android 实时获取相机视频流_05


第二步,实例化控件,并且获取文件路径并且调用播放方法

public class MainActivity extends AppCompatActivity {

    VideoView mVideoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mVideoView=findViewById(R.id.videoView);//实例化控件

        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //获取视频路径
                String path="android.resource://" + getPackageName() + "/" +R.raw.d1;;
                mVideoView.setVideoPath(path);
                //播放视频
                mVideoView.start();

            }
        });


    }
}

其他获取文件方式
data/data/包名目录

String path="data/data/包名/d1.mp4";//data/data/包名目录

sdcard目录

String sdcardpath="sdcard/d1.mp4";//sdcard目录 需要动态申请权限

运行

Android 实时获取相机视频流 android获取本地视频列表_ide_06

2.暂停播放

代码
调用pause方法

Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {


                //暂停播放
                mVideoView.pause();




            }
        });

Android 实时获取相机视频流 android获取本地视频列表_android_07

3.获取播放时间

有时候需要用到进度条功能,获取当前播放的时间位置和总时长

代码

Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                //暂停播放
                mVideoView.pause();
                Log.i("Mainactivity","当前播放时间"+mVideoView.getCurrentPosition());

                Log.i("Mainactivity","视频总时长"+mVideoView.getDuration());
                
            }
        });

运行

Android 实时获取相机视频流 android获取本地视频列表_android_08

4.重新播放

有时候用户可能在看完一遍以后想要重播,这个时候我们就不需要重新去获取文件,只需要调用resume方法就可实现重新播放

Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                //重新播放
                mVideoView.resume();

                
                Log.i("Mainactivity","当前播放时间:"+mVideoView.getCurrentPosition()+"ms");

                Log.i("Mainactivity","视频总时长:"+mVideoView.getDuration()+"ms");

            }
        });

运行

Android 实时获取相机视频流 android获取本地视频列表_Android 实时获取相机视频流_09

5.播放到指定位置

在用一个拖动进度条改变视频播放的时间位置时,我们需要让视频播放指定时间位置,也是需要用到seekto 这个方法

Button button1=findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                //播放视频时间在 50 秒的时候
                mVideoView.seekTo(50*1000);

                Log.i("Mainactivity","当前播放时间:"+mVideoView.getCurrentPosition()+"ms");

            }
        });

运行(点击按钮播放视频的50秒的位置)

Android 实时获取相机视频流 android获取本地视频列表_ide_10

6.MediaController类(实现进度条,快进,播放暂停)

但是这样不好的地方就是进度条等样式不能修改,如果需要自定义的话,可以结合上面的方法自己来制定

Android 实时获取相机视频流 android获取本地视频列表_ide_11

Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                    //获取视频路径
                    String path="android.resource://" + getPackageName() + "/" +R.raw.d1;;
                    mVideoView.setVideoPath(path);


                MediaController mediaController=new MediaController(MainActivity.this);
                mVideoView.setMediaController(mediaController);

                //播放视频
                mVideoView.start();

            }
        });

运行(实现了进度条等多个功能)

Android 实时获取相机视频流 android获取本地视频列表_android_12

7.播放网络视频

第一步,添加权限

<uses-permission android:name="android.permission.INTERNET"/>

application结点下添加

android:usesCleartextTraffic="true"

Android 实时获取相机视频流 android获取本地视频列表_android_13


第三步,获取网络视频路径,缓冲再播放

Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                //网络视频
                mVideoView.setVideoURI(Uri.parse("http://148.70.46.9/456.mp4"));
                mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {//缓冲
                        //播放视频
                        mVideoView.start();
                    }
                });


            }
        });

第三步,卸载应用(因为添加了权限,所以需要重新生成应用)

Android 实时获取相机视频流 android获取本地视频列表_Android 实时获取相机视频流_14


最后运行(可以看到,播放网络视频缓冲时间会比较久,大概在10秒左右)

Android 实时获取相机视频流 android获取本地视频列表_android_15