视频播放、音频播放在Android平台的应用非常广泛,最近正好学习研究了一下播放器层面的Android实现,

对底层播放器做了二次的封装,主要进行的工作如下:

§ 主要实现

1、播放控制(1)简化播放接口处理

(2)增加一些友好型播控接口:快退、快进、重新播放等。

(3)单视频、多视频列表播放

2、播放状态(1)播放状态控制

(2)播放状态调用时及时反馈

(3)较全的播放信息,通过回调接口隔时通知

(4)视频缓冲动画自动处理

(5)播放显示画面尺寸、位置自由设定

(6)播放HTTP源时,支持Headers设置

(7)增加快退、快进开关

3、其他(1)音量控制

(2)视频源广告支持

4、待补充完善(1)资源单独进行预加载

§ MediaPlayer状态机参考

§ 主要结构设计

1、主要接口

IPlayController:负责播放控制

IPlayerUI:负责播放控制的UI处理

IPlaySetter:负责播放控制的参数设置

IPlayerEventListener:播放回调事件通知接口

MediaPlayerEvent:播放事件载体

2、适配、分发、通知线程

MediaPlayerAdapter:原生态播放器适配

NotifyEventThread:回调通知监听线程

PlayDispatcher:播放器外观分发处理

3、构造、处理、状态

PlayerBuilder:构造播放器基础信息,用户接口

PlayerHandler:主线程操作处理

StatusCommander:播放控制命令状态处理

VolumeController:音量控制处理

4、外观、状态、UI

WMediaPlayer:播放器外观层

PlayContext:播放器上下文

StatusResolver:播放器实时状态信息

UIHandler:负责UI效果处理

§ 源码下载

为方便需要的朋友进一步的进行定制,先将实现的代码提供给大家,附带了DEMO示例。点击下载

部分示例代码:

public class MainActivity extends Activity implements OnClickListener {

public static final String playUrl = "/mnt/sdcard/test.mp4";

private WMediaPlayer player = new WMediaPlayer();

private SurfaceView sv = null;

private TextView txtStatus;

private SeekBar seekbar = null;

private ProgressBar progressBar = null;

private Button btnPlay, btnPause, btnUnPause, btnStop, btnReplay,

btnVolume, btnStatus, btnClose, btnSeekUp, btnSeekDown, btnLoad;

private int volume = 1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

// Intent it = new Intent(getBaseContext(), PlayerActivity.class);

// startActivity(it);

sv = (SurfaceView) findViewById(R.id.surfaceView1);

SurfaceHolder sh = sv.getHolder();

sh.addCallback(sc);

}

private SurfaceHolder.Callback sc = new SurfaceHolder.Callback() {

@Override

public void surfaceCreated(SurfaceHolder holder) {

// test

PlayerBuilder builder = PlayerBuilder.getInstance();

builder.setContext(getBaseContext());

builder.setSurfaceView(sv);

// builder.setVolumeBar(seekbar);

builder.setVolumeBar(progressBar);

builder.setLoadingAnim(LoadAnimType.Animation, R.anim.loads_redload);

builder.setEventListener(eventListener);

player.setBuilder(builder);

player.setPlayUrl(playUrl);

// player.setPlayList();

player.play();

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

}

};

IPlayerEventListener eventListener = new IPlayerEventListener() {

@Override

public void onMediaPlayerEvent(MediaPlayerEvent event) {

}

};

@Override

protected void onDestroy() {

player.destroy();

super.onDestroy();

}

@Override

public void onClick(View v) {

int id = v.getId();

switch (id) {

case R.id.btnPlay:

player.play();

break;

case R.id.btnPause:

player.pause();

break;

case R.id.btnUnPause:

player.unpause();

break;

case R.id.btnStop:

player.stop();

break;

case R.id.btnClose:

player.close();

break;

case R.id.btnReplay:

player.replay();

break;

case R.id.btnSeekUp:

player.seek(player.getStatusResolver().getCurTime() + 30);

break;

case R.id.btnSeekDown:

player.seek(player.getStatusResolver().getCurTime() - 30);

break;

case R.id.btnVolume:

volume++;

player.getVolumeController().setVolume(volume);

// player.getPlayer().setVolume(0.5f, 0.5f);

break;

case R.id.btnStatus:

String status = Utils.gson.toJson(player.getStatusResolver());

txtStatus.setText(status);

break;

case R.id.btnLoad:

UIHandler.getInstance()

.showLoading(

PlayerBuilder.getInstance().getPlayContext()

.getAnimResId());

break;

default:

break;

}

}

android 播放器封装,Android 播放器二次封装与实现相关推荐

  1. Android 应用程序集成FaceBook 登录及二次封装

    1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台  https://developers.facebook.com/ap ...

  2. Android 应用程序集成Google 登录及二次封装

    谷歌登录API:  https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...

  3. Android基于Glide的二次封装,借鉴Glide思想二次封装Fresco

    最近封装了个 fresco 的组件库:dfresco,就顺便来讲讲. 背景 fresco 图片库很强大,我们项目中就是使用的 fresco,但有一点就是,不怎么好使用,略麻烦.不同项目中,多多少少都需 ...

  4. axios二次封装以及API接口统一管理

    前端向服务器发送请求,使用的方法有很多: XMLHttpRequest.fetch.JQ.axios 1.axios二次封装 二次封装axios是为了请求拦截器.响应拦截器. 请求拦截器:可以在发送请 ...

  5. android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...

    原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...

  6. Android应用开发--MP3音乐播放器代码实现(二)

    2013年5月25日 简.美音乐播放器开发 小巫在这里罗列这个播放器已经实现的功能: 1.   自动显示音乐列表 2.   点击列表播放音乐 3.   长按列表弹出对话框 4.   暂停音乐 5.   ...

  7. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  8. android vitamio封装,Android视频框架Vitamio构建自己的通用播放器

    Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...

  9. android 音乐视频播放器(github上十二款最著名的Android播放器开源项目)

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  10. Android 音乐播放器的开发教程(二)反编译apk ----- 小达

    Android 音乐播放器的开发教程(二)基本布局 在上一篇中简单的介绍了下小卷毛播放器的基本情况,现在就正式的开始一步一步的做播放器.首先想要一个漂亮的UI(不是我的这个...),就需要好的素材,没 ...

最新文章

  1. java 不可最小化,java – 这是最小化绑定失效的有效方法吗?
  2. java环境搭建_记一次阿里云服务器Java相关环境搭建的过程
  3. Vue.config.productionTip = false
  4. java文件替换一行数据_用Golang替换文件中的一行
  5. mysql 建表语句 stored as_Druid 解析Hive建表语句解析报错
  6. hibernate映射数据库表如何在不插入值的情况下使表中字段默认值生效
  7. IBM发布人工智能显微镜,可检测海洋水资源
  8. python在线编辑器-在线python编辑器
  9. Matlab之字符串的查找(findstr)与替换(strrep)
  10. MATLAB深度学习工具箱文档——trainingOptions函数的参数设置
  11. PC端微信全面的多开方法详解
  12. web 系统发展历程
  13. java判断子串重复_判断字符串是否是由子串重复多次构成
  14. javafx 教程_用JavaFX编写图块引擎
  15. 2021.9.15 每日总结
  16. 屏幕进入省电模式计算机未输出,戴尔 U2719DC 显示器使用与故障处理指南
  17. 用Python求解线性规划问题
  18. STM32实现德飞莱LED滚动效果
  19. Web安全工具—WireShark使用(持续更新)
  20. 数据上采样和下采样_采样不足以配置您的ml数据

热门文章

  1. Processing 自动贪吃蛇脚本
  2. 你清楚搭建会员积分系统的目的吗?
  3. Python提取CSV数据统计四分位数
  4. Topic 18. 临床预测模型之缺失值插补方法
  5. Android重难点解析——面试中可能被问到的那些问题
  6. Cesium+百度街景浏览
  7. 牛客赛47 DongDong认亲戚(并查集+map)
  8. Matlab坐标变换篇
  9. LED背光源照明技术迅速发展
  10. 旋转木马图片效果图,轮播图