Android音视频开发(2)常用的系统播放器MediaPlayer

2023-11-01

1.状态图及生命周期

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

它分为很多状态,如下图所示:

图中的单箭头弧代表同步函数调用,双箭头弧代表异步函数调用。

1.1 Idle状态、End状态以及生命周期

 Idle就绪态:MediaPlayer创建实例或调用reset函数后,播放器被创建所处的状态。

End结束态:调用release函数后,编程End状态。

生命周期:Idle就绪态到End结束态的整个过程。

1.2 Error状态

Error状态:触发回调机制,调用程序出错时,根据回调函数将状态触发到Error状态,一旦不适用MediaPlayer,就需要调用release函数,以便释放。

                   为了重新使用MediaPlayer,调用reset函数,会恢复到Idle状态,所以要设置错误监听,可从播放器内部返回的信息找到错误原因。

1.3 Initialized状态

Initialized状态:初始化状态,当调用setDataSource函数时,将Idle状态变为Initialized状态。若在非Idle状态调用会抛异常,当重载时也需要抛出2个异常。

1.4 Prepared状态

Prepare状态:分为2种方式。同步方式--本地音视频文件。异步方式--网络数据,需要缓冲数据。

1.5 Started状态

Started状态:在播放控制开始之前,必须调用start函数并成功返回,状态由Prepared变为Started状态。当处于Started状态时,若事先注册过setOnBufferingUpdateListener,内部会回调,主要保持跟踪音视频流的buffering status。

1.6 Paused状态

Paused状态:为暂停状态,调用MediaPlayer.pause函数时,状态由started变为Paused状态。这个状态是瞬间的。

1.7 Stopped状态

Stopped状态:调用stop函数时,都将进入Stopped状态,无论处于何种状态。一旦Stopped,playback不能开始,直到重新调用prepare或prepareAsync函数,且处于Prepared状态才开始。

1.8 PlaybackCompleted状态

PlaybackCompleted状态:当前播放的位置可通过getCurrentPosition函数获取,setLooping为true,表示循环播放。依然处于started状态。

今天就先了解这些基本的音视频开发的流程。接下来的会进行代码编写学习分析,更加深入的理解整个过程。我们下个博客见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android音视频开发(2)常用的系统播放器MediaPlayer 的相关文章

随机推荐

  • Zerotier 搭建手册(含Moon节点)

    一 前言 没有申请到公网IP 内网穿透只好选用zerotier 好处就是P2P端点的带宽 不受云服务器和FRP带宽限制 打算用zerotier组建了笔记本 NAS 手机三个端 满足NAS在IPV4大内网环境下的相互访问 zerotier主服
  • mysql-5.0.24a-win32.zip_go.sum · skymysky/Nightingale - Gitee.com

    bazil org fuse v0 0 0 20160811212531 371fbbdaa898 go mod h1 Xbm BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8 cloud google com
  • C++ ifstream open 读取txt文件出现中文乱码的解决方法

    由于编解码的问题 txt读写会出现中文乱码 打开txt文件 点另存为 可看到编码方式有 编码方式为UTF 8时 会出现中文乱码 将编码方式换为ANSI时 问题解决
  • spring boot的两种部署方式

    spring boot的两种部署方式 文章目录 spring boot的两种部署方式 前言 一 jar包部署 二 war包部署 jar包和war包方式对比 前言 springboot的打包方式有很多种 有打成war的 有打成jar的 也有直
  • 使用Matlab设计数字滤波器,从原理到代码

    目录 0 前言 1 数字滤波器的设计方法概述 2 IIR数字滤波器的设计方法 2 1 模拟滤波器设计 2 1 1 巴特沃斯滤波器设计 2 1 2 切比雪夫滤波器设计 2 1 3 椭圆滤波器设计 2 2 模拟滤波器转数字滤波器 2 2 1 冲
  • 【Android】Android6.0+ 动态申请权限

    Android 6 0 SDK 版本号大于23后 对于普通权限可以在AndroidMinifest xml文件中可以直接使用 而对于那些危险权限 如 定位权限 通话 发送短信等 需要动态申请权限 下面是一个通过高德定位的案例 MainAct
  • request对象对请求体,请求头参数的解析

    1 请求体参数解析 1 1 GET请求 1 1 1 请求url中 xxx xxx格式为查询字符串参数 通过request GET获取请求参数 1 1 2 请求url中 xxx 2 xxx格式为路径参数 通过request GET获取 1 1
  • IDEA常用配置之双斜杠注释紧跟代码头

    文章目录 双斜杠注释改成紧跟代码头 双斜杠注释改成紧跟代码头
  • qRegisterMetaType-Qt中注册定义类型

    概述 如果想要我们自己自定义的类型也可以有 Qt 自己类型的功能的话 就必须注册我们的类型到 Qt 中 这样才可以在信号和槽的通讯机制中使用我们的自定义的类型 Q DECLARE METATYPE 被 Q DECLARE METATYPEQ
  • QMetaObject::connectSlotsByName: No matching signal for问题的解决方法

    之前是用转到槽的方式添加信号回调 现在发现结构混乱 改为手动connect 删掉之前的回调函数后 再编译 找到报错的地方 删除case 然后自己添加connect 注意此时代码运行会报 QMetaObject connectSlotsByN
  • java二维码工具类,中间带LOGO的,很强大 .

    java view plain copy print package com util cccm import java awt BasicStroke import java awt Graphics import java awt Gr
  • GAMES101-现代计算机图形学学习笔记(作业06)

    参考 https blog csdn net qq 36242312 article details 115495482 思路 上节课的代码 void Renderer Render const Scene scene std vector
  • Vue 核心插件 Vuex (一)

    目录 Vuex 是什么 Vuex 使用场景 Vuex的优势 Vuex的安装和使用 Vuex的安装 Vuex的配置使用 Vuex 是什么 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 库 它采用集中式存储管理应用的所有组件的
  • citespace的操作流程

    1 下载citespace 下载成功的前提是必须要有Java 参照网上的下载流程 建议bilibili上查看 2 打开citespace 1 2 选择keep using this version 3 弹出来窗口 选择Agree 一般是会弹
  • R语言中的管道操作

    前言 使用R语言进行数据处理是非常方便的 几行代码就可以完成很复杂的操作 但是 对于数据的连续处理 还是有人觉得代码不好看 要么是长长的函数嵌套调用 有点像Lisp感觉 括号包一切 要么就是每次操作赋值一个临时变量 啰嗦 为什么就不能像Li
  • Ubuntu Linux 解压 压缩 目录 .tar.xz .tgz .tar.gz .tar.bz2 .7z

    压缩 tar zcvf file tgz dir dir 是待压缩的目录 解压7z 7z x file 7z 安装7z sudo apt get install p7zip full 解压tar bz2 tar jxvf file tar
  • 配置Ubuntu初始使用软件——Ubuntu_install

    1 配置网络clash 复制clash文件 到主目录下 进入终端 cd clash chmod x clash clash d 再进入设置 设置代理 2 配置输入法 进入终端 安装fcitx sudo apt get install y f
  • python人工智能:命令行创建数据库(泉舟时代)

    1 授课 林德尧 泉舟时代 未来城市技术总监 2 主要文章内容 mysql uroot p create database xxx charset utf8 数据迁移 Flask migrate 官方链接 https flask migra
  • 数据的封装与解封装

    数据的封装与解封装 一 数据的封装与解封装 1 数据的封装过程 2 数据的解封装过程 二 数据的传输过程 1 相关概念 2 网络传输过程中数据封装和解封装模拟 一 数据的封装与解封装 1 数据的封装过程 数据封装过程 在这里我们举例说明 以
  • Android音视频开发(2)常用的系统播放器MediaPlayer

    1 状态图及生命周期 MediaPlayer是一个多媒体播放类 通过它控制音视频流或本地音视频资源的播放过程 它分为很多状态 如下图所示 图中的单箭头弧代表同步函数调用 双箭头弧代表异步函数调用 1 1 Idle状态 End状态以及生命周期