你可以参考我的写法,注意点就是你自定义的MyCallBack()里面要回调,也就是我写的SurfaceCallBack()里面的SurfaceCreated()函数要实现你写的setOnPreparedListener()的监听

public class Video implements MediaPlayer.OnCompletionListener,MediaPlayer.OnPreparedListener,MediaPlayer.OnErrorListener,MediaPlayer.OnBufferingUpdateListener,VideoClickListener{private Context context;

private SurfaceView surfaceView;

private SurfaceHolder surfaceHolder;

private MediaPlayer mediaPlayer;

private ProgressBar progressBar;

private SeekBar seekBar;

private VerticalSeekBar seekBar_sound;

private ImageView pause,full_screen,silent;

private TextView textView;

private boolean seekBarAutoFlag;

private String videoTimeString;

//判断值

private boolean isFullScreen=false;  //是否全屏

private boolean isPause=false; //是否暂停

private boolean isSilent=false;//是否静音

private int screenWidth;  //获取到设备的宽高

private int screenHeight;

@Override

public MediaPlayer getMediaPlayer() {

return mediaPlayer;

}

@Override

public SurfaceView getSurfaveView() {

return surfaceView;

}

@Override

public Thread getThread() {

return thread;

}

public Video(Context context, MediaPlayer mediaPlayereekBar, SurfaceView surfaceView, ProgressBar progressBar, SeekBar seekBar, TextView textView, ImageView pause, ImageView full_screen) {

this.context = context;

this.mediaPlayer=mediaPlayereekBar;

this.surfaceView=surfaceView;

this.progressBar=progressBar;

this.seekBar=seekBar;

this.textView=textView;

this.pause=pause;

this.full_screen=full_screen;

init();

}

/**

* 初始化控件

*/

public void init(){

// 设置surfaceHolder

surfaceHolder = surfaceView.getHolder();

// 设置Holder类型,该类型表示surfaceView自己不管理缓存区,虽然提示过时,但最好还是要设置

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

// 设置surface回调

surfaceHolder.addCallback(new SurfaceCallback());

//   mAudioManager= (AudioManager) context.getSystemService(AUDIO_SERVICE);

//获取屏幕的宽高

WindowManager wm = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);

screenWidth = wm.getDefaultDisplay().getWidth();

screenHeight = wm.getDefaultDisplay().getHeight();

}

/**

* 回调 对SurfaceView的生命周期的实现。

*/

private class SurfaceCallback implements SurfaceHolder.Callback {

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

// SurfaceView的大小改变

mediaPlayer.setDisplay(surfaceHolder);

}

public void surfaceCreated(SurfaceHolder holder) {

// surfaceView被创建

// 设置播放资源

playVideo();

}

public void surfaceDestroyed(SurfaceHolder holder) {

// surfaceView销毁

// 如果MediaPlayer没被销毁,则销毁mediaPlayer

if (null != mediaPlayer) {

mediaPlayer.release();

mediaPlayer = null;

}

}

}

/**

* 播放视频

*/

public void playVideo() {

// 初始化MediaPlayer

mediaPlayer = new MediaPlayer();

// 重置mediaPaly,建议在初始滑mediaplay立即调用。

mediaPlayer.reset();

// 设置声音效果

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

// 设置播放完成监听

mediaPlayer.setOnCompletionListener(Video.this);

// 设置媒体加载完成以后回调函数。

mediaPlayer.setOnPreparedListener(this);

// 错误监听回调函数

mediaPlayer.setOnErrorListener(this);

// 设置缓存变化监听

mediaPlayer.setOnBufferingUpdateListener(this);

File file = new File(Environment.getExternalStorageDirectory(), "震撼宇宙10秒倒计时.mp4");

String a=file.getPath();

Uri uri = Uri

.parse("http://video.eastday.com/a/180320180216447158758.html?qid=01360");

try {

// mediaPlayer.reset();

//mediaPlayer.setDataSource(media.this, uri);

mediaPlayer.setDataSource(a);

// 设置异步加载视频,包括两种方式 prepare()同步,prepareAsync()异步

mediaPlayer.prepareAsync();

} catch (IOException e) {

e.printStackTrace();

}

}

Android播放器自定义,android surfaceView+mediaPlayer 自定义视频播放器相关推荐

  1. 一个封装好的SurfaceView+MediaPlayer开源视频播放器

    第一次写博客,写的不好大家见谅哈. 由于我们公司业务是Android电视端,很多都用到了视频播放,而且运用到的地点非常多,自己也入码农的坑也没多久,刚开始在不同的播放页面都写了播放器,也试了ijkpl ...

  2. android播放器竖屏,Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换...

    在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作 以往常规操作基本如下 设置全屏播放步骤 1.横屏 2.视频播放器尺寸调整 3.隐藏其他多余控件 恢复小屏播放 1.竖屏 2 ...

  3. android studio多媒体播放器,Android支持全屏、小窗口的视频播放器

    NiceVieoPlayer Android支持全屏.小窗口的视频播放器,完美实现全屏.小窗口播放切换 Features 用IjkPlayer/MediaPlayer + TextureView封装, ...

  4. html5支持4k视频播放器,哪个是最好的4K视频播放器?五个最佳播放软件(个人经验)...

    哪个是最好的4K视频播放器? 4K视频使用什么播放器?这是每个人问得最多的问题. 4K老实决定与您分享播放4K视频的经验,并推荐几种常用的4K视频播放器. ▌播放软件: PowerDVD ▌推荐指数: ...

  5. android播放器竖屏,SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,

    MNVideoPlayer SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,手势快进快退.调节音量,亮度等.之前也发布过一个视频播放列表, 项目截图: 使用步骤: ...

  6. android播放mp3方法,Android之MediaPlayer播放音频与视频

    本节带来的是Android多媒体中的--MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放 ...

  7. Android MediaPlayer本地视频播放器

    该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...

  8. android电影播放器,安卓视频播放器哪个好 五款主流视频播放器对比

    如今手机的流行趋势是屏幕越来越大,从3.5寸到3.7寸再到现在不少主流的安卓手机所采用的4.3寸屏幕,用手机来看电影已经是一项在我们日常生活中使用频率非常高的功能.而手机处理器性能的进化也让我们可以轻 ...

  9. android ffmpeg+OpenGL播放yuv+openSL 快放 慢放 视频播放器

    这里是完整的音视频播放器,功能如下(这里有iOS版的): 视频是通过opengl 播放yuv数据,音频是opensl播放. app运行流程如下图: 红色虚线内的是一个线程的运行,总共涉及到四个线程. ...

  10. android 播放mp3 倒计时,Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)...

    1.背景 还是音乐播放界面,实现倒计时和进度条功能,基本实现过程: 当打开MusicActivity 的时候,MusicService会发送广播给MusicActivity ,后开始当前播放的时间进度 ...

最新文章

  1. 2021年大数据Spark(二十六):SparkSQL数据处理分析
  2. mysql内置含糊_mysql内置函数
  3. 可扩展架构设计原则与面向对象设计原则脑图
  4. 延大计算机文化基础课程作业,基于项目学习的大学《计算机文化基础课》教学设计...
  5. JS中的NaN和isNaN,简直是双重人格?
  6. centos禁用exec_CentOS停用按下Ctrl-Alt-Del 重启系统的功能
  7. Android 上滑背景变淡,在Android中,如何平滑地将背景从一种颜色淡化到另一种颜色? (如何使用线程)...
  8. 用CImage类来显示PNG JPG等图片
  9. Helm 3 完整教程(一):Helm 3 简介
  10. oracle时间加减的语句写法
  11. java判断接口地址是否存在_java.util.Iterator接口中的hashNext()方法是用来判断集合中是否存在下一个元素的()_学小易找答案...
  12. Android图片加载框架最全解析(一),Glide的基本用法
  13. Sicily.1059. Exocenter of a Trian(求垂心,向量旋转)
  14. 武汉青少年计算机编程,武汉青少年编程学习
  15. Git 常用命令大全-转载
  16. MySql函数 - DATE_ADD()函数
  17. Spring中的AOP以及切入点表达式和各种通知
  18. VS2019 配色_NBA球员上脚:基德穿AJ13湖人配色,莫兰特的保罗乔治4代
  19. 数论——唯一分解定理
  20. 什么是大数据4v 指的是哪四个

热门文章

  1. 串的模式匹配、KMP算法、nextval数组求法
  2. 1109 Group Photo (25 分)【难度: 一般 / 知识点: 模拟 排序】
  3. 实验:交换机生成树协议STP--功能验证
  4. 分治法求解最大子数组问题
  5. ActiveMQ安装
  6. 计算机组成名词解释移码,自考“计算机组成原理”串讲资料
  7. 华为鸿蒙系统明年公测,华为终于发布新系统,即将与安卓系统告别,这批机型可以申请公测...
  8. Android踩坑日记:自定义水平和圆形ProgressBar样式
  9. 【深入Java虚拟机JVM 07】JVM如何判断对象已死
  10. Spring的事件发布机制