Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)
- 准备
- 1.储存在raw文件夹
- 2.储存在assets文件夹
- 1.视频
- 1.播放视频
- 2.暂停播放
- 3.获取播放时间
- 4.重新播放
- 5.播放到指定位置
- 6.MediaController类(实现进度条,快进,播放暂停)
- 7.播放网络视频
准备
先导入我们需要用到的音频文件和视频文件
1.储存在raw文件夹
第一步,创建raw文件夹
导入文件
2.储存在assets文件夹
第一步,创建assets文件夹
第二步导入文件
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>
第二步,实例化控件,并且获取文件路径并且调用播放方法
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目录 需要动态申请权限
运行
2.暂停播放
代码
调用pause方法
Button button1=findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//暂停播放
mVideoView.pause();
}
});
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());
}
});
运行
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");
}
});
运行
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秒的位置)
6.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();
}
});
运行(实现了进度条等多个功能)
7.播放网络视频
第一步,添加权限
<uses-permission android:name="android.permission.INTERNET"/>
application结点下添加
android:usesCleartextTraffic="true"
第三步,获取网络视频路径,缓冲再播放
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();
}
});
}
});
第三步,卸载应用(因为添加了权限,所以需要重新生成应用)
最后运行(可以看到,播放网络视频缓冲时间会比较久,大概在10秒左右)