平常开发中经常会遇到一些音视频播放的一些基础需求,做了这个框架目的是解决这一类需求,提高开发效率
音频播放,视频播放,文本播放
以音频播放为例(听歌)
小明想听歌了,于是拿出手机打开简单听app点了一首听妈妈的话,(听妈妈的话,别让她受伤)好听的音乐响起了,小明沉浸其中。刚听了1分钟,突然有人找小明,小明这时将音乐暂停去处理事情。做完事情之后,小明把手机拿出来点击继续播放 音乐从暂停的地方继续播放,音乐结束了小明换了一首歌 《死了都要爱》 小明想听高潮部分,于是滑动进度,一次一次试终于找到高潮部分 (死了都要爱,不淋漓尽致不痛快,感情多深 只有这样 才足够表白)哒哒哒电话来了,音频暂停了 挂断电话 音乐继续播放
操作行为:
状态:
涉及到UI的部分
接口|类组成
public interface IPodPlayer {
void play(String content);
void seekTo(int position);
void pause();
void resume();
void release();
void stop();
int getState();
void registerListener(PlayListener listener);
void unregisterListener();
interface PlayListener {
void onPlayProgress(long cur, long total);
void onPlayStart();
void onPlayStateChanged(int state);
void onPlayCompleted();
void onPlayError(int code, String message);
void onPlayBufferingUpdate(int percent);
}
}
public class PodPlayer {
private IPodPlayer mediaPlay;
private int mStreamType;
public PodPlayer(Context context) {
mediaPlay = PodMediaPlayer.getInstance(context);
}
public void start(int stream_type, String content) {}
public void seekTo(int position) {}
public void stop() {}
public void pause() { }
public void resume() { }
public int getState() { }
public void registerListener(IPodPlayer.PlayListener listener) { }
public void unRegisterListener() { }
public void release() { }
}
PodPlayer这里作为代理人角色只负责指派任务,目前代理人手里只有一个mediaPlay可以用
这样做的一个好处是:代理人只需要学习stream_type该应该交给谁来执行,后期如果有新的stream_type,代理只需要到市场招聘会这个stream_type人即可,自己不需要去学习stream_type的content如何执行
public class PodMediaPlayer implements IPodPlayer {
private MediaPlayer mMediaPlayer;
}
PodMediaPlayer实现了IPodPlayer接口(有播放的能力)说明PodMediaPlayer可以到PodPlayer代理人应聘工作了
PodMediaPlayer最近失业了,去了一家公司 面试 PodPlayer(面试官)说我这里差一个播放音频的活 问道PodMediaPlayer:“你会做stream_type(音频类型),content播放工作吗” ,PodMediaPlayer说到:我当然会呀,我做的很好,从来没出现意外。PodMediaPlayer大喜,明天来我这里报道!!
public interface IPod {
String getId();
String getTitle();
String getContent();
String getAuthor();
String getCover();
int getContentType();
long getDuration();
}
public class Playlist{
private static Playlist mInstance;
private Context context;
private PodPlayer podPlayer;
private ArrayList<OnPlayListListener> listeners;
private ArrayList<IPod> pods;
private IPod pod;
private int mLastPlayPosition = -1;
private PlayEntity mPlay = new PlayEntity();
private boolean isAppPause;
private Playlist(Context applicationContext) {}
public synchronized static Playlist getInstance(Context context) {}
public void buildPlaylist(ArrayList<? extends IPod> podcasts) { }
public void play() { }
public void play(int willPlayPosition) { }
public void seekTo(int percent) { }
private void startRead(int willPlayPosition, int lastPosition) { }
public void pause() { }
public void pause(boolean isAppPause) { }
public void checkAndResume() { }
public void resume() { }
public void stop() { }
public void forward(boolean isAuto) { }
public void forward() { }
private void reset() { }
public void backward() { }
public void release() { }
public int getState() { }
public void addOnPlayListListener(OnPlayListListener listener) { }
public void removeOnPlayListListener(OnPlayListListener listener) { }
public IPod getPlayPod() { }
public boolean isPlaying(String id) { }
public boolean isConnecting(String id) { }
public boolean contains(String id) { }
public long getPlayedDuration() { }
public long getTotalDuration() { }
public interface OnPlayListListener {
void onPlayStateChanged(String tag, int position, int state);
void onPlayProgressChanged(String tag, int position, long cur, long total);
void onPlayCompleted(String tag, int position);
void onPlayError(String tag, int position, int code, String message);
void onPlayBufferingChanged(String tag, int percent);
}
private void unLockWifi() {}
private void lockWifi() {}
}
播放市场部负责人来到PodPlayer(播放高管)面前,最近接了些播放的单子,最好两天之内完成这些播放任务。说着把播放的资料给到PodPlayer,可PodPlayer只认识stream_type,这些资料他也看不懂,PodPlayer把资料交给了他上司Playlist,Playlist看了下资料不符合播放规范 于是交给了小A加工处理, 小A处理了两分钟最终得到了IPod信息列表 Playlist跟PodPlayer说你现在可以执行播放任务了,Playlist拿了第一个IPod 跟PodPlayer说现在播放stream_type,content。PodPlayer拿到任务后,找到自己手下PodMediaPlayer给我播content。
Playlist->PodPlayer->PodMediaPlayer ,PodMediaPlayer对PodPlayer我做完了,PodPlayer对Playlist说我做完了,Playlist说继续下一个。
哒哒哒经过一段时间后任务终于做完了 Playlist对大家说辛苦大家了,晚上请大家吃饭
Playlist 专家
PodPlayer 高级开发
PodMediaPlayer 初级开发
Playlist做的工作:将任务资料交给小A,拿到处理后的资料,找到PodPlayer给我做这个事情
PodPlayer的工作:找到PodMediaPlayer 给我做这个事情,收到PodMediaPlayer做完后消息后,通知Playlist事情做完了
PodMediaPlayer工作:累死累活的把工作做完,通知PodPlayer做完了
干具体活的人报酬最少了,还累死累活哒
大家好好学习往上走才能越来越轻松,加油吧
憋大招,造轮子,加油!
power by stay4it