最近在一家公司实习,要求我在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实现后台播放相关推荐

  1. Android FFmpeg视频播放器三 音频封装格式解码播放

    Android FFmpeg视频播放器一解封装 Android Android FFmpeg视频播放器二 视频封装格式解码播放 视频解封装之后就会得到音频流和视频流,解封状得到的数据是AVPackag ...

  2. 基于开源网易云API+Flutter写的一款音乐播放器

    历时2个多月,基于开源网易云API的一款使用Flutter开发的桌面音乐程序终于完成了它的第一个版本v1.0.0

  3. 基于开源网易云API+Flutter写的一款音乐播放器(二)

    历时2个多月,基于开源网易云API的一款使用Flutter开发的桌面音乐程序终于完成了它的第一个版本v1.0.0

  4. 高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: 项目下载地址 https://github.com/PangHaHa12138/MusicPlayerdemo 闪屏 扫描本地音乐 播放 仿探探 仿 ...

  5. 有没有java自编歌曲,高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: p1.png p2.png p3.png p4.png p5.png p6.png 项目下载地址 闪屏 1.gif 扫描本地音乐 3.gif 播放 ...

  6. html5+php视频播放器,整理5款html5网页播放器,总有一款适合你吧

    整理了5款html5网页播放器,总有一款适合你吧. 酷播云HTML5倍速功能视频播放器 介绍: 重要提示:本播放器为酷播云在线产品,用户可以免费注册使用,下载包仅提供代码使用示例及演示,并非播放器的下 ...

  7. 『Python』网易云音乐API爬虫(音乐搜索音乐播放)

    前言 永远相信美好的事情即将发生 背景 一直想做一个在线的音乐播放器,这个想法最早可以追溯到做毕设的那会,那时候做了个在线的商城系统, 里面有个在线听歌的模块,其实就是调用大佬们封装好的API进行搜索 ...

  8. Qt FFmpeg视频播放器开发(八):播放器UI改造、高仿QQ影音

      最近把播放器项目进行了更新,决定参照QQ影音的界面进行实现,我现在的实现如下:   下图是真实的QQ影音   相比QQ影音界面,我的实现有一定的差距,主要是控件的配色,以及中间那个动态图,由于没有 ...

  9. 保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能

    由于项目中所使用的场景,除了直播和回放,还有一个就是简单的课程资源播放器,然后取出整体的冗余,使用一个较为简单播放器来进行播放操作.保利威直播的demo和开发文档,在实际调试过程中,让人非常头疼,在g ...

最新文章

  1. java中普通代码块,构造代码块,静态代码块的区别及代码示例
  2. 多线程断点下载开发总结(二)- 多线程写文件
  3. 【OO学习】OO第四单元作业总结及OO课程总结
  4. UI设计十戒--设计师的艺术
  5. virtualbox - 2台虚拟机之间通过ssh互访
  6. 我学习Python的三个神级网站
  7. invoke方法是做啥的_使用 NLog 给 Asp.Net Core 做请求监控
  8. android 的wifi定位
  9. 解决Intellij IDEA运行报Command line is too long的问题
  10. stats | 线性回归(一)——模型表达式和输出结果
  11. 森林病虫害高光谱遥感监测的研究进展
  12. 铁大Facebook——十天冲刺(4)
  13. Android小白关于Activity,Fragment,Adapter之间传值的一些记录
  14. GlusterFS简单环境部署
  15. 三张图片无缝合成一张图片_在PS中如何将两张图片无缝拼接?
  16. 户外运动手持GPS设备常识汇总
  17. 护理管理学复习题及参考答案
  18. 高中数学怎么学好我的数学学习方法
  19. 基于单层决策树的adaBoost算法思想分析和源代码解析
  20. 汇编语言(王爽版)实验一

热门文章

  1. 微信签到积分换卷小程序(完整前后台)
  2. 微信小程序分析送积分功能如何实现_微信小程序积分商城该怎么进行操作?
  3. 【7047】北京游:知乎、百度、豆瓣、新浪微博
  4. [20180823]IMU与db link.txt
  5. 《奋斗》中徐志森的财商课
  6. 支持十亿级密态数据、低代码,蚂蚁集团发布隐语开放平台
  7. Python中的len()函数如何使用?
  8. 《王者荣耀》突然停运?看到官方公告直接傻眼……
  9. 2021-12-17
  10. Phi-divergence