网易云视频播放器不使用Service实现后台播放
最近在一家公司实习,要求我在Android上找到播放器实现后台播放的方法,通过研究网易云视频中的播放器,我找到了其中的方法,虽然我觉得网易的方法有点取巧。
1. 问题描述
网易云视频播放器在播放过程中切换到后台,即按HOME键和锁屏时视频依旧在播放,用户可以听到声音。
2. 后台原理
2.1. HOME键
程序运行->按HOME键
Activity调用的顺序是onPause->onStop
SurfaceView调用了surfaceDestroyed方法
然后再切回程序
Activity调用的顺序是onRestart->onStart->onResume
SurfaceView调用了surfaceCreated->surfaceChanged方法
2.2. 锁屏
而对于锁屏,其执行流程则是:
Activity只调用onPause方法
解锁后Activity调用onResume方法
SurfaceView中surfaceholder.callback的所有方法都没有执行
3. 实现方法
3.1. 网易云视频后台播放
网易云视频播放器在不使用Service的情况下可以在软件解码下实现后台播放,主要利用了在SurfaceView调用surfaceDestory方法时,不释放mediaplayer资源。
3.2. 主要代码
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceHolder = null;
if (mMediaController != null) mMediaController.hide();
if (mMediaPlayer != null) {
if(mHardwareDecoder) {
mSeekWhenPrepared = mMediaPlayer.getCurrentPosition();
if (mMediaPlayer != null) {
mMediaPlayer.reset();
mMediaPlayer.release();
mMediaPlayer = null;
mCurrState = IDLE;
}
isBackground = true;
}
else if (!mPauseInBackground) {
mMediaPlayer.setDisplay(null);
isBackground = true;
}
else {
pause();
isBackground = true;
}
mNextState = RESUME;
}
}
};
当程序切换到后台时,会执行上面这段代码,由于选择的是软件解码mHardwareDecoder的值为false,所以直接跳到else if (!mPauseInBackground),也就使得mediaplayer资源不释放,从而实现了后台播放。
3.3. 在何时释放了mediaplayer资源
当Activity结束时会调用OnDestory,在此时释放资源。
@Override
protected void onDestroy() {
Log.d(TAG, "NEVideoPlayerActivity onDestroy");
mVideoView.release_resource();
super.onDestroy();
}
public void release_resource() {
if (mMediaPlayer != null) {
mMediaPlayer.reset();
mMediaPlayer.release();
mMediaPlayer = null;
mCurrState = IDLE;
}
}
网易云视频播放器不使用Service实现后台播放相关推荐
- Android FFmpeg视频播放器三 音频封装格式解码播放
Android FFmpeg视频播放器一解封装 Android Android FFmpeg视频播放器二 视频封装格式解码播放 视频解封装之后就会得到音频流和视频流,解封状得到的数据是AVPackag ...
- 基于开源网易云API+Flutter写的一款音乐播放器
历时2个多月,基于开源网易云API的一款使用Flutter开发的桌面音乐程序终于完成了它的第一个版本v1.0.0
- 基于开源网易云API+Flutter写的一款音乐播放器(二)
历时2个多月,基于开源网易云API的一款使用Flutter开发的桌面音乐程序终于完成了它的第一个版本v1.0.0
- 高仿网易云音乐一(可扫描本地音乐播放)
最近闲下来做了个仿网易云音乐的音乐播放器 效果图: 项目下载地址 https://github.com/PangHaHa12138/MusicPlayerdemo 闪屏 扫描本地音乐 播放 仿探探 仿 ...
- 有没有java自编歌曲,高仿网易云音乐一(可扫描本地音乐播放)
最近闲下来做了个仿网易云音乐的音乐播放器 效果图: p1.png p2.png p3.png p4.png p5.png p6.png 项目下载地址 闪屏 1.gif 扫描本地音乐 3.gif 播放 ...
- html5+php视频播放器,整理5款html5网页播放器,总有一款适合你吧
整理了5款html5网页播放器,总有一款适合你吧. 酷播云HTML5倍速功能视频播放器 介绍: 重要提示:本播放器为酷播云在线产品,用户可以免费注册使用,下载包仅提供代码使用示例及演示,并非播放器的下 ...
- 『Python』网易云音乐API爬虫(音乐搜索音乐播放)
前言 永远相信美好的事情即将发生 背景 一直想做一个在线的音乐播放器,这个想法最早可以追溯到做毕设的那会,那时候做了个在线的商城系统, 里面有个在线听歌的模块,其实就是调用大佬们封装好的API进行搜索 ...
- Qt FFmpeg视频播放器开发(八):播放器UI改造、高仿QQ影音
最近把播放器项目进行了更新,决定参照QQ影音的界面进行实现,我现在的实现如下: 下图是真实的QQ影音 相比QQ影音界面,我的实现有一定的差距,主要是控件的配色,以及中间那个动态图,由于没有 ...
- 保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能
由于项目中所使用的场景,除了直播和回放,还有一个就是简单的课程资源播放器,然后取出整体的冗余,使用一个较为简单播放器来进行播放操作.保利威直播的demo和开发文档,在实际调试过程中,让人非常头疼,在g ...
最新文章
- java中普通代码块,构造代码块,静态代码块的区别及代码示例
- 多线程断点下载开发总结(二)- 多线程写文件
- 【OO学习】OO第四单元作业总结及OO课程总结
- UI设计十戒--设计师的艺术
- virtualbox - 2台虚拟机之间通过ssh互访
- 我学习Python的三个神级网站
- invoke方法是做啥的_使用 NLog 给 Asp.Net Core 做请求监控
- android 的wifi定位
- 解决Intellij IDEA运行报Command line is too long的问题
- stats | 线性回归(一)——模型表达式和输出结果
- 森林病虫害高光谱遥感监测的研究进展
- 铁大Facebook——十天冲刺(4)
- Android小白关于Activity,Fragment,Adapter之间传值的一些记录
- GlusterFS简单环境部署
- 三张图片无缝合成一张图片_在PS中如何将两张图片无缝拼接?
- 户外运动手持GPS设备常识汇总
- 护理管理学复习题及参考答案
- 高中数学怎么学好我的数学学习方法
- 基于单层决策树的adaBoost算法思想分析和源代码解析
- 汇编语言(王爽版)实验一