欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-03-10 22:37:27
Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)准备1.储存在raw文件夹2.储存在assets文件夹1.视频1.播放视频2.暂停播放3.获取播放时间4.重新播放5.播放到指定位置6.MediaController类(实现进度条,快进,播放暂停)7.播放网络视频Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data...

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


Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

准备

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

1.储存在raw文件夹

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

2.储存在assets文件夹

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

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 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)
第二步,实例化控件,并且获取文件路径并且调用播放方法

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

2.暂停播放

代码
调用pause方法

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


            @Override
            public void onClick(View v) {


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




            }
        });

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

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

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

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

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

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

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

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

7.播放网络视频

第一步,添加权限

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

application结点下添加

android:usesCleartextTraffic="true"

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

 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 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)
最后运行(可以看到,播放网络视频缓冲时间会比较久,大概在10秒左右)
Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)
关于播放视频的知识就也讲到这里啦,是不是特别的简单,谢谢您的阅读。
Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)

本文地址:https://blog.csdn.net/qq_46526828/article/details/107894524