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. [版本控制-Git]-git学习总结

    1.如何将本地的文件添加到已经建好的远程分支上: 1.1 本地文件夹内,右键-git bash - 创建新仓 git init 1.2 git remote add origin 远程仓库的githu ...

  2. Linux环境使用Docker安装GitLab

    系统环境: CentOS 7.6 64位(同样适用于Ubuntu) 安装步骤: 1.创建文件夹 /home/docker/gitlab/etc /home/docker/gitlab/log /hom ...

  3. 预览服务器上的html静态网页

    预览服务器上的html静态网页 远程服务器中html静态文件不方便直接查看 使用vscode快速预览远程服务器上的html静态文件 我遇到的场景: 我使用windows电脑办公,使用vscode的ss ...

  4. OpenStack 卷虚拟机跨租户迁移方案

    目标:迁移租户A的卷虚机到租户B 场景:使用卷虚拟机,租户a和b使用相同网络 租户A的操作: 1.记录虚拟机的ip地址,Mac信息, nova interface-list neutron port- ...

  5. <input>输入框,限制输入的为正整数

    <input id="eventId" col="EventId" type="text" class="form-cont ...

  6. Mac下配置Groovy

    官网:http://www.groovy-lang.org/ Step 1:下载Groovy 地址:https://groovy.apache.org/download.html 下载后解压 Step ...

  7. docker登录Ubuntu出现error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`的解决方法

    命令行登录docker时,在Ubuntu 18.04下可能会出现 error storing credentials - err: exit status 1, out: `Cannot autola ...

  8. IaaS--区域和可用区(何恺铎《深入浅出云计算》笔记整理)

    [关键概念] IaaS(Infrastructure as a Service):即"基础设施即服务",一般指云计算所提供的计算.存储.网络等基本底层能力.是基于软件技术对物理硬件 ...

  9. CAD专用卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件。

    CAD专用卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件.有的同学由于一些原因想把cad卸载掉然后重新安装,但是cad安装到一半就失败了或者显示已安装或者未完成,还有的同学会遇到" ...

  10. 《Rust权威指南》学习笔记——8.通用集合类型

    Rust通用集合类型 动态数组Vec 字符串String 和&str 哈希映射HashMap