视频播放、音频播放在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;@Overrideprotected 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() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {// testPlayerBuilder 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();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}};IPlayerEventListener eventListener = new IPlayerEventListener() {@Overridepublic void onMediaPlayerEvent(MediaPlayerEvent event) {}};@Overrideprotected void onDestroy() {player.destroy();super.onDestroy();}@Overridepublic 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;}}

更多相关文章

  1. Android图片滚动,加入自动播放功能,使用自定义属性实现,霸气十足!
  2. Android(安卓)沉浸式状态栏(QQ5.0透明状态栏的效果)
  3. greenhand起步之Android音乐播放器最终版
  4. 【Android】多图选择器(支持图片预览 高效加载不怕OOM)
  5. Android(安卓)用SurfaceView+PLMediaPlayer 打造一个平板端的网
  6. Android(安卓)内功心法(1)——设计模式的原则和android中常用的
  7. 引导界面微场景交互设计与技术实现V1.0
  8. Android使用PowerImageView实现播放强大的ImageView动画效果
  9. Android中MVP模式实战版(一)

随机推荐

  1. cts测试流程
  2. android 模仿 弹性菜单
  3. 最强 Android Studio 使用小技巧和快捷键
  4. Ubuntu 14.04 配置 Android(安卓)sdk 开
  5. Android 采用PULL来解析XML
  6. Android中的AsyncTask原理
  7. 2010-03-03 传智播客—Android(五)数据存储
  8. android 游戏开发入门
  9. android 向数据库写入图片信息 读取图片
  10. Android 在TextView中加入多个点击文本区