一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于云手机的音频输出方法、装置及计算机设备、存储介质与流程

2021-10-08 23:21:00 来源:中国专利 TAG:计算机 装置 音频输出 特别 方法


1.本技术涉及计算机技术领域,特别是涉及一种基于云手机的音频输出方法、装置及计算机设备、存储介质。


背景技术:

2.随着5g技术的高速发展,借助5g高带宽、低时延的特性,结合云端大容量、高性能的运算及存储资源,终端的运算和存储能力逐渐迁移到云端,本地和云端只需进行指令、音频、视频流的交互,便可实现远程操控云端系统,畅想云端无限存储、计算资源的效果。云

端音频传输是云侧和端侧协同的关键技术,同时可为云手机、云游戏、云办公等场景赋能,提供更流程、更安全、体验更佳的5g云服务。
3.目前,云手机服务端音频输出数据获取过程中,现有方案云手机的服务端只能从android application framework层调用原有的api接口,要经过相当长的函数调用流程,而且只能使用java语言来实现,不能使用c/c 等更底层的语言实现,导致代码执行效率不高,最终会增加云手机服务端到云手机客户端音频数据传输的延时时间,导致数据传输效率低的技术问题。


技术实现要素:

4.基于此,有必要针对上述技术问题,提供一种能够提高数据传输效率的的基于云手机的音频输出方法、装置及计算机设备、存储介质。
5.本发明技术方案如下:
6.一种基于云手机的音频输出方法,所述方法基于云端音频输出系统进行,所述云端音频输出系统包括服务器端和客户端,所述服务器端包括服务器端android侧和服务器端协议侧,所述客户端android侧和客户端协议侧;所述方法包括:
7.步骤s100:当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
8.步骤s200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
9.步骤s300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
10.步骤s400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
11.进一步地说,步骤s300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;之前还包括:
12.步骤s310:初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于
所述第一共享内存区使当服务器android侧有音频数据产生时,对android侧hal层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
13.步骤s320:在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
14.进一步地说,步骤s200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;具体包括:
15.步骤s210:基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
16.步骤s220:在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
17.步骤s230:在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
18.write_vmic_output_stream(encode_data,encode_len)。
19.进一步地说,步骤s300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;具体包括:
20.在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
21.uint32_t audioengine::readinputdatastream(void*buffer,uint32_t len)函数。
22.进一步地说,步骤s400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放;具体包括:
23.步骤s410:所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
24.步骤s420:所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
25.进一步地说,一种基于云手机的音频输出装置,所述装置包括:
26.获取音频模块,用于当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
27.编码音频模块,用于基于获取的所述原始音频数据,对所述原始音频数据作编码
处理,并在编码处理完成后生成已编码音频数据;
28.数据发送模块,用于在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
29.解码处理模块,用于基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
30.进一步地说,所述装置还包括:
31.编码压缩模块,用于初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器android侧有音频数据产生时,对android侧hal层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
32.共享内存模块,用于在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
33.进一步地说,所述装置还包括:
34.原始音频模块,用于基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数:
35.数据保存模块,用于在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data:
36.函数调用,用于在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
37.write_vmic_output_stream(encode_data,encode_len);
38.编码协议模块,用于在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
39.uint32_t audioengine::readinputdatastream(void*buffer,uint32_t len)函数;
40.网络模块模块,用于所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
41.数据解码模块,用于所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
42.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于云手机的音频输出方法所述的步骤。
43.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执
行时实现上述基于云手机的音频输出方法所述的步骤。
44.本发明实现技术效果如下:
45.1、上述基于云手机的音频输出方法、装置及计算机设备,通过设置服务器端和客户端,并使所述服务器端包括服务器端android侧和服务器端协议侧,所述客户端android侧和客户端协议侧;接着依次通过当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;然后在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;再接着基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放,进而实现直接从hal层获取音频输出数据,从而减少函数调用流程和数据的拷贝次数,此外云手机的服务端可以直接使用c/c 语言来实现,从而提高代码的执行效率,减少传输延时。
46.2、本发明还通过从hal层直接获取的音频数据,采用共享内存的方式进行进程间数据共享,还可以实现高效的共享内存消息队列,此共享内存消息队列不仅使用于云手机音频的数据传输,也适用于云手机camera,touch,sensor等数据的传输。
附图说明
47.构成本技术的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
48.图1为一个实施例中基于云手机的音频输出方法的流程示意图;
49.图2为一个实施例中基于云手机的音频输出装置的结构框图;
50.图3为一个实施例中计算机设备的内部结构图。
具体实施方式
51.下面对本发明的具体实施方式进行详细地说明。以下示例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
52.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
53.为了使本领域的技术人员更好的理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,在本领域普通技术人员没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护范围。
54.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
55.在一个实施例中,如图1所示,提供了一种基于云手机的音频输出方法,所述方法基于云端音频输出系统进行,所述云端音频输出系统包括服务器端和客户端,所述服务器端包括服务器端android侧和服务器端协议侧,所述客户端android侧和客户端协议侧;所述方法包括:
56.步骤s100:当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
57.具体而言,较之现有技术中,android音频整体设计框架时,android服务器端产生的音频数据要经历从linux kernel

hal

media server

binder ipc proxies

native framework

jni

application framework等一系列流程,最终才可以获取到音频输出数据,这样导致要经过相当长的函数调用流程,进而导致传输效率低的问题,而本步骤中,通过基于所述服务器端android侧从android的hal层获取音频输出数据,进而实现高效数据获取与传输,进而为后续实现基于云手机的音频输出。
58.步骤s200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
59.具体地,本实施例中,对所述原始音频数据作编码处理,为使用opus进行编解码,也即本步骤中基于opus进行编码处理,当然在后续中也可以基于opus进行解码。
60.更进一步地,opus编码器是一个有损声音编码的格式,适用于网络上的实时声音传输。而本步骤中通过编码后的音频数据压缩比可以达到10,较之现有技术中其他编码方式,本实施例中的opus编码器可以实现大大减少了服务器端到客户端的音频数据传输,减少网络传输带宽,提高传输效率。
61.步骤s300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
62.具体而言,本实施例中通过共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧实现了数据的高效快速传递。
63.进一步地,
64.步骤s400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
65.具体而言,本发明通过设置服务器端和客户端,并使所述服务器端包括服务器端android侧和服务器端协议侧,所述客户端android侧和客户端协议侧;接着依次通过当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;然后在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;再接着基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户
service端所提供的接口服务。
78.更进一步地,在adev_open_output_stream()设备初始化函数中需要先调用init_vimc_output_stream()函数初始化一块共享内存缓存区队列,即所述第一共享内存区。同时并调用init_opus_encoder()函数初始化opus音频编码参数。
79.步骤s320:在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
80.具体地,服务器端协议侧作为一个单独的进程运行于android系统中,可以作为binder client端去调用binder service端所提供的接口服务。
81.更进一步地,可以通过sipcld id对初始化的内存缓存区进行标识,以及uint32_t capacity来实现初始化的内存缓存区的大小。
82.因为初始化时传入的id和服务器android侧初始化传入的id为同一个id,因此两个进程初始化的是同一块共享内存缓存区,也即所述第二共享内存区与所述第一共享内存区为同一内存缓存区。
83.在一个实施例中,还可以设置音频播放的采样率、音频播放的通道数以及每次写共享内存的包大小,可以实现基于设置的所述音频播放的采样率、所述音频播放的通道数以及每次写共享内存的包大小,计算出每秒产生的音频数据包数,进而可以计算出每写一包数据的时间间隔,减去此处代码执行的耗时,最终可以得到当前音频数据输出线程需要sleep的时间,最终实现音频数据播放的同步。
84.在一个实施例中,步骤s200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;具体包括:
85.步骤s210:基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
86.进一步地,由于android hal层输出的音频数据是原始的pcm数据,数据量较大,为了减少数据传输量,故通过本步骤中,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,实现了通过对原始的音频数据进行压缩后再传输,提升传输效率。
87.步骤s220:在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
88.步骤s230:在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
89.write_vmic_output_stream(encode_data,encode_len)。
90.进一步地,本步骤中,先通过调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存,再调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内,实现了数据快速便捷地写入至所述第一共享内存
区内。
91.在一个实施例中,步骤s300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;具体包括:
92.在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
93.uint32_t audioengine::readinputdatastream(void*buffer,uint32_t len)函数。
94.进一步地说,本发明还通过从hal层直接获取的音频数据,采用共享内存的方式进行进程间数据共享,还可以实现高效的共享内存消息队列,此共享内存消息队列不仅使用于云手机音频的数据传输,也适用于云手机camera,touch,sensor等数据的传输。
95.在一个实施例中,步骤s400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放;具体包括:
96.步骤s410:所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
97.进一步地,通过网络模块的方式能够实现数据的高效传输,实现客户端协议侧与所述服务器端协议侧之间的音频数据的传输。
98.步骤s420:所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
99.在一个实施例中,如图2所示,一种基于云手机的音频输出装置,所述装置包括:
100.获取音频模块,用于当有音频输出器件输出音频数据时,基于所述服务器端android侧从android的hal层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
101.编码音频模块,用于基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
102.数据发送模块,用于在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
103.解码处理模块,用于基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
104.在一个实施例中,所述装置还包括:
105.编码压缩模块,用于初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器android侧有音频数据产生时,对android侧hal层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
106.共享内存模块,用于在所述服务器端协议侧中初始化一块专用于音频数据读写的
特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
107.在一个实施例中,所述装置还包括:
108.原始音频模块,用于基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
109.数据保存模块,用于在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
110.函数调用,用于在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
111.write_vmic_output_stream(encode_data,encode_len);
112.编码协议模块,用于在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
113.uint32_t audioengine::readinputdatastream(void*buffer,uint32_t len)函数;
114.网络模块模块,用于所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
115.数据解码模块,用于所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端android侧的音频实现框架对已解码音频数据进行播放。
116.在一个实施例中,如图3所示,一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于云手机的音频输出方法所述的步骤。
117.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于云手机的音频输出方法所述的步骤。
118.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram
(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
119.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
120.需知,本技术中所涉及到的代码以及相关编程类的函数,均为实现音频数据处理过程中的手段,虽利用相关编程手段,但这绝非意味着本技术中的技术方案仅为单纯编程算法,而是实现对音频数据处理过程中的完整技术方案,属于专利法中发明的保护客体,特此说明。
121.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文章

  • 日榜
  • 周榜
  • 月榜