应用音频隔离采集的方法、装置、存储介质及设备与流程

文档序号:20276160发布日期:2020-04-07 14:29阅读:132来源:国知局
应用音频隔离采集的方法、装置、存储介质及设备与流程

本发明涉及云计算技术领域,具体而言,涉及一种应用音频隔离采集的方法、装置、存储介质及设备。



背景技术:

应用流化是指将应用运行在云端,并将应用运行过程中的显示输出、声音输出实时采集编码后经过网络实时传输给终端,终端实时解码后进行输出,并且终端侧对应用的控制操作可经过网络实时传送给云端实现对应用的控制。

现有技术中,在linux系统上实现应用流化的方式主要有两种,一种是采用虚拟机实现,在该方式下,每一个虚拟机同时只为一个客户端提供服务,应用的声音就是虚拟机的系统当前播放的声音,通过直接采集系统当前播放的声音就可以实现声音的隔离采集;但由于该方式中虚拟机的数量与应用的并发数量相同,所以存在着成本高的缺陷。另一种方式是在一个linux系统上能同时流化多路应用,该方式成本较低,但在linux系统上实现应用流化时,是通过访问虚拟声卡设备实现系统声音的采集,该方式中如果要实现多路应用进程的声音采集,则需要部署大量的虚拟声卡设备,此时会影响系统的稳定性,并且需要修改应用以保证应用将声音正确的输出到对应的虚拟声卡上。



技术实现要素:

有鉴于此,本发明提供一种应用音频隔离采集的方法、装置、存储介质及设备,以在保证系统性能的前提下实现声音的隔离采集,并节省成本。

具体地,本发明是通过如下技术方案实现的:

第一方面,本发明实施例中提供了一种应用音频隔离采集的方法,包括:

在声卡驱动层采集目标应用进程的待输出声音数据;

将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区;

通过应用流化控制层实时读取声音缓存区,从所述目标声音缓存区中获取所述待输出声音数据,对所述待输出声音数据进行编码。

第二方面,本发明实施例提供了一种音频隔离采集的装置,包括:

采集模块,用于在声卡驱动层采集目标应用进程的待输出声音数据;

存储模块,用于将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区;

获取模块,用于通过应用流化控制层实时读取声音缓存区,从所述目标声音缓存区中获取所述待输出声音数据,对所述待输出声音数据进行编码。

第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面所述方法的步骤。

第四方面,本本发明实施例还提供了一种计算机设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如第一方面所述的方法步骤。

本发明实施例中提供的一种应用音频隔离采集的方法,通过在声卡驱动层采集应用进程的待输出声音数据,并将该待输出声音数据存储至与该应用进程对应的声音缓存区,并且通过应用流化控制层实时读取各声音缓存区,使得编码器及时获得该应用进程的待输出声音数据后进行编码;进而实现了各应用进程间的音频的隔离采集、编码,相对于现有技术无需设置大量虚拟机或者设置大量的虚拟声卡设备就可以实现多路应用进程的音频隔离采集,具有成本低、不影响系统性能、无需对应用本身进行改变等积极效果。

附图说明

图1是一种应用流化的应用场景示意图;

图2是本发明一示例性实施例示出的一种应用音频隔离采集的方法的流程示意图;

图3是本发明一示例性实施例示出的采集目标应用进程的待输出声音数据的流程示意图;

图4是本发明一示例性实施例示出的一种音频隔离采集编码的流程示意图;

图5是本发明一示例性实施例示出的一种音频隔离采集的装置的结构示意图;

图6是本发明一示例性实施例示出的一种计算机设备的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

图1是一种应用流化的应用场景示意图;参照图1所示,在该应用流化的场景中,应用运行在云端服务器上,针对不同的客户端发送的应用启动请求,云端服务器会启动不同的应用进程,各应用进程在运行过程中所产生的音频数据会被隔离采集,由应用流化控制层将采集的音频数据和视频数据进行编码、打包,最后推送至客户端进行解码后输出。

针对于上述的应用场景,本发明实施例提供了一种应用音频隔离采集的方法,以实现同一应用的不同应用进程之间能够独立、互不影响的进行音频的采集和编码。

图2是本发明一示例性实施例示出的一种应用音频隔离采集的方法的流程示意图;本发明实施例中提供的应用音频隔离采集的方法应用于云端服务器,参照图2所示,该方法包括如下步骤s10-s30:

s10、在声卡驱动层采集目标应用进程的待输出声音数据。

可选的,为适配各种类型终端设备(客户端设备)的解码要求,可以是设置不同的采样率;进而上述在进行采集待输出声音数据时,服务器根据请求启动该应用进程的终端设备的类型,选取匹配的采样率,按照该采样率采集待输出声音数据。

示例性的,上述设定的采样率可以是包括:32000hz、44100hz、48000hz等多种采样率。

当有应用进程需要播放待输出声音数据时,该应用进程会调用系统的声音播放api(applicationprogramminginterface,应用程序接口)。

图3是本发明一示例性实施例示出的采集目标应用进程的待输出声音数据的流程示意图。参照图3所示,本发明实施例中,上述步骤s10,具体包括如下步骤s101-s102:

s101、在声卡驱动层若接收到应用进程所发出的调用声音播放api的请求,则获取所述应用进程的标识。

上述应用进程所发出的调用声音播放api的请求中,携带了应用进程的标识,进而从该请求中可以得到该应用进程的标识。

s102、依据所述应用进程的标识,判断所述应用进程是否是目标应用进程,若是,则采集所述目标应用进程的待输出声音数据。

本发明一实施例中,预先建立一个第一映射表,在该第一映射表中记录了分配到该服务器上的用户标识与用户启动的所有应用进程pid(包括应用的主进程pid和子进程pid)的映射关系。应用流化控制层在每当有应用进程启动后,都会更新该第一映射表。

进而本发明实施例中,上述可以是通过查找该应用进程的标识是否存在于第一映射表中的方式判断该应用进程是否是待进行音频隔离采集的应用进程(目标应用进程);具体的,若查找该应用进程的标识存在于上述的第一映射表中,则判断所述应用进程是待进行音频隔离采集的应用进程(目标应用进程),若不存在,则判断所述应用进程不是待进行音频隔离采集的应用进程,不需要进行音频隔离采集。对于需要进行音频隔离采集的应用进程,采集该应用进程的待输出声音数据。

s20、将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区。

本发明实施例中,通过在声卡驱动层采集应用进程的待输出声音数据,将采集的待输出声音数据存储在与该应用进程对应的目标声音缓存区,进而实现了各应用进程间的音频的隔离采集,相对于现有技术,无需设置大量的虚拟机或者虚拟声卡设备就可以实现多路应用进程的音频隔离采集,具有成本低、不影响系统性能、无需改变应用本身和应用不感知等积极效果。

本发明一可选的实施例中,上述步骤s20中具体包括如下步骤a10-a20:

步骤a10、查找与所述应用进程对应的目标声音缓存区,若查找到,则将所述待输出声音数据存储至所述目标声音缓存区。

上述各声音缓存区设置有与应用进程的标识(pid)的映射关系,进而通过应用进程的标识(pid)就可以查找到是否有与之对应的目标声音缓存区。

步骤a20、若未查找到,则创建与所述目标应用进程对应的声音缓存区作为目标声音缓存区,并将所述待输出声音数据存储至所述目标声音缓存区。

本实施例中,在采集到应用进程的待输出声音数据后,根据该应用进程的标识查找与该应用进程对应的目标声音缓存区,若未查找到,则说明未建立过该应用进程所对应的声音缓存区,此时会建立该应用进程所对应的声音缓存区,然后将该待输出声音数据存储至建立完成的声音缓存区。

s30、通过应用流化控制层实时读取声音缓存区,从所述目标声音缓存区中获取所述待输出声音数据,并对所述待输出声音数据进行编码。

本发明实施例中,应用流化控制层会实时读取各声音缓存区,比如采用轮询的方式读取;每当声音缓存区中存在有待输出声音数据时,都会获取该待输出声音数据,并对获取的该待输出声音数据进行编码。

本发明一可选的实施例中,上述步骤s20中,具体包括:

获取采集所述待输出声音数据的时间戳,将所述时间戳和所述待输出声音数据共同存储至所述目标声音缓存区。

进而本实施例中,在采集待输出声音数据的同时记录当前时间戳,并且在将待输出声音数据存储至目标声音缓存区中时,同时存储该时间戳,进而使得应用流化控制层在将该待输出数据编码后,参照该时间戳将编码后的待输出声音数据与同一时间的视频数据进行打包、推流,进而严格保证音视频的同步。

本发明一可选的实施例中,在上述步骤s20,将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区后,所述方法还包括如下步骤b10:

步骤b10、参照所述目标声音缓存区所配置的指定缓存时间,在所述待输出声音数据的缓存时间超出所述指定缓存时间后,将所述待输出声音数据从所述目标声音缓存区中删除。

本发明实施例中,在建立声音缓存区的时候,同时配置该缓存区的指定缓存时间,当声音数据在该声音缓存区中存储的时间大于该指定缓存时间后,将声音数据从该声音缓存区内删除,如此可以实现只在声音缓存区内保留有限的声音数据,保证应用流化控制层始终获取的是实时的声音数据,并且节约了声音缓存区的资源。

本发明另一可能的实施例中,在上述步骤s20,将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区后,所述方法还包括如下步骤c10:

步骤c10、若检测到所述应用流化控制层已经从所述目标声音缓存区获取了所述待输出声音数据,则将所述待输出声音数据从所述目标缓存区中删除。

进而本发明实施例中,通过设置检测到目标声音缓存区中的声音数据在被应用流化控制层获取以后及时从该声音缓存区中删除,一方面节约了声音缓存区的资源,另一方面也保证了应用流化控制层不会重复获取相同的声音数据。

本发明一实施例中,上述方法,还包括如下步骤d10:

步骤d10、在所述目标应用进程不再有声音数据输出的情况下,将所述目标声音缓存区释放。

可选的,在建立声音缓存区后,若接收到目标应用进程发送的调用停止播放api的请求,则将所述应用进程标识所对应的声音缓存区释放;或者,通过读取第一映射表中的应用进程的标识,将应用进程的标识已经不在该第一映射表中的应用进程所对应的声音缓存区释放。

图4是本发明一示例性实施例示出的一种音频隔离采集编码的具体实现的流程示意图;参照图4所示,本实施例中,通过应用流化控制层维护第一映射表,该第一映射表是在启动应用前已经创建;该第一映射表中记录了应用的应用id和该应用下所启动的应用进程的标识的映射关系;应用流化控制层控制启动应用进程,并在启动应用进程以后更新第一映射表,将启动的该应用进程的标识和该应用id的映射关系存储于第一映射表中。

在声卡驱动层,以图示中的应用进程1为例,应用进程1在运行过程中若产生了待输出声音数据,该应用进程1在要播放该待输出声音数据时,会向声卡驱动层发出调用声音播放api的请求,此时声音隔离采集进程在声卡驱动层获取该调用声音播放api的请求,从该请求中得到应用进程1的标识,并查找该应用进程1的标识是否存在于第一映射表中,若存在,则采集该应用进程1的待输出声音数据,并将采集的该待输出声音数据存储于与该应用进程1对应的目标声音缓存区。本实施例中,上述的应用流化控制层会实时读取各应用进程分别对应的声音缓存区,若上述的目标声音缓存区存放有待输出声音数据时,该应用流化控制层会获取该待输出声音数据,对该待输出声音数据进行编码,并将编码后的待输出声音数据与对应的视频数据打包后推流至客户端,有客户端进行播放。

本实施例中,基于linux系统中应用声音播放机制,选择在声卡驱动层实现各应用进程的待输出声音数据的采集。其中,在声卡驱动层完成待输出声音数据的采集,至少具有以下优势:

1、应用不感知,不影响应用的正常运行,不需要对应用做任何修改或适配,进而保证了本发明方案的普适性;

2、从应用请求调用声音播放api到待输出声音数据到达声卡驱动层没有中间环节,可以保证待输出声音数据采集的实时性;

3、只需要做轻量级的修改就可以实现应用的各应用进程声音的隔离采集,性能损耗低,可靠性高,成本低。

并且,声卡驱动层与应用流化控制层采用第一映射表(应用与pid映射表)、应用声音缓存区实现交互,采用纯异步逻辑,声音的采集过程不对应用正常运行产生任何影响,始终能正确完整采集到指定应用的声音。可覆盖以下各种场景:

a.应用启动时就开始播放声音;

b.应用启动时没有声音,运行中途播放声音;

c.应用中途声音播放停止,然后又恢复播放;

d.应用子进程间切换播放声音。

再者,本发明中应用流化控制层只将当前需要进行音频隔离采集的应用进程的标识维护到第一映射表中,在声卡驱动层只对需要进行音频隔离采集的应用进程进行待输出声音数据进行采集,避免了不必要的性能损失,节约系统资源。

进而,本发明上述实施例,能够适用任何类型的应用的声音隔离采集和编码,并且具有:保证声音采集编码与视频编码同步,进而保证终端音视频播放的同步;保证各种应用的各种格式的音频都能准确的采集编码,保证电视终端播放始终正常等优点。

图5是本发明一示例性实施例示出的一种音频隔离采集的装置的结构示意图。参照图5所示,本发明实施例中提供的一种音频隔离采集的装置400,包括:

采集模块401,用于在声卡驱动层采集目标应用进程的待输出声音数据;

存储模块402,用于将所述待输出声音数据存储至与所述目标应用进程对应的目标声音缓存区;

获取模块403,用于通过应用流化控制层实时读取声音缓存区,从所述目标声音缓存区中获取所述待输出声音数据,并对所述待输出声音数据进行编码。

可选地,上述采集模块401,包括:

获取单元,用于在声卡驱动层若接收到应用进程所发出的调用声音播放应用程序接口api的请求,则获取所述应用进程的标识;

判断单元,用于依据所述应用进程的标识,判断所述应用进程是否是目标应用进程,若是,则采集所述目标应用进程的待输出声音数据。

可选地,上述判断单元,具体用于:

查找所述应用进程的标识是否存在于已建立的第一映射表中,若存在,则判断所述应用进程是目标应用进程;若不存在,则判断所述应用进程不是目标应用进程;

其中,所述第一映射表中记录了用户标识与该用户启动的所有应用进程的标识的映射关系。

可选地,上述存储模块402,具体用于:

获取采集所述待输出声音数据的时间戳,将所述时间戳和所述待输出声音数据共同存储至所述目标声音缓存区。

可选地,上述存储模块402,具体用于::

查找与所述应用进程对应的目标声音缓存区,若查找到,则将所述待输出声音数据存储至所述目标声音缓存区;

若未查找到,则创建与所述目标应用进程对应的声音缓存区作为目标声音缓存区,并将所述待输出声音数据存储至所述目标声音缓存区。

可选地,上述装置400,还包括:

第一数据处理模块(图中未示出),用于参照所述目标声音缓存区所配置的指定缓存时间,在所述待输出声音数据的缓存时间超出所述指定缓存时间后,将所述待输出声音数据从所述目标声音缓存区中删除。

可选地,上述装置400,还包括:

第二数据处理模块(图中未示出),用于若检测到所述应用流化控制层已经从所述目标声音缓存区获取了所述待输出声音数据,则将所述待输出声音数据从所述目标缓存区中删除。

可选地,上述装置400,还包括:

第三数据处理模块(图中未示出),用于在所述目标应用进程不再有声音数据输出的情况下,将所述目标声音缓存区释放。

本发明另一实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例中所述的应用音频隔离采集的方法的步骤。

图6是本发明一示例性实施例示出的一种计算机设备的结构示意图;如图5所示,本发明实施例提供的一种计算机设备包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,

存储器503,用于存放计算机程序;

处理器501,用于执行存储器503上所存放的程序时,实现上述任一实施例中所述的应用音频隔离采集的方法的步骤。

上述终端提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如eprom、eeprom和闪存设备)、磁盘(例如内部磁盘或可移动盘)、磁光盘以及cdrom和dvd-rom盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。

虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。

类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。

由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1