CN111930340B - 一种基于Linux与Android兼容技术的虚拟音频装置与方法 - Google Patents

一种基于Linux与Android兼容技术的虚拟音频装置与方法 Download PDF

Info

Publication number
CN111930340B
CN111930340B CN202010998743.8A CN202010998743A CN111930340B CN 111930340 B CN111930340 B CN 111930340B CN 202010998743 A CN202010998743 A CN 202010998743A CN 111930340 B CN111930340 B CN 111930340B
Authority
CN
China
Prior art keywords
audio
interface
linux
android
stream data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010998743.8A
Other languages
English (en)
Other versions
CN111930340A (zh
Inventor
姚宏亮
周剑
张耀斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jide System Technology Co ltd
Original Assignee
Beijing Jide System Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jide System Technology Co ltd filed Critical Beijing Jide System Technology Co ltd
Priority to CN202010998743.8A priority Critical patent/CN111930340B/zh
Publication of CN111930340A publication Critical patent/CN111930340A/zh
Application granted granted Critical
Publication of CN111930340B publication Critical patent/CN111930340B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/162Interface to dedicated audio devices, e.g. audio drivers, interface to CODECs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种基于Linux与Android兼容技术的虚拟音频装置与方法,属于计算机基础软件领域。所述方法包括:在容器Android侧实现一虚拟音频设备单元,Android应用通过调用虚拟音频设备单元提供的接口来完成音频的输入、播放和录音;在容器Linux侧实现一虚拟音频接口单元,通过调用Linux音频设备驱动控制硬件音频设备;在容器Linux侧实现一音频会话控制单元,通过建立Socket监听线程穿透容器,实现容器两侧数据的双向传输;本发明解决了以容器技术兼容运行在Linux系统中的Android应用调用Linux的物理音频设备的问题,实现声音播放、读取、录音等相关的功能。

Description

一种基于Linux与Android兼容技术的虚拟音频装置与方法
技术领域
本发明属于计算机基础软件领域,特别是涉及一种基于Linux与Android兼容技术的虚拟音频装置与方法。
背景技术
随着Windows7的服务终止,Linux系统得到更好的普及,对于兼容运行在Linux系统之上的Android运行环境来说,真实的物理音频设备都是在Linux内核中管控的,因此需要解决Android应用对物理音频设备的使用问题。
对于音频设备的访问,Linux操作系统和Android操作系统分别有自己的访问方式,下面就这两种系统的音频设备访问做简单描述。
一:Linux操作系统中对于音频设备的调用流程
从图4可以看出在Linux操作系统中,Linux的应用程序无法直接对声卡这类硬件设备进行操作,而是必须通过Linux内核提供的驱动程序才能完成。目前Linux下常用的声卡驱动程序主要有两种:OSS和ALSA。其中ALSA(Advanced Linux Sound Architecture)是在Linux下进行音频编程时标准开源驱动库。Linux的应用程序通过ALSA的通用接口实现对音频设备的硬件访问,通过硬件访问接口可以直接调用Linux内核中的音频设备驱动,从而实现对音频硬件设备的访问。
二:Android操作系统中对于音频设备的调用流程
在传统的Android系统中,音频相关的设备都是在HAL层中进行管理的,如有线耳机、HDMI、USB声卡等设备,其中一部分厂家私有部分音频设备的驱动在Android系统的HAL层中实现,另外一部分驱动则在Linux内核中实现。
当Android作为Linux内核之上的一个独立的操作系统存在时,Android系统的硬件抽象层HAL可以通过TiniAlsa系统调用Linux内核中的音频设备驱动,以实现相关的音频输入输出功能。
从图5可以看出在Android操作系统中,Android的应用程序需要通过硬件抽象层HAL进行对音频设备的调用。这是因为Linux内核需要遵循GPL开源协议,同时一个设备的驱动程序包含了硬件的一些重要参数,因此有些硬件厂商为了保护自己硬件方面的各项参数不被外泄,所以驱动的开源势必会使硬件厂商蒙受损失,Google为了保护硬件厂商的利益,所以在Android系统中加入了硬件抽象层HAL,在硬件抽象层HAL中不必遵循GPL协议,所以代码可以封闭。
因此当Android应用需要调用一个音频设备时,需要先通过HAL层对于私有的设备驱动mydevice进行访问,然后再通过系统调用访问Linux内核(Linux Kernel)中的相关音频驱动程序,这样才能完成对音频硬件的I/O访问。
从上面两种对音频设备的访问方式可以看出,Android的音频设备访问流程是在Linux音频设备访问的实现方式上进行了一种扩展,原理是都是应用通过接口访问实际的音频硬件驱动,从而实现对硬件设备的访问和控制。
但是对于在Linux操作系统上兼容运行Android运行环境来说,由于Android运行环境是运行在容器中的,因此Android的HAL层是无法直接通过TiniAlsa直接调用Linux内核中的音频设备驱动的,这个惯用的硬件访问通道被打断了,Android应用在调用Linux内核中的硬件驱动时,无法穿透直接访问。因此迫切需要找到一种可以穿透容器访问的方法,让在Linux操作系统上兼容运行Android运行环境的HAL层能够进行音频设备的I/O调用,实现音频播放、读取、录音等相应功能。
发明内容
本发明实施例提供了一种基于Linux与Android兼容技术的虚拟音频方法和装置,用以解决以容器技术兼容运行在Linux系统中的Android应用对音频的输入输出问题。
根据本发明实施例的一个方面,提供了一种基于Linux与Android兼容技术的虚拟音频装置,该装置包括:位于所述Android运行环境的硬件抽象层HAL中的虚拟音频设备单元,位于所述第一系统容器的Linux操作系统侧的虚拟音频接口单元,位于所述第一系统容器的Linux操作系统侧的音频会话控制单元;在Linux操作系统中运行由第一系统容器提供的Android运行环境;所述虚拟音频设备单元中实现第一音频操作接口,所述第一音频操作接口获取用户对Android应用的音频操作为第一控制数据,所述第一音频操作接口获取Android应用中的音频流数据为第一音频流数据;所述虚拟音频接口单元通过调用Linux硬件音频设备驱动与Linux硬件音频设备连接;所述虚拟音频接口单元获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据;所述音频会话控制单元在所述虚拟音频设备单元与所述虚拟音频接口单元之间建立通信连接;其中所述虚拟音频设备单元中设有第一Socket监听线程,监听并接收所述虚拟音频接口单元发送的所述第二控制数据及所述第二音频流数据,并发送给所述Android应用程序;所述音频会话控制单元中设有第二Socket监听线程,监听并接收所述虚拟音频设备单元发送的所述第一控制数据及所述第一音频流数据;将所述第一控制数据及所述第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放所述第一音频流数据。
作为本发明实施方式的进一步的改进,在所述虚拟音频单元中实现第一音频操作接口组,所述第一音频操作接口组用于所述Android应用直接调用,所述第一音频操作接口组包括:第一录音接口,用于响应所述Android应用的录音操作;第一音频播放接口,用于响应所述Android应用的音频播放操作;第一音频输入接口,用于响应所述Android应用的音频输入操作;所述第一控制数据包括所述Android应用对所述第一音频操作接口组的调用操作。
作为本发明实施方式的进一步的改进,还包括位于第一系统容器的Linux操作系统侧的Linux HAL接口层单元;所述Linux HAL接口层单元实现第二音频操作接口组,所述第二音频操作接口组包括:第二录音接口,第二音频播放接口,第二音频输入接口;所述第二录音接口对应到所述第一录音接口,当所述第二录音接口发送所述第二音频流数据与所述第二控制数据,所述第一录音接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据;所述第二音频播放接口对应到所述第一音频播放接口,当所述第一音频播放接口发送所述第一音频流数据与所述第一控制数据,所述第二音频播放接口通过所述第二Socket监听线程监听并接收所述第一音频流数据与所述第一控制数据;所述第二音频输入接口对应到所述第一音频输入接口,当所述第二音频输入接口发送所述第二音频流数据与所述第二控制数据,所述第一音频输入接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据。
作为本发明实施方式的进一步的改进,在所述第一系统容器的Android运行环境侧,还通过调用Android系统框架的SurfaceFlinger服务管理所述第一音频流数据和所述第二音频流数据,包括音频流通道的使用和多音频流混音。
根据本发明实施例的另一个方面,提供了一种基于Linux与Android兼容技术的虚拟音频方法,该方法包括:在Linux操作系统中运行由第一系统容器提供的Android运行环境;获取用户对Android应用的音频操作为第一控制数据,获取Android应用中的音频流数据为第一音频流数据;获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据;在所述第一系统容器的Android运行环境侧建立有第一Socket监听线程,监听并接收所述第一系统容器的Linux操作系统侧发送的所述第二控制数据及所述第二音频流数据,并发送给所述Android应用程序;在所述第一系统容器的Linux操作系统侧建立有第二Socket监听线程,监听并接收所述第一系统容器的Android运行环境侧发送的所述第一控制数据及所述第一音频流数据;将所述第一控制数据及所述第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放所述第一音频流数据。
作为本发明实施方式的进一步的改进,在第一系统容器的Android运行环境侧设有第一音频操作接口组,所述第一音频操作接口组用于所述Android应用直接调用,所述第一音频操作接口组包括:第一录音接口,用于响应所述Android应用的录音操作;第一音频播放接口,用于响应所述Android应用的音频播放操作;第一音频输入接口,用于响应所述Android应用的音频输入操作;所述第一控制数据包括所述Android应用对所述第一音频操作接口组的调用操作。
作为本发明实施方式的进一步的改进,在第一系统容器的Linux操作系统侧设有第二音频操作接口组,所述第二音频操作接口组包括:第二录音接口,第二音频播放接口,第二音频输入接口;所述第二录音接口对应到所述第一录音接口,当所述第二录音接口发送所述第二音频流数据与所述第二控制数据,所述第一录音接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据;所述第二音频播放接口对应到所述第一音频播放接口,当所述第一音频播放接口发送所述第一音频流数据与所述第一控制数据,所述第二音频播放接口通过所述第二Socket监听线程监听并接收所述第一音频流数据与所述第一控制数据;所述第二音频输入接口对应到所述第一音频输入接口,当所述第二音频输入接口发送所述第二音频流数据与所述第二控制数据,所述第一音频输入接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据。
作为本发明实施方式的进一步的改进,在所述第一系统容器的Android运行环境侧,还通过调用Android系统框架的SurfaceFlinger服务管理所述第一音频流数据和所述第二音频流数据,包括音频流通道的使用和多音频流混音。
本发明实施例在Android硬件抽象层中实现一个虚拟音频设备,向Android应用接口模拟真实的音频物理设备,实现Android用户的无感使用;在本发明的实施例中还通过设置Socket监听线程解决了从容器的Android侧到容器的Linux侧的音频穿透输入输出问题,并在双侧实现数据流监听,可以获得实时的数据通信能力;通过在Linux侧实现一个系统进程——音频会话控制进程,来进行完整的音频数据上传下送的调度,完成Linux的ALSA设备和Android HAL中的虚拟音频设备的对接,实现穿透容器,使得Android运行环境和Linux内核间进行音频数据的互相访问。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的原理框架图;
图2示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的音频播放流程图;
图3示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的音频读取流程图;
图4示出了现有技术中Linux操作系统对于音频设备的调用流程图;
图5示出了现有技术中Android系统对于音频设备的访问流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
可以理解的是,本发明的说明书和权利要求书及附图中的方法及装置中的相关特征可以相互参考。另外,本发明的说明书和权利要求书及附图中的“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
首先,在对本发明实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
HAL:HAL是Hardware Abstraction Layer硬件抽象层的缩写,是建立在Linux驱动之上的一套动态库,具有标准的调用接口。这套动态库不属于Linux内核,而是属于Linux内核层之上的系统运行库层。由于HAL具有标准的硬件调用接口,可以屏蔽Linux驱动复杂、不统一的接口。
容器技术:容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好的在孤立的组之间平衡有冲突的资源使用需求。
JStack:包含有容器的Android运行环境。
Socket:是一种独立于协议的网络编程接口,它屏蔽了底层通信软件和具体操作系统的差异,实现安装TCP协议软件和实现套接字规范的计算机之间的通信。
ALSA:Advanced Linux Sound Architecture的缩写,它是Linux框架所提供的高级Linux声音体系驱动。
实施例1
根据本发明实施例,提供了一种基于Linux与Android兼容技术的虚拟音频的装置。该装置可以包括虚拟音频设备单元、虚拟音频接口单元、音频会话控制单元。
虚拟音频设备单元,位于Android运行环境的硬件抽象层HAL中,虚拟音频设备单元中实现第一音频操作接口组,第一音频操作接口组获取用户对Android应用的音频操作为第一控制数据,第一音频操作接口组获取Android应用中的音频流数据为第一音频流数据;
第一音频操作接口组实现了一组音频的I/O接口,抽象所有的音频设备的I/O主要是三个播放、录音和声音输入三个功能,这三个功能分别对应三个接口,分别为:Out_write、In_record及In_read,上层应用可以直接访问该虚拟音频设备,调用这三个接口以完成音频的输入输出。Android应用对这三个接口的调用记为第一控制数据,具体来说,其中:
Out_write接口负责实现上层Android应用中音频数据的播放;
In_record接口负责读取并实现来自音频设备的音频数据的录制;
In_read接口负责读取音频设备输入的相关声音,如:麦克风MIC;
当用户对Android应用的音频操作为播放时,获取被选中播放的音频数据文件中的音频流数据为第一音频流数据;通过调用Android系统框架的SurfaceFlinger服务管理各种输入、输出音频流,包括音频流通道的使用和多音频流混音;
虚拟音频接口单元,通过调用Linux硬件音频设备驱动与Linux硬件音频设备连接;虚拟音频接口单元获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据。
虚拟音频接口单元在JStack中实现,该接口用于实现同Linux系统的音频驱动间的通信。虚拟音频接口单元主要负责和Linux音频设备之间的相关通信工作,通过对ALSA相关接口的封装,可以通过ALSA将音频数据直接写入到物理音频硬件当中,也可以通过ALSA直接从物理音频硬件读取到音频流数据。
音频会话控制单元,位于所述第一系统容器的Linux操作系统侧,用于在虚拟音频设备单元与虚拟音频接口单元之间建立通信连接;
Linux系统启动或者在JStack运行环境启动时,启动音频会话控制进程,该进程负责创建音频会话控制层audio_server以及和Android HAL层中虚拟音频设备的通信接口,采用Socket方式,建立通信连接。该独立进程能够穿透容器,与Android运行环境的HAL层中虚拟音频设备的相关音频I/O接口进行通信。
其中虚拟音频设备单元中设有第一Socket监听线程,监听并接收虚拟音频接口单元发送的第二控制数据及第二音频流数据,并发送给Android应用程序;
音频会话控制单元中设有第二Socket监听线程,监听并接收所述虚拟音频设备单元发送的第一控制数据及第一音频流数据;将第一控制数据及第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放第一音频流数据。
音频会话控制进程创建与Android HAL中虚拟音频设备的Socket通信接口,并在虚拟音频设备与JStack的HAL接口层进程中分别建立监听线程,互相进行端口的监听,获得传输的音频数据。
具体的音频输入输出的交互包括三种:音频播放、音频读取和音频录制。下面就这三种交互流程分别做详细描述:
1:音频播放流程
图2示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的音频播放流程图。
S11:Linux系统启动或者JStack启动时,启动音频会话控制进程,该进程负责创建音频会话控制层Audio server以及和Android运行环境的HAL层中虚拟音频设备的通信接口,采用Socket方式,建立通信连接;
S12:在Android运行环境的HAL层的虚拟音频设备进程和在Linux HAL接口层进程中分别进行端口的监听,获得传输中的音频数据;
S13:用户在Linux桌面打开Android应用,在应用中进行音频播放的相关操作,此时Android系统进程会调用Android框架自带的AudioFlinger接口向下进行音频流数据和音频控制数据的输出;
S14:AudioFlinger会调用到Android运行环境的HAL层中的虚拟音频设备的out_write接口,该接口将音频流数据和音频控制数据写入虚拟音频设备中。
S15:虚拟音频设备会通过监听线程发送上述数据,此时在Linux HAL接口层中的对应监听进程会收取数据,写入到在Linux HAL接口层中的JStack_audio接口缓冲区中;
S16:JStack_audio接口执行PlayBack操作回写音频流数据或控制指令到系统缓冲区;
S17:音频会话控制层Audio server的音频会话控制进程调用虚拟音频接口层Linux Audio interface中的Read_data函数中通过SDL来连接音频设备,再从Audio_PlayBack的缓冲区队列中读取音频数据并写入到相关ALSA设备里;同时如果有音频控制数据,则把音频控制数据写入到ALSA相对应的音频控制接口,如:Interleaved(声卡中断)、Xrun(声卡运行)等;
S18:Linux将音频数据与音频控制数据写入到音频硬件,并通过音频硬件设备播放音频数据。
2:音频读取流程
图3示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的音频读取流程图;
S21:Linux系统启动或者JStack启动时,启动音频会话控制进程,该进程负责创建音频会话控制层Audio Server,并创建音频会话控制层Audio Server与Android运行环境的硬件抽象层中虚拟音频设备andio_hw的通信接口,采用Socket方式,建立通信连接;
S22:在Android运行环境的HAL层的虚拟音频设备进程和在Linux HAL接口层进程中分别进行端口的监听,获得传输的音频数据;
S23:用户在Linux桌面打开Android应用,在应用中打开音频输入设备进行声音获取,常见的音频输入设备包括但不限于麦克风;
S24:AudioFlinger调用Android系统HAL层中的虚拟音频设备andio_hw的In_read接口,该接口向虚拟音频设备发出打开音频输入设备的指令;
S25:虚拟音频设备andio_hw通过监听线程发送上述指令,此时JStack中的对应监听进程会获取打开音频输入设备的指令,通知音频会话控制层Audio Server需要进行音频输入设备的调用;
S26:音频会话控制层Audio Server通知虚拟音频接口层Linux Audio Interface调用ALSA音频设备打开音频输入设备,获取音频输入设备相关的音频数据;
S27:获取到来自ALSA的音频数据流,写入到Linux虚拟音频接口Audio_Write的缓冲区队列中,并通知音频会话控制层Audio Server数据准备完成;
S28:音频会话控制层Audio Server通知Android系统HAL层准备发送数据到Android侧;
S29:Android系统HAL层监听接收端口发送来的音频流数据,调用in_read接口写入到虚拟音频设备中;
S30:Android应用程序通过AudioFlinger获取虚拟音频设备的音频数据流,完成音频数据的获取。
3:音频录制流程
音频录制流程和音频读取流程类似,在JStack中的音频流数据获取的步骤是一致的,即步骤S31-S38与步骤S21-S28相同;
S39:Android系统HAL层调用In_Record接口读取虚拟音频设备中的音频流,并进行音频的编码工作,调用AudioFlinger传递音频数据;
S40:AudioFlinger创建一个新的音频数据文件,把获取的编码后的音频数据写入文件中,完成录音功能。
通过上述装置可以实现音频数据的双向穿透,从而解决兼容运行在Linux系统中的Android应用对音频的输入输出问题问题。
实施例2
根据本发明实施例,还提供了一种基于Linux与Android兼容技术的虚拟音频的方法实施例。
图1示出了本发明实施例提供的一种基于Linux与Android兼容技术的虚拟音频装置与方法的原理,如图1所示,该方法可以包括如下步骤:
步骤S001:在Linux操作系统中运行由第一系统容器提供的Android运行环境;
用户在Linux桌面打开Android应用,在应用中进行音频播放的相关操作,此时Android系统进程会调用自带的AudioFlinger接口向Linux内核端进行音频流和音频控制的输出;
步骤S002:获取用户对Android应用的音频操作为第一控制数据,获取Android应用中的音频流数据为第一音频流数据;
将Android应用中进行音频播放的相关控制操作抽象实现为播放、录音和声音输入三类控制数据,记为第一控制数据;当用户对Android应用的音频操作为播放时,获取被选中播放的音频数据文件中的音频流数据为第一音频流数据;Android系统的AudioFlinger管理各类音频流的输入和输出,管理实时可用的音频通道,管理各种音频流选择音频通道以及多个音频流的混音等相关功能。
步骤S003:获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据;
Linux内核调用ALSA音频驱动打开物理音频输入设备,获取音频流数据为第二音频流数据;同时如果有音频控制数据,则获取为第二控制数据,并把第二控制数据写入到ALSA相对应的音频控制接口,音频控制数据包括如:Interleaved(声卡中断)、Xrun(声卡运行)等。
步骤S004:在第一系统容器的Android运行环境侧建立有第一Socket监听线程,监听并接收第一系统容器的Linux操作系统侧发送的第二控制数据及第二音频流数据,并发送给Android应用程序;
步骤S005:在第一系统容器的Linux操作系统侧建立有第二Socket监听线程,监听并接收所述第一系统容器的Android运行环境侧发送的第一控制数据及第一音频流数据;将第一控制数据及第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放第一音频流数据。
相关技术中,对于在Linux操作系统上兼容运行Android运行环境来说,由于Android运行环境是运行在容器中的,因此Android的HAL层是无法直接通过TiniAlsa直接调用Linux内核中的音频设备驱动的。
本申请在Linux系统启动或者JStack启动时,会启动单独的进程,采用Socket方式,监听容器两边的端口数据,从而建立实时的通信连接,以这种方式可以穿透容器,让在Linux操作系统上兼容运行Android运行环境的HAL层能够进行音频设备的I/O调用,实现音频播放、读取、录音等相应功能。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (8)

1.一种基于Linux与Android兼容技术的虚拟音频装置,其特征在于,包括:
在Linux操作系统中运行由第一系统容器提供的Android运行环境,所述Android运行环境以容器技术运行在所述第一系统容器中;
虚拟音频设备单元,位于所述Android运行环境的硬件抽象层HAL中,所述虚拟音频设备单元中实现第一音频操作接口组,所述第一音频操作接口组包括一组音频I/O接口,用于播放、录音和声音输入;所述第一音频操作接口组获取用户对所述一组音频I/O接口的调用为第一控制数据,所述第一音频操作接口组获取Android应用中的音频流数据为第一音频流数据;
虚拟音频接口单元,位于所述第一系统容器的Linux操作系统侧,所述虚拟音频接口单元通过调用Linux硬件音频设备驱动与Linux硬件音频设备连接;所述虚拟音频接口单元获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据;
音频会话控制单元,位于所述第一系统容器的Linux操作系统侧,用于在所述虚拟音频设备单元与所述虚拟音频接口单元之间建立通信连接;
其中所述虚拟音频设备单元中设有第一Socket监听线程,监听并接收所述虚拟音频接口单元发送的所述第二控制数据及所述第二音频流数据,并发送给所述Android应用程序;
所述音频会话控制单元中设有第二Socket监听线程,监听并接收所述虚拟音频设备单元发送的所述第一控制数据及所述第一音频流数据;将所述第一控制数据及所述第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放所述第一音频流数据。
2.一种如权利要求1所述的基于Linux与Android兼容技术的虚拟音频装置,其特征在于,在所述虚拟音频设备 单元中实现第一音频操作接口组,所述第一音频操作接口组用于所述Android应用直接调用,所述第一音频操作接口组包括:第一录音接口,用于响应所述Android应用的录音操作;第一音频播放接口,用于响应所述Android应用的音频播放操作;第一音频输入接口,用于响应所述Android应用的音频输入操作;所述第一控制数据包括所述Android应用对所述第一音频操作接口组的调用操作。
3.一种如权利要求2所述的基于Linux与Android兼容技术的虚拟音频装置,其特征在于,还包括位于第一系统容器的Linux操作系统侧的Linux HAL接口层单元;
所述Linux HAL接口层单元实现第二音频操作接口组,所述第二音频操作接口组包括:第二录音接口,第二音频播放接口,第二音频输入接口;
所述第二录音接口对应到所述第一录音接口,当所述第二录音接口发送所述第二音频流数据与所述第二控制数据,所述第一录音接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据;
所述第二音频播放接口对应到所述第一音频播放接口,当所述第一音频播放接口发送所述第一音频流数据与所述第一控制数据,所述第二音频播放接口通过所述第二Socket监听线程监听并接收所述第一音频流数据与所述第一控制数据;
所述第二音频输入接口对应到所述第一音频输入接口,当所述第二音频输入接口发送所述第二音频流数据与所述第二控制数据,所述第一音频输入接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据。
4.一种如权利要求2或3所述的基于Linux与Android兼容技术的虚拟音频装置,其特征在于,在所述第一系统容器的Android运行环境侧,还通过调用Android系统框架的SurfaceFlinger服务管理所述第一音频流数据和所述第二音频流数据,包括音频流通道的使用和多音频流混音。
5.一种基于Linux与Android兼容技术的虚拟音频方法,其特征在于,包括:
在Linux操作系统中运行由第一系统容器提供的Android运行环境,所述Android运行环境以容器技术运行在所述第一系统容器中;
在所述第一系统容器的Android运行环境侧,实现一组音频I/O接口,用于播放、录音和声音输入,获取用户对所述一组音频I/O接口的调用为第一控制数据,获取Android应用中的音频流数据为第一音频流数据;
在所述第一系统容器的Linux操作系统侧,获取Linux硬件音频设备的输入音频流控制数据为第二控制数据,获取Linux硬件音频设备的输入音频流数据为第二音频流数据;
在所述第一系统容器的Android运行环境侧建立有第一Socket监听线程,监听并接收所述第一系统容器的Linux操作系统侧发送的所述第二控制数据及所述第二音频流数据,并发送给所述Android应用程序;
在所述第一系统容器的Linux操作系统侧建立有第二Socket监听线程,监听并接收所述第一系统容器的Android运行环境侧发送的所述第一控制数据及所述第一音频流数据;将所述第一控制数据及所述第一音频流数据写入Linux音频设备驱动,控制物理音频设备播放所述第一音频流数据。
6.一种如权利要求5所述的基于Linux与Android兼容技术的虚拟音频方法,其特征在于,在所述第一系统容器的Android运行环境侧设有第一音频操作接口组,所述第一音频操作接口组用于所述Android应用直接调用,所述第一音频操作接口组包括:第一录音接口,用于响应所述Android应用的录音操作;第一音频播放接口,用于响应所述Android应用的音频播放操作;第一音频输入接口,用于响应所述Android应用的音频输入操作;所述第一控制数据包括所述Android应用对所述第一音频操作接口组的调用操作。
7.一种如权利要求6所述的基于Linux与Android兼容技术的虚拟音频方法,其特征在于,
在所述第一系统容器的Linux操作系统侧设有第二音频操作接口组,所述第二音频操作接口组包括:第二录音接口,第二音频播放接口,第二音频输入接口;
所述第二录音接口对应到所述第一录音接口,当所述第二录音接口发送所述第二音频流数据与所述第二控制数据,所述第一录音接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据;
所述第二音频播放接口对应到所述第一音频播放接口,当所述第一音频播放接口发送所述第一音频流数据与所述第一控制数据,所述第二音频播放接口通过所述第二Socket监听线程监听并接收所述第一音频流数据与所述第一控制数据;
所述第二音频输入接口对应到所述第一音频输入接口,当所述第二音频输入接口发送所述第二音频流数据与所述第二控制数据,所述第一音频输入接口通过所述第一Socket监听线程监听并接收所述第二音频流数据与所述第二控制数据。
8.一种如权利要求6或7所述的基于Linux与Android兼容技术的虚拟音频方法,其特征在于,在所述第一系统容器的Android运行环境侧,还通过调用Android系统框架的SurfaceFlinger服务管理所述第一音频流数据和所述第二音频流数据,包括音频流通道的使用和多音频流混音。
CN202010998743.8A 2020-09-21 2020-09-21 一种基于Linux与Android兼容技术的虚拟音频装置与方法 Active CN111930340B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010998743.8A CN111930340B (zh) 2020-09-21 2020-09-21 一种基于Linux与Android兼容技术的虚拟音频装置与方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010998743.8A CN111930340B (zh) 2020-09-21 2020-09-21 一种基于Linux与Android兼容技术的虚拟音频装置与方法

Publications (2)

Publication Number Publication Date
CN111930340A CN111930340A (zh) 2020-11-13
CN111930340B true CN111930340B (zh) 2021-06-01

Family

ID=73333927

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010998743.8A Active CN111930340B (zh) 2020-09-21 2020-09-21 一种基于Linux与Android兼容技术的虚拟音频装置与方法

Country Status (1)

Country Link
CN (1) CN111930340B (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112099923B (zh) * 2020-11-17 2021-02-05 江苏北弓智能科技有限公司 一种运行于Linux操作系统上的Android虚拟化系统
CN112615853B (zh) * 2020-12-16 2023-01-10 瑞芯微电子股份有限公司 一种Android设备音频数据接入方法
CN114827514B (zh) * 2021-01-29 2023-11-17 华为技术有限公司 电子设备及其与其他电子设备的数据传输方法和介质
CN113238613A (zh) * 2021-04-28 2021-08-10 广州朗国电子科技有限公司 一体机设备及其麦克风使用方法、存储介质
CN113220363B (zh) * 2021-05-06 2022-04-19 技德技术研究所(武汉)有限公司 一种在Linux上兼容运行Android系统的文件打开方法及装置
CN113505007A (zh) * 2021-07-12 2021-10-15 北京鲸鲮信息系统技术有限公司 基于Linux系统的协议栈数据传输方法、计算机设备和存储介质
CN113535279A (zh) * 2021-07-13 2021-10-22 北京麟卓信息科技有限公司 Linux平台与安卓应用共享音频设备的方法及装置
CN113282271A (zh) * 2021-07-22 2021-08-20 北京麟卓信息科技有限公司 一种Linux平台上安卓应用的音频处理方法及装置
CN113515406B (zh) * 2021-09-15 2021-12-21 北京麟卓信息科技有限公司 一种安卓运行环境中音频播放故障处理方法及装置
CN114095781A (zh) * 2021-11-02 2022-02-25 北京鲸鲮信息系统技术有限公司 多媒体数据处理方法、装置、电子设备及存储介质
CN113835672A (zh) * 2021-11-23 2021-12-24 北京鲸鲮信息系统技术有限公司 Linux兼容Android的音频控制方法、系统及装置
CN114265573B (zh) * 2021-12-24 2023-08-29 苏州智行畅联科技有限公司 一种音效控制方法、系统及中控车机
CN113990354B (zh) * 2021-12-29 2022-06-17 北京鲸鲮信息系统技术有限公司 基于Linux的音频控制方法、装置、设备和存储介质
CN114168211B (zh) * 2022-02-14 2022-05-20 麒麟软件有限公司 系统兼容时使Android应用与Linux锁屏机制关联的方法
CN114242105A (zh) * 2022-02-24 2022-03-25 麒麟软件有限公司 一种对Android应用实施录音降噪的方法和系统
CN114879930B (zh) * 2022-07-07 2022-09-06 北京麟卓信息科技有限公司 一种安卓兼容环境的音频输出优化方法
CN114879932B (zh) * 2022-07-12 2022-09-02 北京麟卓信息科技有限公司 一种基于输出方式自动切换的安卓系统音频输出优化方法
CN116339870B (zh) * 2023-05-22 2023-08-01 南京美乐威电子科技有限公司 第三方应用调度设备硬件接口的方法和音视频处理设备
CN116860201B (zh) * 2023-09-05 2023-11-28 麒麟软件有限公司 Linux系统中安卓应用的音量独立调节控制方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103235736A (zh) * 2013-03-27 2013-08-07 四川长虹电器股份有限公司 基于Android平台支持虚拟音频设备的方法及系统
CN109313566A (zh) * 2017-12-27 2019-02-05 深圳前海达闼云端智能科技有限公司 一种虚拟机的音频播放方法及其装置、移动终端

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9338541B2 (en) * 2013-10-09 2016-05-10 Voyetra Turtle Beach, Inc. Method and system for in-game visualization based on audio analysis

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103235736A (zh) * 2013-03-27 2013-08-07 四川长虹电器股份有限公司 基于Android平台支持虚拟音频设备的方法及系统
CN109313566A (zh) * 2017-12-27 2019-02-05 深圳前海达闼云端智能科技有限公司 一种虚拟机的音频播放方法及其装置、移动终端

Also Published As

Publication number Publication date
CN111930340A (zh) 2020-11-13

Similar Documents

Publication Publication Date Title
CN111930340B (zh) 一种基于Linux与Android兼容技术的虚拟音频装置与方法
US6243753B1 (en) Method, system, and computer program product for creating a raw data channel form an integrating component to a series of kernel mode filters
KR100475200B1 (ko) 가전장치용태스크구동형제어시스템
US6421793B1 (en) System and method for automated testing of electronic devices
KR20020027467A (ko) 애플리케이션 실행 및 테스트
RU2380742C2 (ru) Автоматическая персонализация или конфигурирование мобильных устройств
US5608651A (en) Method and apparatus for scheduling and mixing media in a multi-media environment
CN105654970B (zh) 一种多系统的音频播放控制方法、系统和车载系统
CN112579038B (zh) 一种内置录音方法、装置、电子设备和存储介质
CN113282271A (zh) 一种Linux平台上安卓应用的音频处理方法及装置
CN108052312A (zh) 一种基于安卓系统实现多声道录音的方法及音频系统
HRP20000039A2 (en) Ieee set top box device driver
CN108052377B (zh) 基于云的输入处理方法、装置、服务器和存储介质
US20070255432A1 (en) High definition audio architecture
US7836159B2 (en) Control of home network devices
CN116860201B (zh) Linux系统中安卓应用的音量独立调节控制方法及装置
CN116795754A (zh) Usb转串口驱动实现方法、网络测试方法、计算机装置及计算机可读存储介质
GB2471463A (en) Software component wrappers for multimedia subcomponents that control the performance of the multimedia function of the subcomponents.
CN110781014A (zh) 基于Android设备的录音数据的多进程分发方法与系统
CN105657632A (zh) 一种音频测试方法、终端及系统
WO2022042327A1 (zh) 音频驱动马达的通路配置方法及设备
CN113656152B (zh) 基于容器云环境的本地模拟方法、系统、介质和电子设备
CN112631736A (zh) 云主机的音频数据串流方法、装置、设备及存储介质
KR100719416B1 (ko) 데이터 처리 장치 및 데이터 처리 방법
CN113535279A (zh) Linux平台与安卓应用共享音频设备的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant