| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 【学习】从零开始的Android音视频开发(3)——MediaPlayer的prepare/prepareAsync流程和start流程 -> 正文阅读 |
|
[移动开发]【学习】从零开始的Android音视频开发(3)——MediaPlayer的prepare/prepareAsync流程和start流程 |
开始prepare后的流程在之前的流程中我们没有从MediaPlayer生态上认识各类库之间的依赖调用关系 MediaPlayer部分头文件在frameworks/base/include/media/目录中,这个目录和libmedia.so库源文件的目录frameworks/av/media/libmedia/相对应。主要头文件有 在运行的时候整个MediaPlayer可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用 在给播放器设置数据源且展现了Surface后,你应开始调用 prepare的执行过程我们可以看到它调用了 在网络流数据传入MediaPlayer时我们就要用prepareAsync函数了 除了最后一句 process_media_player_call中的 查看prepareAsync() 再查看prepareAsync_l() 再分析prepareAsync(),mp->prepareAsync对应的BnMediaPlayer操作如下 接着分析MediaPlayerService::Client::prepareAsync 这里调用了AwesomePlayer的prepareAsync函数(注意:AwesomePlayer只在老版本中存在。较新的版本中已不再使用它) 查看prepareAsync_l 首先判断 我们再回到java层中之前的prepare函数中的 它用于扫描内嵌字幕并进行跟踪,接下来看看MediaPlayer的start函数 从Paused状态变为Started状态,如果playback已经处于Stopped状态,或之前从来没有处于过Started状态,playback将会开始start 以上的stayAwake用于对屏幕进行操作 首先执行 flags类型1.PARTIAL_WAKE_LOCK保持CPU运转,屏幕和键盘灯有可能是关闭的 2.SCREEN_DIM_WAKE_LOCK保持CPU运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯 3.SCREEN_BRIGHT_WAKE_LOCK保持CPU运转,允许保持屏幕高亮显示,允许关闭键盘灯 4.FULL_WAKE_LOCK保持CPU运转,保持屏幕高亮显示,键盘灯保持亮度 5.ACQUIRE_CAUSES_WAKEUP正常唤醒锁实际上并不打开照明,相反,一旦打开它们会一直保持。当获得WakeLock时,这个标志会使屏幕或/和键盘立即打开。一个典型应用是可以立即看到对用户来说重要的通知 最后通过updateSurfaceScreenOn函数更新屏幕上的Surface 回到最上面的start函数中,再JNI中对应android_media_MediaPlayer_start函数 从MediaPlayer调用start函数开始,就进入了视频播放环节,最终到C++的mediaplayer.cpp中实现,我们先分析下mediaplayer.h。在其中实现了MediaPlayer的基本播放控制操作。另外一个类 可以发现调用start函数后底层返回了一个状态以便我们知道是否处于Started状态,这是需要用 接下来看看 pause函数其实和start函数流程类似,也是通过mp->pause()返回对应的状态,然后通知上层来暂停的 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 21:39:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |