android 播放器封装,Android 播放器二次封装与实现
视频播放、音频播放在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 播放器二次封装与实现相关推荐
- Android 应用程序集成FaceBook 登录及二次封装
1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台 https://developers.facebook.com/ap ...
- Android 应用程序集成Google 登录及二次封装
谷歌登录API: https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...
- Android基于Glide的二次封装,借鉴Glide思想二次封装Fresco
最近封装了个 fresco 的组件库:dfresco,就顺便来讲讲. 背景 fresco 图片库很强大,我们项目中就是使用的 fresco,但有一点就是,不怎么好使用,略麻烦.不同项目中,多多少少都需 ...
- axios二次封装以及API接口统一管理
前端向服务器发送请求,使用的方法有很多: XMLHttpRequest.fetch.JQ.axios 1.axios二次封装 二次封装axios是为了请求拦截器.响应拦截器. 请求拦截器:可以在发送请 ...
- android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...
原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...
- Android应用开发--MP3音乐播放器代码实现(二)
2013年5月25日 简.美音乐播放器开发 小巫在这里罗列这个播放器已经实现的功能: 1. 自动显示音乐列表 2. 点击列表播放音乐 3. 长按列表弹出对话框 4. 暂停音乐 5. ...
- 基于Android的MediaPlayer的音乐播放器的封装
基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...
- android vitamio封装,Android视频框架Vitamio构建自己的通用播放器
Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...
- android 音乐视频播放器(github上十二款最著名的Android播放器开源项目)
1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...
- Android 音乐播放器的开发教程(二)反编译apk ----- 小达
Android 音乐播放器的开发教程(二)基本布局 在上一篇中简单的介绍了下小卷毛播放器的基本情况,现在就正式的开始一步一步的做播放器.首先想要一个漂亮的UI(不是我的这个...),就需要好的素材,没 ...
最新文章
- java 不可最小化,java – 这是最小化绑定失效的有效方法吗?
- java环境搭建_记一次阿里云服务器Java相关环境搭建的过程
- Vue.config.productionTip = false
- java文件替换一行数据_用Golang替换文件中的一行
- mysql 建表语句 stored as_Druid 解析Hive建表语句解析报错
- hibernate映射数据库表如何在不插入值的情况下使表中字段默认值生效
- IBM发布人工智能显微镜,可检测海洋水资源
- python在线编辑器-在线python编辑器
- Matlab之字符串的查找(findstr)与替换(strrep)
- MATLAB深度学习工具箱文档——trainingOptions函数的参数设置
- PC端微信全面的多开方法详解
- web 系统发展历程
- java判断子串重复_判断字符串是否是由子串重复多次构成
- javafx 教程_用JavaFX编写图块引擎
- 2021.9.15 每日总结
- 屏幕进入省电模式计算机未输出,戴尔 U2719DC 显示器使用与故障处理指南
- 用Python求解线性规划问题
- STM32实现德飞莱LED滚动效果
- Web安全工具—WireShark使用(持续更新)
- 数据上采样和下采样_采样不足以配置您的ml数据