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. http协议与tcp协议的理解

    1.区别 tcp协议是对应于传输层,http协议是对应于应用层,从本质上来说,二者是没有可比性的.http协议是建立在tcp协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发送一次http请 ...

  2. #Cisco——配置链路聚合

    Cisco--配置链路聚合 一.什么是链路聚合. 链路聚合(英语:Link Aggregation)是一个计算机网络术语,指将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端 ...

  3. vue项目打包后的文件如何在本地访问

    你是不是一直存在个困惑?vue项目build出来的dist文件夹下index.html直接点开始控制台一顿报错.今天咱就给他治服. 解决方案就是本地启动一个node服务.详细步骤如下: 创建项目 np ...

  4. nvm安装及使用(windon/mac)

    有必要说一下nvm,因为大家做前端对node都很熟悉吧.前端的很多项目中都依赖node,还有可能每个项目依赖的node版本不一样,这样我们就上了nvm. nvm 是node Version Manag ...

  5. 086_Service Cloud

    最近一个Call Center的项目刚刚开始,使用的是Sales Cloud + Service Cloud 首先在sfdc上配置一个 call center等一些电话服务的url 安装一个CTI , ...

  6. PostgreSQL权限管理

    一旦一个对象被创建,它会被分配一个所有者.所有者通常是执行创建语句的角色.对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情.为了允许其他角色使用它,必须分配权限. 1 ...

  7. SpringMVC的学习day01

    什么是SpringMVC 基于狂神说SpringMVC课程的学习 前面已经学习了spring.javaSE.javaweb.mybatis等知识,今天开始学习springMVC,是ssm框架的最后一个 ...

  8. linux中用crontab定时任务启动jar无效

    修改前脚本内容如下: #!/bin/bash nohup java -Xms512m -Xmx512m -jar /opt/jar/xx-0.0.1-SNAPSHOT.jar & 检查了各方面 ...

  9. vue3 门户网站搭建8-字体

    浏览器默认的可选字体比较少,如果没有合适的则需要额外下载并引入. 一般使用 开源字体即可,商用需要花钱~ 将下载好的 ttf 格式字体放入项目下文件夹: 样式文件中增加配置:(main.css) 即可 ...

  10. 使用nodejs中遇到的问题

    1.post请求必须使用express的一个中间件body-parser一下不然req.body会一直为空 2.node.js这种东西后端跨域就行,前端就别跨域了,不然会一直报错 3.sql语句那个s ...