首页 > 其他分享 >系统播放器 MediaPlayer

系统播放器 MediaPlayer

时间:2024-09-16 21:14:12浏览次数:8  
标签:播放器 状态 调用 MediaPlayer 系统 Paused 方法

MediaPlayer 是 Android 中的一个多媒体播放类,我们可以通过它控制音视频流或本地音视频资源的播放过程。

状态图和生命周期

MediaPlayer 类主要的状态如下:

  • Idle
  • End
  • Error
  • Initialized
  • Prepare
  • Preparing
  • Started
  • Paused
  • Stopped
  • PlaybackCompleted

Media 的状态周期如下:

从图中可以看到 MediaPlayer 有以下一些状态。

Idle 和 End

MediaPlayer 创建示例或者调用 reset 函数后,播放器就被创建了,此时播放器处于 Idle(就绪)状态,调用 release 后就会变成 End(结束)状态,在这两种状态之间就是 MediaPlayer 的生命周期。

Error

在构造一个新 MediaPlayer,上层 APP 调用 getCurrentPosition、getVideoHeight、getDuration、getVideoWidth、setAudioStreamType(int)、setLooping(boolean)、setVolume(float, float)、pause、start、stop、seekTo(int)、prepare、prepareAsync 这些方法会出错。如果调用 reset 方法再调用它们,用户提供的回调方法 one rrorListener.OnError,MediaPlayer 的状态会到 Error(错误)状态。所以,一旦不再使用 MediaPlayer,就需要调用 release 方法,以便 MediaPlayer 资源得到合理释放。

Initialized

当调用 setDataSource 方法时,MediaPlayer 状态会变成 Initialized(初始化)状态,如果 setDataSource 方法在非 Idle 状态时调用,会抛出 IllegalStateException 异常。

Prepared

MediaPlayer 有两种途径到达 Prepared 状态,一种是同步方式,另一种是异步方式。同步方式主要使用本地音视频文件,异步方式主要使用网络数据,需要缓冲数据。调用 prepare(同步方法)将传递 MediaPlayer 的 Initalized 的状态变为 Prepared 状态,或者调用 prepareAsync(异步方法)将传递的 MediaPlayer 的 Initialized 状态变为 Preparing 状态,最后到 Prepared 状态。注意,Preparing 是一个瞬时状态(时间比较短)。

Started

在 MediaPlayer 进入 Prepared 状态后,上层应用即可设置一些属性,如音视频的音量、screenOnWhilePlaying、looping 等。在播放控制开始之前,必须调用 start 方法并成功返回,MediaPlayer 的状态开始由 Prepared 转为 Started。当处于 Started 状态时,如果用户事先注册过 setOnBufferingUpdateListener,播放器内部会开始回调 OnBufferingUpdateListener.OnBufferingUpdate,这个回调方法主要使应用程序保持跟踪音视频流的 buffering(缓冲)status,如果 MediaPlayer 处于 Started 状态,再调用 start 方法是没有任何作用的。

Paused

MediaPlayer 在播放控制时可以是 Paused(暂停)和 Stopped(停止)状态的,且当前的播放进度可以被调整,当调用 MediaPlayer.pause 方法时,MediaPlayer 开始由 Started 状态变成 Paused 状态,这个过程是瞬间的,反之,在播放器内部是异步过程的。在状态更新并调用 isPlaying 方法前,将有一些耗时。已经缓冲过的数据流也要耗费数秒。

当 Start 函数从 Paused 状态恢复过来时,playback 恢复之前暂停的位置,接着开始播放,这时 MediaPlayer 的 Paused 状态又变成 Started 状态。如果 MediaPlayer 已经处于 Paused 状态,这时再调用 pause 方法是没有任何作用的,将保持 Paused 状态。

Stopped

当调用 stop 方法时,MediaPlayer 无论处于 Started、Paused、Prepared 或 PlaybackCompleted 中的哪一种状态,都将进入 Stopped 状态。一旦处于 Stopped 状态,playback 将不能开始,直到重新调用 prepare 或 prepareAsync 方法,且处于 Prepared 状态时才可以开始。

如果 MediaPlayer 已经处于 Stopped 状态了,这时再调用 stop 方法是没有任何作用的,将保持 Stopped 状态。

在 seek 操作完成后,如果事先在 MediaPlayer 注册了 setOnSeekCompleteListener,播放器内部将回调 OnSeekComplete.onSeekComplete 方法。当然 seekTo 方法也可以在其它状态下被调用,如 Prepared、Paused 及 PlaybackCompleted 状态。

PlaybackCompleted

当前播放位置可以通过 getCurrentPosition 方法获取,通过 getCurrentPosition 方法可以跟踪播放器的播放进度。当 MediaPlayer 播放到数据流的末尾时,一次播放完成,在 MediaPlayer 中事先调用 setLooping(boolean)并设置为 true,表示循环播放。MediaPlayer 依然处于 Started 状态。如果用 setLooping(boolean) 并设置为 false(不循环播放),播放器内部将回调 onCompletion.onCompletion 方法,这就表明 MediaPlayer 开始进入 PlaybackCompleted(播放完成)状态。当处于 PlaybackCompleted 状态时,调用 start 方法,将重启播放器从头开始播放数据。

标签:播放器,状态,调用,MediaPlayer,系统,Paused,方法
From: https://www.cnblogs.com/code-qin/p/18416601

相关文章

  • 用户空间实现文件系统的接口FUSE(Filesystem in Userspace)API介绍
    FUSE(FilesysteminUserspace)API是一种在用户空间实现文件系统的接口。一、FUSEAPI的作用它允许开发者在不修改内核代码的情况下,创建自定义的文件系统。通过FUSEAPI,你可以实现各种特殊用途的文件系统,比如网络文件系统、加密文件系统、虚拟文件系统等。二、工作原理用户空间程......
  • 学生选课系统(11457)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发......
  • 基于springboot的图书商城管理系统。Javaee项目,springboot项目。
    演示视频:基于springboot的图书商城管理系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Maven+Layui+Thymeleaf来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁......
  • Springboot宠物领养管理系统。Javaee项目。Springboot项目。
    演示视频:Springboot宠物领养管理系统。Javaee项目。Springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。系统......
  • 基于springboot的家庭理财管理系统。Javaee项目,springboot项目。
    演示视频:基于springboot的家庭理财管理系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Maven+Layui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。分为系统管理员,家主,用户三类身......
  • Springboot+vue汽车销售管理系统。Javaee项目,springboot vue前后端分离项目。
    演示视频:Springboot+vue汽车销售管理系统。Javaee项目,springbootvue前后端分离项目。系统介绍:本文设计了一个基于Springboot+vue的前后端分离的汽车销售管理系统,采用M(model)V(view)C(controller)三层体系结构,通过SpringBoot+Vue+maven+IDEA来实现。有经理和销售两种角......
  • GB28181在融合指挥调度系统应用方案探究和技术实现
    GB28181规范在融合指挥调度系统主要围绕实现视频监控系统的互联互通、音视频数据的实时传输与控制、以及应急指挥调度的高效性展开。一、GB28181规范概述GB/T28181是中国国家标准《安全防范视频监控联网系统信息传输、交换、控制技术要求》的编号,该标准规定了安全防范视频监控联网......
  • RTMP播放器的几种选择
    如何选择RTMP播放器?在选择RTMP播放器时,需要综合考虑多个因素,以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议:1.功能需求低延迟:对于直播场景,低延迟是非常重要的。选择支持低延迟播放的RTMP播放器,以确保观众能够实时看到主播推送端的内容......
  • 基于django+vue扶贫助农与产品合作系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当前全球减贫事业与乡村振兴战略的双重背景下,扶贫助农已成为推动社会经济均衡发展的重要途径。随着信息技术的飞速发展,互联网+农业模式......
  • 基于django+vue峰数公司医疗设备管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着医疗技术的飞速发展,医疗设备的种类与数量日益增多,成为医疗机构日常运营中不可或缺的重要组成部分。峰数公司,作为一家致力于提供高质量......