首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏QQ音乐技术团队的专栏

    OpenSL ES那些事

    与其他API一样,OpenSL ES的工作原理是采用回调机制。在OpenSL ES中,回调仅用于通知应用,新缓冲区可以排队(用于回放或录制)。 所以为了更好的返听效果,OpenSL ES是最合适的,主要原因是以下三点。 OpenSL ES使用的缓冲区队列机制,使其在Android媒体框架中更加高效。 of the OpenSL ES? 以下是OpenSL ES的初始化流程图。 ? 在OpenSL ES中所有的操作都是通过接口来完成,和java的接口类似,接口提供底层的方法调用。 OpenSL ES引擎初始化 OpenSL ES引擎初始化主要的点在于新建引擎对象连接JNI与底层交互,设置引擎的采样参数,包括采样平率,采样帧大小,采样声道以及采样深度,并且初始化音频数据的缓冲区队列

    6.1K80发布于 2018-01-31
  • 来自专栏构建FFmpeg Android播放器

    播放器基础--OpenSL ES音频播放

    标准 OpenSL ES 头文件 <SLES/OpenSLES.h> 和 <SLES/OpenSLES_Platform.h> 允许音频输入和输出。 如何在Android中使用OpenSL ES 在CMakeList.txt中添加OpenSL ES的引用 target_link_libraries( # Specifies the target library OpenSLES ) 添加必要的头文件 添加核心 OpenSL ES 功能集 OpenSLES.h 添加 OpenSL ES [Android 扩展] OpenSLES_Android.h OpenSL ES简单使用 使用OpenSL相关API的通用步骤是: 1,创建对象(通过带有create的函数) 2,初始化(通过Realize函数) 3,获取接口来使用相关功能(通过GetInterface 函数) OpenSL使用回调机制来访问音频IO,回调方法仅仅是告诉我们:BufferQueue已经就绪,可以接受/获取数据了 OpenSL使用SLBufferQueueItf.

    4.7K20发布于 2020-06-22
  • 来自专栏音视频修炼路

    Android OpenSL ES 介绍和开发流程(七)

    OpenSL ES是什么 OpenSL ES全称为Open Sound Library for Embedded Systems,即嵌入式音频加速标准。 OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速 API。 OpenSL ES主要功能 基本音频播放和录制。 3D音频效果,包括3D定位音频。 音乐体验增强效果,包括低音增强和环境混响。 缓冲队列。 OpenSL ES的对象和接口 OpenSL ES 有两个重要的概念 Object 和 Interface,“对象”和“接口”。 OpenSL ES常用接口 在OpenSL ES中所有的操作都是通过接口来完成,和java的接口类似,接口提供底层的方法调用。

    1.6K50发布于 2021-01-10
  • 来自专栏音视频修炼路

    Android OpenSL 录制 PCM 音频数据(八)

    前言 本章主要讲述如何通过Android OpenSL 实现录制 PCM 音频数据。开发流程回顾可以看下笔者前面发布过的文章。 开发准备 1.在Android studo下面建立工程,在使用OpenSL ES的API之前,首先需要引入CMakeLists.txt里面添加依赖库和链接库,代码如下: find_library( # SHARED native-lib.cpp ) OpenSL ES 录制 PCM 音频数据流程主要有如下: 1、 新建native-lib.cpp文件,

    1.4K60发布于 2021-01-10
  • 来自专栏字节流动

    音频采集:Android 基于 OpenSL ES 的实现

    前言 这篇文章简单介绍下移动端Android系统下利用OpenSL ES进行音频采集方法。 "/> OpenSL ES开发简介 什么是OpenSL ES OpenSL ES全称为Open Sound Library for Embedded Systems,即嵌入式音频加速标准。 OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速 API。 OpenSL ES架构原理 虽然OpenSL ES是基于C语言设计的API,但是其实基于对象和接口提供服务的,采用了面向对象的思想来开发API。 「PS」:对象可以有一个或者多个接口的实例,但是接口实例肯定只属于一个对象,以上就是OpenSL ES的开发理念。

    1.6K20发布于 2021-06-09
  • 来自专栏音视频修炼路

    Android OpenSL ES播放PCM 数据(九)

    前言 本章主要讲述如何通过Android OpenSL 实现播放 PCM 音频数据。 开发流程回顾可以看下笔者前面发布的文章 开发准备 1.在Android studo下面建立工程,在使用OpenSL ES的API之前,首先需要引入CMakeLists.txt里面添加依赖库和链接库,代码如下 SHARED native-lib.cpp ) OpenSL ES 的开发流程主要有如下: 1、 新建native-lib.cpp文件,然后引入头文件

    1.5K50发布于 2021-01-10
  • 来自专栏字节流动

    Android OpenSL ES 音频采集与播放

    本篇详细介绍一下基于 Android OpenSL ES 实现音频的采集与播放。 1. OpenSL ES 是什么? 在 Android 开发中,Google 官方从 Android 2.3 (API 9)开始,便支持了 OpenSL ES 标准 ,并且对其进行了扩展。 本文介绍的 OpenSL ES 是针对 Android NDK 开发来说。 2. OpenSL ES 的一些基本概念 基于 c 语言的面向对象接口 OpenSL ES 是基于 c 语言实现的,但其提供的接口是采用面向对象的方式实现,OpenSL ES 的大多数 API 是通过对象来调用的 对象的生命周期 OpenSL ES 的 Object 一般有三种状态,分别是:UNREALIZED (不可用),REALIZED(可用),SUSPENDED(挂起)。

    1.7K50发布于 2021-06-09
  • 来自专栏字节流动

    FFmpeg 开发(03):FFmpeg + OpenSL ES 实现音频解码播放

    ; } if(m_SwrContext) { swr_free(&m_SwrContext); m_SwrContext = nullptr; } 2 OpenSLES 播放音频 OpenSL OpenSL ES 是基于 c 语言实现的,但其提供的接口是采用面向对象的方式实现,OpenSL ES 的大多数 API 是通过对象来调用的。 Object 和 Interface OpenSL ES 中的两大基本概念,可以类比为 Java 中的对象和接口。 在 OpenSL ES 中, 每个 Object 可以存在一系列的 Interface ,并且为每个对象都提供了一系列的基本操作,如 Realize,GetState,Destroy 等。 dataSink, 1, interfaceIDs, requiredInterfaces ); SLDataSource 和 SLDataSink OpenSL

    1K20发布于 2020-07-13
  • 来自专栏android技术

    NDK--利用OpenSL ES实现播放FFmpeg解码后的音频流

    OpenSL ES全称为Open Sound Library for Embedded Systems。OpenSL ES是无授权费、跨平台、针对嵌入式系统 精心优化的硬件音频加速API。 为什么要使用OpenSL? 由于OpenSL系统底层本身就集成,我们只需要在CMakeLists中导入系统动态库就可以了。 封装成一个类 _opensl_helper.h // // Created by aruba on 2020/7/6. // #ifndef FFMPEGAPPLICATION_OPENSL_HELPER_H _opensl_helper.cpp // // Created by aruba on 2020/7/6. // #include "_opensl_helper.h" /** * 是否成功

    1.4K30发布于 2020-07-13
  • 来自专栏音视频开发之旅

    音视频开发之旅(36) -FFmpeg +OpenSL ES实现音频解码和播放

    OpenSL可以很好的解决此类问题,并且还有很多丰富的功能。下面我们一起来学习实践吧。 一、OpenSL ES基本介绍? 1.1 OPenSL ES 是什么? 1.2 OpenSL ES有哪些能力呐? 我们通过下图的OpenSL ES使用指南中可以看到支持,音频的播放、混音、音效、以及录制等功能。 二、OpenSL ES播放音频流程 图片来源: OpenSL-ES 官方文档 在CmakeList引入OpenSL库,然后在对应的CPP文件中导入相应的头文件即可使用OpenSL ES,具体流程如下 创建引擎对象 五、资料 OpenSL-ES 官方文档 NDK指南: OpenSL ES NDK指南demo:native-audio 是一个简单的音频录制器/播放器 音视频学习 (七) AudioTrack、OpenSL ES 音频渲染 FFmpeg 开发(03):FFmpeg + OpenSL ES 实现音频解码播放 android平台OpenSL ES播放PCM数据 Android通过OpenSL ES播放音频套路详解

    2.1K00发布于 2021-03-06
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】高性能音频简介 ( 高性能音频问题引入 | 使用场景 | 相关开发库及技术 )

    8.0 之后推出的 AAudio , 目前最新的 Oboe 兼容前两者 ; 开发层级 : 使用 Java 层的 API 是无法实现高性能音频的 , 必须使用 NDK 开发库才可以 , 上述讲的 OpenSL OpenSL ES : 该开发库符合 OpenSL ES™ API 规范 , 在 8.0 以下的系统中使用 , 使用 C/C++ 开发 ; 2. Oboe : 对上面两个 高性能音频开发库进行了封装 , 在 8.0 以上的系统中自动调用 AAudio 开发库 , 在 8.0 以下系统中调用 OpenSL ES 开发库 ; III 相关开发资料 - --- Android NDK 高性能音频官方文档 : https://developer.android.google.cn/ndk/guides/audio OpenSL ES 文档 : https ://www.khronos.org/registry/OpenSL-ES/specs/OpenSL_ES_Specification_1.1.pdf 示例代码 : ① OpenSL ES 官方示例 :

    67420编辑于 2023-03-27
  • 来自专栏猫哥的专栏

    【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】四、Android FFmpeg+OpenSL ES音频解码播放

    在 NDK 层,提供另一种播放音频的方法:OpenSL ES 。 什么是 OpenSL ES OpenSL ES (Open Sound Library for Embedded Systems)是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。 OpenSL ES 提供哪些功能 OpenSL 主要提供了录制和播放的功能,本文主讲播放功能。 播放源支持 PCM 、sdcard资源 、 res/assets资源 、 网络资源 。 OpenSL ES 状态机 OpenSL ES 是基于 C 语言开发的库,但是其接口是使用了面向对象的编程思想编写的,它的接口不能直接调用,而是要经过对象创建、初始化后,通过对象来调用。 OpenSL ES 播放初始化配置 来看一张官方的播放流程图 ? OpenSL ES 播放流程 这张图非常清晰的展示了 OpenSL ES 是如何运作的。

    1.9K30发布于 2020-05-27
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 函数库简介 ( Oboe 简介 | Oboe 特点 | Oboe 编译工具 | Oboe 相关文档 | Oboe 测试工具 )

    用于在 Android 平台中中构建高性能音频 ; ② 主要功能 : 让开发者使用一套 API , 就可以 跨 API 使用高性能音频 ; ③ 原理 : Android 的高性能音频框架有两个 , OpenSL ES 和 AAudio ; 但是 AAudio 只有在 Android 8.0 Oreo( API Level 26 ) 以上的 系统才可以使用 , 8.0 以下的系统只能使用 OpenSL ES ; ① 版本兼容 : 在 Android 4.1 Jelly Bean( API Level 16 ) 及以上版本的 Android 系统中运行 , 兼容 99\% 的 Android 设备 ; ② OpenSL ES : Android 4.1 Jelly Bean( API Level 16 ) 以上系统 , 使用 OpenSL ES 播放音频 ; ③ AAudio : Android 8.0 Oreo( Android 音频框架发展 : Android audio history 五、Oboe 测试 Oboe 测试 : ① Oboe 测试应用 : OboeTester 可用于测试 Oboe 各种特征 , OpenSL

    1.8K00编辑于 2023-03-28
  • 来自专栏Android技术专栏

    在Android开发中如何使用OpenSL ES库播放解码后的pcm音频文件?

    一.认识OpenSL ES   OpenSL ES的全称是Open Sound Library For Embedded Systems,即应用于嵌入式系统的开源音频库。 Android从2.3版本起就开始支持OpenSL ES标准了,并且通过NDK提供相应的API开发接口。 OpenSL ES有以下特性: 提供c语言接口,兼容c++,需要在NDK下开发,可以更好地集成于native应用 运行于native层,需要自己管理资源的申请和释放,没有Dalvik虚拟机垃圾回收机制 如果希望减少拷贝,开发更加高效的Android音频应用,则建议使用Android NDK提供的OpenSL ES API接口,它支持在native层直接处理音频数据。 原因尚未找到,可能是opensl es不支持32位浮点型位深吧。   

    2.1K10编辑于 2024-02-23
  • 来自专栏音频

    音视频基础能力之 Android 音频篇 (三):高性能音频采集

    NDK 中包含的 Opensl es 1.0.1 API 是 Khronos Group 为 Android 平台量身打造的一个版本。 es上一章节曾说过,通过 Opensl es 来实现音频采集会比较繁琐,繁琐的原因是因为 Opensl es 能做的事情比较多,所以在接口层面上设计会更优先考虑到拓展性和模块化。 所以,在接入 Opensl es 之前还是有必要先了解下它的编程模型。 专业的音频处理场景,不仅包括音频采集,还有各种音频处理,例如音效、均衡处理等,建议使用 Opensl es。 DAU 较大且对音频延迟要求较高的应用,建议 Opensl es 和 AAudio 混用,并自己完成音频采集回退机制。

    74310编辑于 2024-12-08
  • 来自专栏字节流动

    FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放

    ES 播放音频 OpenSL ES 全称为: Open Sound Library for Embedded Systems,是一个针对嵌入式系统的开放硬件音频加速库,支持音频的采集和播放,它提供了一套高性能 OpenSL ES 是基于 c 语言实现的,但其提供的接口是采用面向对象的方式实现,OpenSL ES 的大多数 API 是通过对象来调用的。 Object 和 Interface OpenSL ES 中的两大基本概念,可以类比为 Java 中的对象和接口。 在 OpenSL ES 中, 每个 Object 可以存在一系列的 Interface ,并且为每个对象都提供了一系列的基本操作,如 Realize,GetState,Destroy 等。 &dataSink, 1, interfaceIDs, requiredInterfaces ); SLDataSource 和 SLDataSink OpenSL

    1.4K40发布于 2020-07-10
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )

    Unspecified 未定义 : 根据当前 Android 系统版本自动选择 , Android 8.0 Oreo( API Level 26 ) 以上的系统使用 AAudio , 以下的系统使用 OpenSL ES ; OpenSL ES : 使用 OpenSL ES 播放器 ; AAudio : 使用 AAudio 播放器 ; 2 .

    2.8K00编辑于 2023-03-28
  • 来自专栏音视频修炼路

    音视频学习路线(二)

    demo和博客发布,其中包括的内容有: NDK 开发中 Native 与 Java 交互; Android NDK 开发中快速定位 crash 问题; Android NDK 编译方式; Android OpenSL 录制 PCM 音频数据; Android OpenSL 播放 PCM 数据; Android OpenGL 视频渲染 高级 学习音视频开源库FFmpeg的编译和使用 ,完成demo内容包括: Android

    1.4K70发布于 2021-01-03
  • 来自专栏码上就说

    关于声音采集和声音处理的一些建议

    最后的播放渲染使用的是OpenSL ES框架,也可以使用AudioTrack,不过核心代码都在native层,OpenSL ES方便一点。 OpenSL ES播放音频 解码之后的原始音频数据,需要播放渲染出来,Android上可以选择AudioTrack和OpenSL ES,我们这里使用的是OpenSL ES,Android引入OpenSL engineOptions[] = {{(SLuint32) SL_ENGINEOPTION_THREADSAFE, (SLuint32) SL_BOOLEAN_TRUE}}; /// 1.创建 OpenSL result = (*engine_object_)->Realize(engine_object_, SL_BOOLEAN_FALSE); RESULT_CHECK(result) /// 3.获取OpenSL

    2K20编辑于 2022-05-25
  • 来自专栏韩曙亮的移动开发专栏

    【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )

    一般情况下是 内置扬声器 ( 大 ) , 和 内置扬声器 ( 小 , 打电话通话时的扬声器 ) , 如果插上耳机 / 音箱 , 则出现第三个外接音频设备选项 ; 二、设置 Oboe 音频设备 ID ( OpenSL ES) 如果 Android 系统的版本低于 8.0 , 则默认使用 OpenSL ES 播放器 , 该播放器不能设置设备的 ID , 系统会自动选择默认的设备 ; 如果插拔 耳机/音箱 , 会自动进行切换 * * * Note that when using OpenSL ES, this will be ignored and the created * stream

    2.9K20编辑于 2023-03-29
领券