public class VideosurfaceView extends SurfaceView implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener {
private SurfaceHolder holder;
private MediaPlayer mediaPlayer;

public VideosurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

private void init() {
holder= getHolder();
holder.addCallback(this);
holder.setKeepScreenOn(true);
}
//设置路径并播放
public void playVideo(String patn){
if (mediaPlayer==null){
mediaPlayer=new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
}

try {
//重置mediaplayer
mediaPlayer.reset();
//设置播放路径
//设置画面播放源
mediaPlayer.setDisplay(holder);
mediaPlayer.setDataSource(patn);

//准备播放
mediaPlayer.prepareAsync();
//开始播放
mediaPlayer.start();
mediaPlayer.isPlaying();

} catch (IOException e) {
e.printStackTrace();
}

}
// public void kuaijin(){
// int currentPosition = mediaPlayer.getCurrentPosition();
// currentPosition+=2000;
// mediaPlayer.seekTo(currentPosition);
//
// }
//停止播放
public void stop(){
if (mediaPlayer!=null){
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else {
mediaPlayer.start();
}
}
}
//重新播放
public void replay(){
mediaPlayer.reset();
}
@Override
//当surface第一次创建的时候
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
//当surface要改变的时候
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
//当surface要销毁的时候
public void surfaceDestroyed(SurfaceHolder holder) {
if (mediaPlayer!=null){
mediaPlayer.release();//释放资源
mediaPlayer=null;
}

}

@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
mediaPlayer.isPlaying();
}
}

//在主函数里只需调用即可
    public void onClick(View v) {
switch (v.getId()) {
case R.id.play_btn:
patn = Environment.getExternalStorageDirectory().getPath() + "/1508553914748.mp4";
// 获取外部存储目录
// 设置显示
video_view.setVisibility(View.VISIBLE);
// 设置路径
video_view.playVideo(patn);
break;
case R.id.pause_btn:
video_view.stop();
//video_view.kuaijin();
break;
case R.id.replay_btn:
video_view.playVideo(patn);
break;
}
}

最新文章

  1. XSS(跨站脚本攻击)的最全总结
  2. wordpress的创建
  3. hdu1507二分匹配
  4. 使用spring + cxf +tomcat构建webservice
  5. systemverilog interface
  6. Ajax与C#应用详细实例
  7. selenium + python 部署自动化测试环境
  8. javascript中自定义事件
  9. java里程碑之泛型--擦除和转换
  10. ionic页面间跳转的动画实现
  11. 第18月第10天 iOS11 uicollectionview
  12. Linux 部署 ASP.NET Core 的一些问题记录
  13. C语言结构体及typedef关键字定义结构体别名和函数指针的应用
  14. new operator
  15. maven工程下testng简单使用
  16. weblogic线程阻塞性能调优(图解)转
  17. vue.单选和多选,纯css自定义单选框样式
  18. noip2017行记
  19. 前端进阶之路:初涉Less
  20. [Bzoj3233][Ahoi2013]找硬币[基础DP]

热门文章

  1. IT之软件公司组织架构
  2. 【C学习笔记】day3-1 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
  3. C++ 中的匿名函数(lambda表达式)
  4. react toolkit 异步请求之后调取其他函数
  5. lowcodeEngine 组件面板的拖拽功能
  6. HIVE- INSERT 方法使用
  7. [3] ScanRefer论文精读 3DVisual Grounding开山之作
  8. ios打开第三方地图app
  9. Neural Network模型复杂度之Dropout - Python实现
  10. Science Word丨快速创建各种数学、物理、化学图形,让老师的工作更轻松!