本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下

1)、SurfaceView
在布局文件中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_media_play" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.zking.android_contentresolve.MediaPlayActivity"> <SurfaceView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/sv_media_surface" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <SeekBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/seekBar" android:layout_weight="1" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_media_play" android:onClick="isPlayOrPause" /> </LinearLayout> </LinearLayout>
在Activity里面和播放内存卡上音乐的代码差不多,只是视频多了个显示内容,关键代码就是这三条
//播放内存上的视频
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
//准备(内存卡)
mediaPlayer.prepare();
//将媒体播放器捕捉的画面展示在SurfaceView 上
mediaPlayer.setDisplay(sv_media_surface.getHolder());
但是没看前面博客的筒子可能会觉得看不懂,所以还是把完整的代码粘贴出来
public class MediaPlayActivity extends AppCompatActivity {
private SeekBar seekBar;
private MediaPlayer mediaPlayer;
private SurfaceView sv_media_surface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_play);
seekBar = (SeekBar) findViewById(R.id.seekBar);
sv_media_surface = (SurfaceView) findViewById(R.id.sv_media_surface);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//获取拖动结束后的位置
int progress=seekBar.getProgress();
//跳转到某个位置播放
mediaPlayer.seekTo(progress);
}
});
}
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){//代表第一次播放音乐
//播放内存卡内的音频
mediaPlayer=new MediaPlayer();
//设置类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
try {
//播放内存上的视频
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
//准备(内存卡)
mediaPlayer.prepare();
//将媒体播放器捕捉的画面展示在SurfaceView 上
mediaPlayer.setDisplay(sv_media_surface.getHolder());
//必须在播放前加载音频文件(异步准备)
// mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
//把图标改成暂停的图标(这里的暂停图标就是播放时的状态)
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐的总时长
int duration=mediaPlayer.getDuration();
//设置进度条的最大值为音乐的总时长
seekBar.setMax(duration);
new MyThread();
}else if(mediaPlayer.isPlaying()){//正在播放音乐
mediaPlayer.pause();
//把图标改成播放的图标(暂停状态)
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<seekBar.getMax()){
//获取当前音乐播放的位置
int currentPosition=mediaPlayer.getCurrentPosition();
//让进度条跟着时间走
seekBar.setProgress(currentPosition);
}
}
}
}
2)、VideoView,如果在项目中,仅仅只是播放视频的话,这种方式会比较简单,但是如果是要做视频播放器的话,还是使用第一种方法
布局文件
<VideoView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/vv_main_vedio" />
Activity
public class VedioActivity extends AppCompatActivity {
private VideoView vv_main_vedio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vedio);
vv_main_vedio = (VideoView) findViewById(R.id.vv_main_vedio);
//给videoView设置播放来源
vv_main_vedio.setVideoPath("file://mnt/sdcard/Movies/sister.mp4");
//实例化媒体控制器
MediaController mediaController=new MediaController(this);
//给activity_vedio设置控制器
vv_main_vedio.setMediaController(mediaController);
mediaController.setMediaPlayer(vv_main_vedio);
}
}
VideoView通过与MediaController类结合使用,开发者可以不用自己控制播放与暂停。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# VideoView
# 视频播放器
# Android UniversalVideoView实现视频播放器
# Android音视频开发之VideoView使用指南
# Android自定义videoview仿抖音界面
# Android原生视频播放VideoView的使用
# android多媒体类VideoView使用方法详解
# Android编程实现VideoView循环播放功能的方法
# Android VideoView类实例讲解
# Android使用VideoView播放本地视频和网络视频的方法
# android使用videoview播放视频
# Android中VideoView音视频开发的实现
# 媒体播放器
# 内存卡
# 时长
# 进度条
# 两种
# 要做
# 种方法
# 拖动
# 大家分享
# 正在播放
# 看不懂
# 具体内容
# 值为
# 大家多多
# 跳转到
# 音乐播放
# 卡上
# 加载
# 结束后
相关文章:
建站主机默认首页配置指南:核心功能与访问路径优化
建站之星如何优化SEO以实现高效排名?
黑客如何通过漏洞一步步攻陷网站服务器?
宝塔建站助手安装配置与建站模板使用全流程解析
如何快速搭建自助建站会员专属系统?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何在Windows服务器上快速搭建网站?
山东网站制作公司有哪些,山东大源集团官网?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
高端网站建设与定制开发一站式解决方案 中企动力
建站之星×万网:智能建站系统+自助建站平台一键生成
建站之星如何开启自定义404页面避免用户流失?
网站制作难吗安全吗,做一个网站需要多久时间?
如何高效生成建站之星成品网站源码?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何基于云服务器快速搭建个人网站?
建站与域名管理如何高效结合?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
小型网站制作HTML,*游戏网站怎么搭建?
盐城做公司网站,江苏电子版退休证办理流程?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何快速辨别茅台真假?关键步骤解析
如何配置支付宝与微信支付功能?
历史网站制作软件,华为如何找回被删除的网站?
宝塔新建站点为何无法访问?如何排查?
视频网站制作教程,怎么样制作优酷网的小视频?
如何通过FTP服务器快速搭建网站?
表情包在线制作网站免费,表情包怎么弄?
网站企业制作流程,用什么语言做企业网站比较好?
如何在腾讯云服务器上快速搭建个人网站?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
C++如何编写函数模板?(泛型编程入门)
如何在局域网内绑定自建网站域名?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
python的本地网站制作,如何创建本地站点?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
建站主机功能解析:服务器选择与快速搭建指南
学校免费自助建站系统:智能生成+拖拽设计+多端适配
建站之星导航配置指南:自助建站与SEO优化全解析
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
定制建站流程步骤详解:一站式方案设计与开发指南
如何正确选择百度移动适配建站域名?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何用AWS免费套餐快速搭建高效网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。