Android 使用 MediaCodec API音频播放器
OpenMAX 有时缩写为“OMX”,是针对多媒体处理的免版税、跨平台的例程和接口集。它主要用于嵌入式设备,在设计时考虑了效率,因此可以以优化和受控的方式处理大量多媒体数据,包括视频/音频编解码器、图形等。
OpenMAX 提供三层接口:应用层(AL)、集成层(IL)和开发层(DL)。OpenMAX IL 是媒体框架之间的接口,例如 Android 上的 StageFright 或 MediaCodec API。更多关于这个here。
在 Android 16 中引入的 MediaCodec API 可用于访问低级媒体编解码器,即编码器/解码器组件,这是 Android 操作系统的一部分。这至少有三个原因:(1)我们可以访问高度优化的硬件加速编解码器例程,(2)我们避免许可复杂性(例如,AAC 需要 AAC 编解码器的所有制造商或开发商的专利许可,费用可通过以下方式避免)通过 MediaCodec 类使用内置的 AAC 编解码器)或 (3) 在标准化媒体编解码器中替换传统的计算热点(而不是为每个应用程序集成编解码器,只需使用内置的标准化版本)。
使用 MediaCodec 解码
鉴于内置编解码器种类繁多,新 API 的优点在于它允许您提供输入缓冲区并在输出缓冲区中获取结果只需几个步骤。通过这样做,您可以根据需要快速编码/解码。考虑到 OMX 使用专用硬件完成一些工作,这意味着提高速度,您无法获得比这更好的性能。
为了说明概念并提供一些示例代码以帮助您入门,假设我们需要为 AAC 和 MP3 音频文件构建一个媒体播放器,但我们想使用(免费)和(快速)嵌入式解码器。但此处提供的代码将适用于您的移动设备支持的多种格式。在我目前使用的那一款上,我可以轻松畅玩 Vorbis 和 WMA,开箱即用。如上所述,我们可以使用 MediaCodec API 完成所有这些工作。
起点是讨论 MediaCodec 的 SDK 页面。除此之外,我们还需要与几个类进行交互:MediaExtractor,用于从我们的编码数据(无论是在线流、本地文件还是嵌入式资源)中读取字节。有MediaFormat,用于读取编码文件的类型以及与内容本身相关的所有细节。请记住,本文的目的是演示如何构建 AudioPlayer,但 Android 16(或更高版本)提供的 API 也可用于制作视频播放器,只需遵循大致相同的步骤,并添加表面视图以显示帧。最后,将音频解码为 PCM,我们将要使用AudioTrackapi 来获取扬声器发出的实际声音。
音频播放器的架构
有几种方法可以实现音频播放器,但最终我们需要一个播放器类,接受音频数据源,一些命令,如开始、停止、暂停,并通过接口或处理程序提供事件,以通知我们在进步。播放可以在调用播放器对象的同一线程上同步完成,也可以在单独的线程上完成。通常后者是要走的路,但这取决于您的特定应用程序。
为方便起见,我将该软件设计为 Android 库项目,您可以轻松地将其包含在自己的工作中。该库名为 OpenMXPlayer。为了更接近我的实现的实际细节,这是一个功能图:
Android 使用 MediaCodec API音频播放器相关推荐
- android 音乐播放器mv播放功能,Android 音视频学习基础Android最简单的音频播放器| 神农笔记...
/* *最简单的基于FFmpeg的音频播放器 *Simplest FFmpeg Audio Player *本程序实现了音频的解码和播放. * */ #include #include extern ...
- Android MediaExtractor + MediaCodec构建简单播放器
对于一个播放器,基本上可以分为以下模块:数据接收(网络/本地)->解复用->音视频解码->音视频同步->音视频输出. 今天我们介绍Android系统中提供的两个播放器模块Med ...
- Android media ---- 1.7.ffmpeg 简单音频播放器
哎,喜欢偷懒,这边直接抄袭下雷神的代码.雷神是个值得敬佩的程序员. vs代码下载链接: https://pan.baidu.com/s/1c2dIuYk 密码:ld4b /* *最简单的基于FFmpe ...
- 使用MediaCodec+OpenSL编写简单的音频播放器
使用MediaCodec+OpenSL编写简单的音频播放器 前言 通过MediaCodec Native API 和OpenSL编写一个简单的音频播放器.可以解码并播放一个mp3文件. 流程 初始化 ...
- 【创新项目实训】Android移动开发教学app案例之音频播放器(二)
教学app案例之音频播放器(二) 一.开发环境 二.项目介绍 三.开始主界面 四.显示歌曲列表 五.播放音乐的服务 六.实现播放音乐 一.开发环境 软件环境: Android Studio 4.1.3 ...
- 视频教程-FFmpeg打造Android万能音频播放器-Android
FFmpeg打造Android万能音频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发.底层NDK开发等:有开源项目:ht ...
- 使用Web Speech API制作语音控制的音频播放器
/* For hiding / showing the extra block */ .sp_hiddenblock {margin: 2px;border: 1px solid rgb(250, 1 ...
- android 以音频播放器为例实现通知栏显示通知,并实现切歌、暂停、播放,并实现加载网络图片,并实现关闭第三方APP音频
首先先给大家看下效果 接下来我们看下具体如何实施 1.首先我们创建一个音频的单例对象,这样能保证每次在播放的的音频是唯一的(类名如:MediaPlayerUtil.java) package xxx; ...
- android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...
Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...
最新文章
- 如何设计一门语言(七)——闭包、lambda和interface
- 计算机里libcurl.dll,Update.exe系统错误 由于找不到libcurl.dll,无法继续执行代码。重新安装程序可能会解决此问题。 - Microsoft Community...
- 深度学习(28)随机梯度下降六: 多输出感知机梯度
- Android应用开发—知识点汇总
- HTTP请求和数据安全
- 开机自检BIOS语言详解
- 使用Ueditor点击上传图片时显示延迟的问题
- Angular - - ng-focus、ng-blur
- oracle存档模式,Oracle学习系列之如何开启归档模式
- Qt_ios使用本地资源图片
- RxJava:concat(连接)、 concatDelayError、 concatEager的使用
- 自建网易云音乐解锁代理
- 排队系统拥塞控制的位置
- 搭建Snipeit资产管理系统
- [高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题
- 生动化你的表达——DuerOS中的SSML应用
- Python Request POST 上传文件 Multipart/form-data
- 什么是等级保护----网络安全等级保护一级安全测评要求
- 掘金万亿母婴市场,宝宝树价值在哪里? | 一点财经
- 使用永中文档实现java在线预览Word,Excel,Pptx,Pdf
热门文章
- 5月6日LCAC第十三次会议重要信息摘取
- javaSE探赜索隐六(常用类API)
- 这两天比较火的量子科技是什么?
- android 全局换字体,Android 全局替换字体
- 便签 java_基于安卓Android的便签笔记APP设计(Android studio)
- ThingJS-X森可视平台框架源码 java+Netcore版本 旗舰版企业版
- Hack The Box - Meta 利用Exiftool远程代码执行漏洞获取webshell,ImageMagrick命令执行漏洞横向提权,更改环境配置SUDO纵向提权
- 手工转换中缀式与前、后缀式(转)
- 一款功能强大的开源excel在线表格
- OpenCV基础(7)OpenCV中的颜色空间