Linux平台与安卓应用共享音频设备的方法及装置

文档序号:135079 发布日期:2021-10-22 浏览:45次 >En<

阅读说明:本技术 Linux平台与安卓应用共享音频设备的方法及装置 (Method and device for sharing audio equipment by Linux platform and android application ) 是由 温研 于 2021-07-13 设计创作,主要内容包括:本发明公开了Linux平台与安卓应用共享音频设备的方法及装置,通过在Android运行环境内基于AudioHAL架构设计实现了PulseAudio的Client,使运行于Android运行环境内的Android应用与运行于Linux系统内的应用同时使用Linux平台的音频硬件,从而有效提高了桌面平台上安卓应用使用的便利性,显著提升了用户体验。(The invention discloses a method and a device for sharing audio equipment by a Linux platform and an Android application, which realize the Client of pulseAudio by designing based on an AudioHAL architecture in an Android running environment, so that the Android application running in the Android running environment and the application running in the Linux system simultaneously use audio hardware of the Linux platform, thereby effectively improving the convenience of using the Android application on a desktop platform and remarkably improving the user experience.)

Linux平台与安卓应用共享音频设备的方法及装置

技术领域

本发明属于在桌面操作系统上运行移动应用的开发技术领域,具体涉及Linux平台与安卓应用共享音频设备的方法及装置。

背景技术

在Linux平台上运行安卓(Android)应用,通常采用在Linux平台上安装Android运行环境的方式,Android运行环境对丰富操作系统应用生态具有非常重要的意义。

现有Linux平台通常采用PulseAudio作为声音处理架构以统一处理来自不同应用程序的音频。PulseAudio是在GNOME或KDE等桌面环境中广泛使用的音频服务,它在内核音频组件(如ALSA、OSS)和应用程序之间充当代理的角色。PulseAudio基于C/S结构由一个服务器(Server)和多个客户端(Client)构成,其中,客户端是作为音源的应用程序的适配器,服务器负责将各客户端的音频输入混音后输出到音频硬件,客户端与服务器之间通过音频数据I/O文件进行通信。在Linux平台的典型音频处理方案中,用户需配置ALSA以使用PulseAudio提供的虚拟设备。

目前Android系统的音频架构主要包括应用层、基础架构层、支撑库层及硬件驱动层。其中,应用层是整个音频体系的最上层,主要包括音乐播放器、游戏软件等应用;基础架构层主要包括AudioManager、AudioFlinger及AudioHAL,AudioHAL(Audio HardwareAbstraction Layer)为音频硬件抽象层作为应用于底层硬件之间的“隔离板”保证了上层应用与底层硬件之间的兼容性,是AudioFlinger直接访问的对象;支撑库层为基础架构层所需要的库文件层;硬件驱动层为声卡的驱动程序层。

上述音频架构也是现有技术中Android运行环境所采用的音频架构,该架构不能与Linux平台所采用的PulseAudio架构兼容,所以,仍存在运行于现有Android运行环境内的Android应用不能与运行于Linux系统中的应用同时使用音频硬件输出声音的问题,这为用户操作带来了不便,降低了用户体验。

发明内容

有鉴于此,本发明提供了Linux平台与安卓应用共享音频设备的方法及装置,能够使运行于Android运行环境内的Android应用与运行于Linux系统内的应用同时使用Linux平台的音频硬件。

本发明提供的一种Linux平台与安卓应用共享音频设备的方法,具体包括以下步骤:

在Linux平台的容器中运行Android运行环境,所述Android运行环境中运行Android应用;在所述Android运行环境中,获取用户对所述Android应用的操作,根据所述操作形成控制指令;设置所述Android运行环境具有对所述Linux平台上的音频数据接口文件及音频服务的读写权限;

当所述控制指令为输出指令时,将所述控制指令及所述Android应用的音频数据A写入所述音频数据接口文件;所述音频服务读取并解析所述音频数据接口文件得到所述控制指令及音频数据A,将所述音频数据A输出到所述Linux平台的硬件音频设备中;

当所述控制指令为输入指令时,将所述控制指令写入所述音频数据接口文件;所述音频服务读取并解析所述音频数据接口文件得到所述控制指令,将所述Linux平台的硬件音频设备获取的音频数据B写入所述音频数据接口文件;所述Android应用读取所述音频数据接口文件获取所述音频数据B;

当所述控制指令为配置指令时,将所述控制指令及配置参数写入所述音频数据接口文件;所述音频服务读取并解析所述音频数据接口文件得到所述控制指令及配置参数,所述音频服务根据所述配置参数完成对所述硬件音频设备的配置。

进一步地,将所述Linux平台的PulseAudio Client及PulseAudio Client的依赖库迁移到所述Android运行环境的HAL层中,形成Android PAClient;所述AndroidPAClient实现了PulseAudio客户端接口。

进一步地,所述配置参数包括通道、输入流的采样频率。

本发明提供的一种Linux平台与安卓应用共享音频设备的装置,包括Android运行环境、虚拟音频客户端、虚拟音频共享服务器及虚拟音频通信单元;

所述Android运行环境,运行在Linux平台上的Android容器内,所述Android运行环境用于为Android应用提供运行环境;

所述虚拟音频客户端,位于所述Android运行环境的硬件抽象层HAL中,所述虚拟音频客户端实现了PulseAudio客户端接口;所述虚拟音频客户端用于获取用户对所述Android应用的操作,并根据所述操作形成控制指令;所述虚拟音频客户端用于根据所述控制指令将控制信息发送至所述虚拟音频通信单元,并从所述虚拟音频通信单元获取所述虚拟音频共享服务器返回的音频数据;所述虚拟音频客户端具有对所述虚拟音频共享服务器及虚拟音频通信单元的操作权限;

所述虚拟音频共享服务器,位于所述Android容器的Linux平台上,所述虚拟音频共享服务器通过调用Linux平台的ALSA接口与Linux平台的音频设备连接;所述虚拟音频共享服务器根据从所述虚拟音频通信单元获取的所述控制指令处理Linux平台的音频设备,并将获取的音频数据发送至所述虚拟音频通信单元;

所述虚拟音频通信单元,位于所述Android容器的Linux平台上,所述虚拟音频通信单元通过对音频数据接口文件的读写建立所述虚拟音频客户端与所述虚拟音频共享服务器的通信连接。

进一步地,所述控制指令包括输出指令、输入指令及配置指令。

进一步地,所述虚拟音频客户端实现了PulseAudio客户端接口,包括:音频播放接口,用于根据所述输出指令将所述Android应用的音频数据发送至所述虚拟音频通信单元;音频输入接口,用于根据所述输入指令从所述虚拟音频通信单元读入音频数据;配置接口,用于将所述配置指令及配置参数发送至所述虚拟音频通信单元。

有益效果:

本发明通过设置Linux平台上的通信文件及音频服务的访问权限,消除了Android容器对Linux文件的访问限制,同时,通过在Android运行环境内基于AudioHAL架构设计实现了PulseAudio的Client,使运行于Android运行环境内的Android应用能够与运行于Linux系统内的应用一样,采用PulseAudio架构实现对Linux平台音频硬件的共享访问,有效提高了桌面平台上安卓应用使用的便利性,显著提升了用户体验。

附图说明

图1为本发明提供的Linux平台与安卓应用共享音频设备的方法的架构图。

具体实施方式

下面结合附图并举实施例,对本发明进行详细描述。

本发明提供的Linux平台与安卓应用共享音频设备的方法及装置,其核心思想是:通过将PulseAudio的Client及其依赖的库迁移到Android运行环境上,构建基于AudioHAL及PulseAudio音频架构的Android运行环境音频架构,使运行于Android运行环境中的Android应用能够与运行于Linux系统内的应用同时使用Linux平台的音频硬件。

实施例1:

根据本发明实施例,本发明提供了一种Linux平台与安卓应用共享音频设备的方法。本发明采用的架构如图1所示,基于图1所示的架构本发明提供的方法包括以下步骤:

步骤1、在Linux平台的容器中运行Android运行环境,在Android运行环境中运行Android应用;在Android运行环境中,获取用户对Android应用的操作,根据上述操作形成控制指令;设置Android运行环境具有对Linux平台上的通信文件及音频服务的读写权限。

其中,具体来说,Linux平台上的音频服务及通信文件的权限设置过程如下:

步骤1.1、可通过修改PulseAudio Server的访问权限,使Android运行环境中Android系统启动后PulseAudio Client能够直接连接PulseAudio Server。

通常情况下,可以采用但不限于以下方式进行修改:

一种方式是修改Linux平台PulseAudio Server的配置文件default.pa或system.pa,将原配置文件中的“load-module module-native-protocol-unix”修改为“load-module module-native-protocol-unix auth-anonymous=1”;另一种方式为直接修改PulseAudio的权限管理代码。

步骤1.2、修改Linux平台PulseAudio Server创建的音频数据接口文件的访问权限,使运行于Android运行环境中的应用能够访问音频数据接口文件。

PulseAudio架构中PulseAudio的Client通过写音频数据I/O文件的方式与PulseAudio Server进行数据传输。通常情况下,Android应用受到Android运行环境的容器限制没有权限直接访问Linux平台上的文件,因此,需要修改Linux平台上文件的访问权限以使Android应用能够直接访问该文件。本发明中,通过修改音频数据I/O文件的访问权限,使Android应用能够采用PulseAudio架构使用Linux平台的音频设备。音频数据I/O文件的路径为/run/user/1000/pulse/native。

当Linux切换音频设备、音频模式、静音打开/关闭时,/run/user/XXXX/pulse/目录、及native文件的权限可能会被改变。因此,可以基于inotify监视目录和文件权限的变化,一旦变化则自动改为Others可访问。

步骤2、判断步骤1中获取的控制指令的类型,当所述控制指令为输出指令时,执行步骤3;当所述控制指令为输入指令时,执行步骤4;当所述控制指令为配置指令时,执行步骤5。

实际当中,可将PulseAudio的Client及其依赖的库文件迁移到Android运行环境中,实现基于PulseAudio的Android客户端,命名为Android PAClient,以实现对Android应用的控制指令的响应。具体迁移过程如下:

步骤2.1、将PulseAudio的Client迁移到Android运行环境中。

本发明中,Android运行环境采用AudioHAL音频硬件抽象层实现对不同类型音频设备的封装,因此,若将PulseAudio Client迁移到Android运行环境内,需使用PulseAudioClient API在Android的HAL层实现Android的音频设备,该音频设备被命名为AndroidPAClient。

Android系统的HAL层主要采用以下结构体描述硬件设备:hw_module_t、hw_module_methods_t及hw_device_t。其中,hw_module_t结构体用于描述硬件对象,hw_module_t结构体中定义了open方法,通过调用open方法即可获取硬件对象的操作接口,采用这些操作接口即可实现对硬件设备的间接操作。hw_module_methods_t结构体封装了open方法,hw_device_t结构体封装了硬件设备的操作接口。

具体来说,通过使PulseAudio Client“继承”hw_module_t并扩展新属性实现了音频设备Android PAClient。例如,采用audio_module结构体作为新的硬件对象,audio_module结构体继承了hw_module_t结构体,audio_module结构体的定义如下:

其中,硬件对象hw_module_t的open方法描述结构体(即上述结构中的methods成员),只封装一个元素,即open函数指针。open函数指针用于打开硬件设备,返回操作该硬件设备对应的操作接口。本发明中,methods成员的结构定义如下:

static struct hw_module_methods_t hal_module_methods=

{

.open=audiod_open,

};

其中,audiod_open函数提供了打开Android PAClient音频设备功能,并提供了Android PAClient的操作接口,包括:audiod_close、audiod_init_check、audiod_set_voice_volume、audiod_set_master_volume、audiod_set_mode、audiod_set_mic_mute、audiod_get_mic_mute、audiod_get_input_buffer_size、audiod_open_output_stream、audiod_close_output_stream、audiod_open_input_stream、audiod_close_input_stream。audiod_open函数的定义如下:

其中,audiod_open_input_stream函数,通过调用PulseAudio API中的pa_simple_free、pa_simple_new和pa_simple_read函数实现从音频设备的读取功能,同时能够获取或设定通道、输入流的采样频率。audiod_close_input_stream函数,通过调用PulseAudio API中的pa_simple_free函数实现关闭从音频设备的读取功能。audiod_open_output_stream函数通过调用PulseAudio API中的pa_simple_free、pa_simple_new、pa_simple_write函数实现向音频设备的写操作,并当出现异常时通过调用PulseAudio API中的pa_simple_free函数实现关闭向音频设备写操作的功能。audiod_close_output_stream函数通过调用PulseAudio API中的pa_simple_free函数实现关闭向音频设备写操作的功能。由此,实现了对PulseAudio客户端从Linux系统向Android运行环境的迁移。

步骤2.2、将PulseAudio动态链接库迁移到Android运行环境中。

首先,根据PulseAudio Client依赖库的目录结构自动生成Android.mk中的源码文件列表,然后,将这些依赖库的Makefile文件中的编译参数、依赖库等转换为Android系统对应的编译参数和库,并将转换后的编译参数和库添加到上述Android.mk,从而为Android PAClient音频设备提供编译、运行所依赖的库。

最后,在Android系统中完成Android PAClient音频设备的编译。

步骤3、将控制指令及Android应用的音频数据A写入位于音频数据接口文件;音频服务读取并解析音频数据接口文件得到控制指令及音频数据A,将音频数据A输出到Linux平台的硬件音频设备中。

步骤4、将所述控制指令写入所述音频数据接口文件;所述音频服务读取并解析所述音频数据接口文件得到所述控制指令,将所述Linux平台的硬件音频设备获取的音频数据B写入所述音频数据接口文件;所述Android应用读取所述音频数据接口文件获取所述音频数据B。

步骤5、将所述控制指令及配置参数写入所述音频数据接口文件;所述音频服务读取并解析所述音频数据接口文件得到所述控制指令及配置参数,所述音频服务根据所述配置参数完成对所述硬件音频设备的配置。

采用本发明提供的方法,将Android应用的音频作为输入,通过Android PAClient将输入的音频写入音频数据I/O文件,或将从Linux平台音频设备接收到的音频通过音频数据I/O文件读取到相应的Android音频管理服务,从而实现Android应用与Linux平台的共享音频设备。

实施例2:

根据本发明实施例,本发明提供了一种Linux平台与安卓应用共享音频设备的装置,包括Android运行环境、虚拟音频客户端、虚拟音频共享服务器及虚拟音频通信单元。

其中,Android运行环境,运行在Linux平台上的Android容器内,用于为Android应用提供运行环境。

虚拟音频客户端,位于Android运行环境的硬件抽象层HAL中,实现了PulseAudio客户端接口,用于获取用户对Android应用的操作,并根据操作形成控制指令;虚拟音频客户端用于根据控制指令将控制信息发送至虚拟音频通信单元,并从虚拟音频通信单元获取虚拟音频共享服务器返回的音频数据;虚拟音频客户端具有对虚拟音频共享服务器及虚拟音频通信单元的操作权限。

其中,控制指令包括输出指令、输入指令及配置指令。

虚拟音频客户端实现的PulseAudio客户端接口,包括:音频播放接口,用于根据输出指令将Android应用的音频数据发送至虚拟音频通信单元;音频输入接口,用于根据输入指令从虚拟音频通信单元读入音频数据;配置接口,用于将配置指令及配置参数发送至虚拟音频通信单元。

虚拟音频共享服务器,位于Android容器的Linux平台上,通过调用Linux平台的ALSA接口与Linux平台的音频设备连接;虚拟音频共享服务器根据从虚拟音频通信单元获取的控制指令处理Linux平台的音频设备,并将获取的音频数据发送至虚拟音频通信单元。

虚拟音频通信单元,位于Android容器的Linux平台上,虚拟音频通信单元通过对音频数据接口文件的读写建立虚拟音频客户端与虚拟音频共享服务器的通信连接。

综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:图案绘制方法、装置、设备、计算机可读存储介质及产品

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!