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;
}
}

surfaceview+mediaplayer的更多相关文章

  1. android下面使用SurfaceView+ mediaPlayer播放视频

    final SurfaceView surfaceView = new SurfaceView(StartupActivity.this); StartupActivity.this.mediaPla ...

  2. Android SurfaceView + MediaPlayer实现分段视频无缝播放

    Android当中实现视频播放的方式有两种,即:通过VideoView实现或者通过SurfaceView + MediaPlayer实现. 由浅至深,首先来看下想要在Android上播放一段视频,我们 ...

  3. Android几种视频播放方式,VideoView、SurfaceView+MediaPlayer、TextureView+MediaPlayer,以及主流视频播放器开源项目

    简单的说下一Android的几种视频播放功能: 1.VideoView:最简单的视频播放 <FrameLayout xmlns:android="http://schemas.andr ...

  4. Android中使用SurfaceView+MediaPlayer+自定义的MediaController实现自定义的视屏播放器

    效果图如下: (PS本来是要给大家穿gif动态图的,无奈太大了,没法上传) 功能实现:暂停,播放,快进,快退,全屏,退出全屏,等基本功能 实现的思路: 在主布局中放置一个SurfaceView,在Su ...

  5. SurfaceView+MediaPlayer播放视频

    SurfaceView拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行行绘制.又由于不占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不 ...

  6. android 全屏视频播放(SurfaceView + MediaPlayer)

    介绍个第三方: JieCaoVideoPlayer 实现Android的全屏视频播放,支持完全自定义UI.手势修改进度和音量.hls.rtsp,设置http头信息,也能在ListView.ViewPa ...

  7. MediaPlayer简单使用,绑定surfaceView实现播放视频的功能

    转载自 Android MediaPlayer使用方法简单介绍 播放音频 android中播放音频可以使用MediaPlayer类来实现,一下是它的一些方法: 方法名 功能描述 setDataSour ...

  8. android中使用surfaceview+MediaPlayer播放视频

    Android中播放视频主要有两种方式: 使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种方法 ...

  9. android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频

    1:videoview循环播放视频 1>xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res ...

  10. Android MediaPlayer和VideoView的使用

          MediaPlayer MediaPlayer类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频.它支持三种不同的媒体来源: 本地资源 内部 ...

随机推荐

  1. Matplotlib 轴标签和标题

    我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签. 实例 import numpy as np import matplotlib.pyplot as plt ...

  2. S-HR常用源码

    1.public static String getUserId(Context ctx) {        UserInfo userInfo = ContextUtil.getCurrentUse ...

  3. drf内容总结

    # 1 drf 入门规范 -前后端分离模式 -前后端混合 -postman -restful规范 -drf:django的app # 2 序列化类(重点) -Serializer -字段类 -字段参数 ...

  4. 杭电oj 偶数求和

    Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值 ...

  5. chatGPT搭建之旅

    昨天接到领导需求,要我搭建一个chatGPT玩玩,并给了一个链接地址:https://gitee.com/RockChin/QChatGPT 然后历经千辛万苦,熬了一宿终于搭建了,中途踩了各种大坑小坑 ...

  6. JS中两个数组对象筛选

    const arr1 = [ {id: 1, name: 'aaa'}, {id: 2, name: 'bbb'}, {id: 3, name: 'ccc'}, {id: 4, name: 'ddd' ...

  7. 网络图片转base64

    /**            * 网络图片转base64            * @param src            * @return            * @throws Excep ...

  8. golang windows程序获取管理员权限(UAC )

    在windows上执行有关系统设置命令的时候需要管理员权限才能操作,比如修改网卡的禁用.启用状态.双击执行是不能正确执行命令的,只有右键以管理员身份运行才能成功.为解决此问题,花了很长时间找了各种方法 ...

  9. 用 go 实现多线程下载器

    本篇文章我们用Go实现一个简单的多线程下载器. 1.多线程下载原理 通过判断下载文件链接返回头信息中的 Accept-Ranges 字段,如果为 bytes 则表示支持断点续传. 然后在请求头中设置 ...

  10. Ubuntu之root密码重置

    (1)系统开机时,连按或者长按shift键,出现GRUB界面,选择并进入"Ubuntu 高级选项",