一种Android设备音频数据接入方法与流程

专利2024-08-09  17


本发明涉及音频处理领域,尤其涉及一种能够将远程音频送入hal的执行方法。



背景技术:

目前android设备打开录音功能,只能录制本地声卡的数据,无法直接录制远程声卡的数据,也就是无法直接实现远程录音。这是因为正常的音频数据录制都是从硬件模块声卡来的,声卡通过ad转换,把模拟的声音数据转换成数字的pcm等协议的数据,然后送到声卡数据队列、audiohal层,当应用层需要调取的时候再进行调用。如现有技术cn111596885a的音频数据处理方法、服务器及存储介质方案中,是通过单独修改audiohal和audiorecordapk,自己建了一条收发通路,通用性不足。又如现有技术cn110808060a-音频处理方法、装置、设备及计算机可读存储介质的方案,采用的是本地麦克风和播放器使用两张虚拟声卡,本地的麦克风的录音不直接播放,而是传到远端,再传回本地。这样防止麦克风的回音,也就是听到多次自己说的话。



技术实现要素:

为此,需要提供一种能够直接将远程数据填充到声卡数据队列的应用方法;

为实现上述目的,发明人提供了一种android设备音频数据接入方法,包括如下步骤,android设备系统层启动rtsp客户端接收远端rtsp服务端发送的数据,

rtsp服务端接收到数据后,进行rtp协议解包得到预设格式的音频数据;

预设格式的音频数据经过解码后,得到pcm格式的裸音频数据;

启动binderserver,将pcm格式的裸音频数据数据送入binderserver,等待binder客户端取数据;

在audiohal层启动binder客户端,根据预设的数据封装传输格式从binderserver获取pcm数据,送声卡数据队列。

audiohal从声卡数据队列中读取pcm数据,替代从声卡读取数据流程。

进一步地,还包括步骤,进行多路混音,包括将接收到的多条远端rtsp数据进行混音。

进一步地,还包括步骤,对多路混音结果进行去噪。

具体地,所述预设格式为acc格式。

具体地,所述初次解包为rtp协议解包。

具体地,所述预设的数据封装传输格式为acc格式。

通过上述方案,能够绕过声卡模块转换模拟声音的功能,转而直接把binder服务端获取到的pcm数据填到声卡数据队列供audiohal读取。audiohal从声卡数据队列中读取pcm数据,从而完成跳过本地声卡模块获取模拟声音数据的步骤,达到直接接收远程声卡音频的技术效果。

附图说明

图1为本发明一实施方式所述的android设备音频数据接入方法流程图。

具体实施方式

为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。

一种android设备音频数据接入方法,适用于固化了安卓内核的设备,在需要调用音频数据时,进行如下步骤,s100、android设备系统层启动rtspclient,接收远端rtspserver发送的数据。rtsp:realtimestreamingprotocol实时流传输协议,是tcp/ip协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过ip网络传送多媒体数据。而rtspclient,即rtsp客户端,其加载在本地的android设备之中,需要对流媒体数据进行处理时启用。另一方面,rtspserver,即rtsp服务端,可以是远程网络上的多媒体数据推送端。该远程网络上的数据推送端与上述本地的设备通信连接。

s101、当rtspclient接收到数据后,根据rtp协议进行解包得到预设格式(如aac格式)的音频数据。这里的预设格式为便于远程传输的预设封装格式。

s102、本地服务在对预设格式的音频数据进行解码后,得到pcm格式裸音频数据;

s104、启动binderserver,pcm数据送入binderserver,等待binder客户端取数据。binder:活页夹,android中主要用来实现进程之间的通信,用来接收binder驱动发送的消息。binderclient的代码片段是内置在audiohal(音频硬件抽象层,是音频处理下面的一个组件)中的,编译出来是集成在audiohal的库中的。binderclient用于在audiohal中,让audiohal通过binderclient去连接binderserver取数据。binder分为三类,包括服务端、客户端、驱动端,binder驱动是binder服务端和binder客户端之间连接的一个桥梁,当一个服务端binder被创建出来的时候,系统同时会在binder驱动中创建另外一个binder对象,当客户端想要访问远程的binder服务端的时候,都是通过这个binder对象来完成的。所述等待binder客户端取数据即为等待binder客户端线程进行提取数据的工作。pcm数据在步骤s104送到的是binder服务端,客户端被audiohal层启动后就会去服务端提取数据,再搬到下一级声卡队列(声卡队列,也就是声卡模块获取数据的内存。因此方案还包括步骤,s105、audiohal层启动binder客户端;binder客户端根据预设的数据封装传输格式从binderserver获取pcm数据,然后将pcm数据送入声卡数据队列。audiohal从直接声卡数据队列中读取pcm数据,替代原始的从本地声卡中读取数据的流程。

正常的音频数据录制都是从硬件声卡模块获取。声卡通过ad转换,把模拟的声音数据转换成数字的pcm等协议格式数据,然后送到声卡数据队列,audiohal层,再往应用层送。而本案的方法是绕过本地声卡模块的功能,直接把binder服务端获取到的pcm数据填到声卡数据队列供audiohal读取。audiohal从声卡数据队列中读取pcm数据,从而完成跳过本地声卡模块获取模拟声音数据的步骤,达到直接接收远程声卡音频的技术效果。

具体地,还包括步骤,进行多路混音,包括将接收到的多路远端rtsp数据进行混音,也可以是将远端rtsp数据进行混音与本地音频数据进行混音。在进一步的实施例中,还包括步骤,对多路混音结果进行去噪,通过上述方式,能够更好地达到混音播放,增强方案的实用性的技术效果。通过类似属性修改的方法,用户可以选择录制本地声卡还是远端设备推送的rtsp数据,或者两者的混音。rtsp音频流是现有的通用性高的从客户端传输数据的方式。

需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。


技术特征:

1.一种android设备音频数据接入方法,其特征在于,包括如下步骤,android设备系统层启动rtsp客户端接收远端rtsp服务端发送的数据,

rtsp服务端接收到数据后,进行初次解包得到预设格式的音频数据;

预设格式的音频数据经过解码后,得到pcm格式的裸音频数据;

启动binderserver,将pcm格式的裸音频数据数据送入binderserver,等待binder客户端取数据;

在audiohal层启动binder客户端,根据预设的数据封装传输格式从binderserver获取pcm数据,送声卡数据队列;

audiohal从声卡数据队列中读取pcm数据。

2.根据权利要求1所述的android设备音频数据接入方法,其特征在于,还包括步骤,进行多路混音,包括将接收到的远端rtsp数据与本地音频数据进行混音。

3.根据权利要求1所述的android设备音频数据接入方法,其特征在于,还包括步骤,进行多路混音,包括将接收到的多条远端rtsp数据进行混音。

4.根据权利要求2或3其中一条所述的android设备音频数据接入方法,其特征在于,还包括步骤,对多路混音结果进行去噪。

5.根据权利要求1所述的android设备音频数据接入方法,其特征在于,所述预设格式为acc格式。

6.根据权利要求1所述的android设备音频数据接入方法,其特征在于,所述初次解包为rtp协议解包。

7.根据权利要求1所述的android设备音频数据接入方法,其特征在于,所述预设的数据封装传输格式为acc格式。

技术总结
一种Android设备音频数据接入方法,其特征在于,包括如下步骤,Android设备系统层启动RTSP客户端接收远端RTSP服务端发送的数据,RTSP服务端接收到数据后,进行rtp协议解包得到预设格式的音频数据;预设格式的音频数据经过解码后,得到pcm格式的裸音频数据;启动binder server,将pcm格式的裸音频数据数据送入binder server,等待binder客户端取数据;在Audio hal层启动binder客户端,根据预设的数据封装传输格式从binder server获取pcm数据,送声卡数据队列。通过上述方案,能够绕过声卡模块转换模拟声音的功能,转而直接把binder服务端获取到的pcm数据填到声卡数据队列供Audio hal读取。Audio hal从声卡数据队列中读取PCM数据,从而完成跳过本地声卡模块获取模拟声音数据的步骤,达到直接接收远程声卡音频的技术效果。

技术研发人员:吴丽;张昊;翁温民
受保护的技术使用者:瑞芯微电子股份有限公司
技术研发日:2020.12.16
技术公布日:2021.04.06

转载请注明原文地址:https://xbbs.6miu.com/read-21029.html