CN113488065A - 一种基于云手机的音频输出方法、装置及计算机设备、存储介质 - Google Patents

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

Info

Publication number
CN113488065A
CN113488065A CN202110747054.4A CN202110747054A CN113488065A CN 113488065 A CN113488065 A CN 113488065A CN 202110747054 A CN202110747054 A CN 202110747054A CN 113488065 A CN113488065 A CN 113488065A
Authority
CN
China
Prior art keywords
data
audio data
server
shared memory
protocol
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.)
Granted
Application number
CN202110747054.4A
Other languages
English (en)
Other versions
CN113488065B (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.)
Shanghai Zhuoyi Technology Co Ltd
Original Assignee
Shanghai Zhuoyi 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 Shanghai Zhuoyi Technology Co Ltd filed Critical Shanghai Zhuoyi Technology Co Ltd
Priority to CN202110747054.4A priority Critical patent/CN113488065B/zh
Priority claimed from CN202110747054.4A external-priority patent/CN113488065B/zh
Publication of CN113488065A publication Critical patent/CN113488065A/zh
Application granted granted Critical
Publication of CN113488065B publication Critical patent/CN113488065B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/16Vocoder architecture
    • G10L19/173Transcoding, i.e. converting between two coded representations avoiding cascaded coding-decoding
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/0017Lossless audio signal coding; Perfect reconstruction of coded audio signal by transmission of coding error
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/16Vocoder architecture
    • G10L19/167Audio streaming, i.e. formatting and decoding of an encoded audio signal representation into a data stream for transmission or storage purposes

Abstract

本申请涉及基于云手机的音频输出方法、装置及计算机设备、存储介质,包基于所述服务器端Android侧从Android的HAL层获取音频输出数据;对原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;在生成已编码音频数据后,以共享内存的存储方式将已编码音频数据发送至所述服务器端协议侧;基于所述客户端协议侧接收服务器端协议侧发送的已编码音频数据,并对已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。本发明直接从HAL层获取音频输出数据,从而减少函数调用流程和数据的拷贝次数,此外云手机的服务端可以直接使用C/C++语言来实现,从而提高代码的执行效率,减少传输延时。

Description

一种基于云手机的音频输出方法、装置及计算机设备、存储 介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种基于云手机的音频输出方法、装置及计算机设备、存储介质。
背景技术
随着5G技术的高速发展,借助5G高带宽、低时延的特性,结合云端大容量、高性能的运算及存储资源,终端的运算和存储能力逐渐迁移到云端,本地和云端只需进行指令、音频、视频流的交互,便可实现远程操控云端系统,畅想云端无限存储、计算资源的效果。云-端音频传输是云侧和端侧协同的关键技术,同时可为云手机、云游戏、云办公等场景赋能,提供更流程、更安全、体验更佳的5G云服务。
目前,云手机服务端音频输出数据获取过程中,现有方案云手机的服务端只能从Android application framework层调用原有的API接口,要经过相当长的函数调用流程,而且只能使用java语言来实现,不能使用C/C++等更底层的语言实现,导致代码执行效率不高,最终会增加云手机服务端到云手机客户端音频数据传输的延时时间,导致数据传输效率低的技术问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高数据传输效率的的基于云手机的音频输出方法、装置及计算机设备、存储介质。
本发明技术方案如下:
一种基于云手机的音频输出方法,所述方法基于云端音频输出系统进行,所述云端音频输出系统包括服务器端和客户端,所述服务器端包括服务器端Android侧和服务器端协议侧,所述客户端Android侧和客户端协议侧;所述方法包括:
步骤S100:当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
进一步地说,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;之前还包括:
步骤S310:初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
步骤S320:在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
进一步地说,步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;具体包括:
步骤S210:基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
步骤S220:在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
步骤S230:在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len)。
进一步地说,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;具体包括:
在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_t len)函数。
进一步地说,步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放;具体包括:
步骤S410:所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
步骤S420:所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
进一步地说,一种基于云手机的音频输出装置,所述装置包括:
获取音频模块,用于当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
编码音频模块,用于基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
数据发送模块,用于在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
解码处理模块,用于基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
进一步地说,所述装置还包括:
编码压缩模块,用于初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
共享内存模块,用于在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
进一步地说,所述装置还包括:
原始音频模块,用于基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数:
数据保存模块,用于在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data:
函数调用,用于在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len);
编码协议模块,用于在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binderservice端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_t len)函数;
网络模块模块,用于所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
数据解码模块,用于所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于云手机的音频输出方法所述的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于云手机的音频输出方法所述的步骤。
本发明实现技术效果如下:
1、上述基于云手机的音频输出方法、装置及计算机设备,通过设置服务器端和客户端,并使所述服务器端包括服务器端Android侧和服务器端协议侧,所述客户端Android侧和客户端协议侧;接着依次通过当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;然后在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;再接着基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放,进而实现直接从HAL层获取音频输出数据,从而减少函数调用流程和数据的拷贝次数,此外云手机的服务端可以直接使用C/C++语言来实现,从而提高代码的执行效率,减少传输延时。
2、本发明还通过从HAL层直接获取的音频数据,采用共享内存的方式进行进程间数据共享,还可以实现高效的共享内存消息队列,此共享内存消息队列不仅使用于云手机音频的数据传输,也适用于云手机camera,touch,sensor等数据的传输。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为一个实施例中基于云手机的音频输出方法的流程示意图;
图2为一个实施例中基于云手机的音频输出装置的结构框图;
图3为一个实施例中计算机设备的内部结构图。
具体实施方式
下面对本发明的具体实施方式进行详细地说明。以下示例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本领域的技术人员更好的理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,在本领域普通技术人员没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
在一个实施例中,如图1所示,提供了一种基于云手机的音频输出方法,所述方法基于云端音频输出系统进行,所述云端音频输出系统包括服务器端和客户端,所述服务器端包括服务器端Android侧和服务器端协议侧,所述客户端Android侧和客户端协议侧;所述方法包括:
步骤S100:当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
具体而言,较之现有技术中,Android音频整体设计框架时,Android服务器端产生的音频数据要经历从LINUX KERNEL→HAL→MEDIA SERVER→BINDER IPC PROXIES→NATIVEFRAMEWORK→JNI→APPLICATION FRAMEWORK等一系列流程,最终才可以获取到音频输出数据,这样导致要经过相当长的函数调用流程,进而导致传输效率低的问题,而本步骤中,通过基于所述服务器端Android侧从Android的HAL层获取音频输出数据,进而实现高效数据获取与传输,进而为后续实现基于云手机的音频输出。
步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
具体地,本实施例中,对所述原始音频数据作编码处理,为使用opus进行编解码,也即本步骤中基于opus进行编码处理,当然在后续中也可以基于opus进行解码。
更进一步地,Opus编码器是一个有损声音编码的格式,适用于网络上的实时声音传输。而本步骤中通过编码后的音频数据压缩比可以达到10,较之现有技术中其他编码方式,本实施例中的Opus编码器可以实现大大减少了服务器端到客户端的音频数据传输,减少网络传输带宽,提高传输效率。
步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
具体而言,本实施例中通过共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧实现了数据的高效快速传递。
进一步地,
步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
具体而言,本发明通过设置服务器端和客户端,并使所述服务器端包括服务器端Android侧和服务器端协议侧,所述客户端Android侧和客户端协议侧;接着依次通过当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;然后在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;再接着基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放,进而实现直接从HAL层获取音频输出数据,从而减少函数调用流程和数据的拷贝次数,此外云手机的服务端可以直接使用C/C++语言来实现,从而提高代码的执行效率,减少传输延时。
在一个实施例中,因现有技术中,服务器端Android侧和服务器端协议侧分别运行在不同进程中,不能进行数据共享。因此服务器端Android侧从HAL层采集到的音频数据不能直接传送到服务器端协议侧的进程中。本申请中,通过共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧。
进一步地,本实施例中,本申请基于binder,IMemory共享内存和信号量实现了一个高速的进程间通信队列。
进一步而言,现有在Linux平台上,进程之间是隔离的,各个进程运行在自己的虚拟地址空间中,如果不采取IPC手段,进程之间是不能互相交换数据的。Linux提供了多种IPC机制,如:信号、管道、socket、信号量、共享内存等,Android是基于Linux系统开发,除了上面的IPC机制以外,Android又提供了一种新的选择:binder。
更具体地说,一个binder的实现包括以下三个方面:一位顶层服务接口类的定义,此类中声明了一系列的纯虚函数作为公共的服务接口。类的头文件名一般为IXXXService.h,服务接口类命令为IXXXService,XXX为服务模块名。二为proxy端又称client端的实现。三为service端的实现。
proxy是相对于service而言,proxy和service都间接继承于IXXXService顶层服务接口类,他们都实现了IXXXService中声明的虚函数接口,所以从外观上看,是没什么区别的。对于用户来说,只需要持有一个IXXXService的指针,就可以调用其服务函数,不用关心这个指针究竟是指向哪个子类的具体实现。
proxy和service内部对于同一个函数的实现是有差异的,在proxy端的实现中,是将函数的参数打包进容器,然后透过Android提供的binder通信机制传递给service端。service端的实现是从这个容器中读取出对应的参数,然后调用相应的实现函数。从这个角度来说,proxy只是一个空的壳子,它并没有做实际的工作,而是把做实际工作需要的条件打包好,传递给service,由service来完成具体工作。
更进一步地,通过上述基于binder,IMemory共享内存和信号量实现了一个高速的进程间通信队列,实现了数据的传输。
在一个实施例中,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;之前还包括:
步骤S310:初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
具体地,较之现有技术中心使用socket进行数据传输导致的效率低以及会增加音频输出的延时问题,本步骤中通过设置初始化一块专用于音频数据读写的特定的第一共享内存区,实现了共享内存的方式实现高效的进行音频数据的传输和拷贝。
更进一步地,初始化一块专用于音频数据读写的特定的第一共享内存区的功能实现在android HAL层的audio_hw.cpp文件中。
运行于Android的SystemServer进程中,可以做为binder client端去调用binderservice端所提供的接口服务。
更进一步地,在adev_open_output_stream()设备初始化函数中需要先调用init_vimc_output_stream()函数初始化一块共享内存缓存区队列,即所述第一共享内存区。同时并调用init_opus_encoder()函数初始化opus音频编码参数。
步骤S320:在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
具体地,服务器端协议侧作为一个单独的进程运行于android系统中,可以作为binder client端去调用binder service端所提供的接口服务。
更进一步地,可以通过Sipcld id对初始化的内存缓存区进行标识,以及uint32_tcapacity来实现初始化的内存缓存区的大小。
因为初始化时传入的id和服务器Android侧初始化传入的id为同一个id,因此两个进程初始化的是同一块共享内存缓存区,也即所述第二共享内存区与所述第一共享内存区为同一内存缓存区。
在一个实施例中,还可以设置音频播放的采样率、音频播放的通道数以及每次写共享内存的包大小,可以实现基于设置的所述音频播放的采样率、所述音频播放的通道数以及每次写共享内存的包大小,计算出每秒产生的音频数据包数,进而可以计算出每写一包数据的时间间隔,减去此处代码执行的耗时,最终可以得到当前音频数据输出线程需要sleep的时间,最终实现音频数据播放的同步。
在一个实施例中,步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;具体包括:
步骤S210:基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
进一步地,由于Android Hal层输出的音频数据是原始的pcm数据,数据量较大,为了减少数据传输量,故通过本步骤中,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,实现了通过对原始的音频数据进行压缩后再传输,提升传输效率。
步骤S220:在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
步骤S230:在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len)。
进一步地,本步骤中,先通过调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存,再调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内,实现了数据快速便捷地写入至所述第一共享内存区内。
在一个实施例中,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;具体包括:
在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_t len)函数。
进一步地说,本发明还通过从HAL层直接获取的音频数据,采用共享内存的方式进行进程间数据共享,还可以实现高效的共享内存消息队列,此共享内存消息队列不仅使用于云手机音频的数据传输,也适用于云手机camera,touch,sensor等数据的传输。
在一个实施例中,步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放;具体包括:
步骤S410:所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
进一步地,通过网络模块的方式能够实现数据的高效传输,实现客户端协议侧与所述服务器端协议侧之间的音频数据的传输。
步骤S420:所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
在一个实施例中,如图2所示,一种基于云手机的音频输出装置,所述装置包括:
获取音频模块,用于当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
编码音频模块,用于基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
数据发送模块,用于在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
解码处理模块,用于基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
在一个实施例中,所述装置还包括:
编码压缩模块,用于初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
共享内存模块,用于在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
在一个实施例中,所述装置还包括:
原始音频模块,用于基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
数据保存模块,用于在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
函数调用,用于在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len);
编码协议模块,用于在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binderservice端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_t len)函数;
网络模块模块,用于所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
数据解码模块,用于所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
在一个实施例中,如图3所示,一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于云手机的音频输出方法所述的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于云手机的音频输出方法所述的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
需知,本申请中所涉及到的代码以及相关编程类的函数,均为实现音频数据处理过程中的手段,虽利用相关编程手段,但这绝非意味着本申请中的技术方案仅为单纯编程算法,而是实现对音频数据处理过程中的完整技术方案,属于专利法中发明的保护客体,特此说明。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于云手机的音频输出方法,所述方法基于云端音频输出系统进行,所述云端音频输出系统包括服务器端和客户端,所述服务器端包括服务器端Android侧和服务器端协议侧,所述客户端Android侧和客户端协议侧;其特征在于,所述方法包括:
步骤S100:当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
2.根据权利要求1所述的基于云手机的音频输出方法,其特征在于,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;之前还包括:
步骤S310:初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
步骤S320:在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
3.根据权利要求2所述的基于云手机的音频输出方法,其特征在于,步骤S200:基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;具体包括:
步骤S210:基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
步骤S220:在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
步骤S230:在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len)。
4.根据权利要求3所述的基于云手机的音频输出方法,其特征在于,步骤S300:在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;具体包括:
在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binder service端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_tlen)函数。
5.根据权利要求1所述的基于云手机的音频输出方法,其特征在于,步骤S400:基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放;具体包括:
步骤S410:所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
步骤S420:所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
6.一种基于云手机的音频输出装置,其特征在于,所述装置包括:
获取音频模块,用于当有音频输出器件输出音频数据时,基于所述服务器端Android侧从Android的HAL层获取音频输出数据,其中,获取的音频输出数据为原始音频数据;
编码音频模块,用于基于获取的所述原始音频数据,对所述原始音频数据作编码处理,并在编码处理完成后生成已编码音频数据;
数据发送模块,用于在生成所述已编码音频数据后,以共享内存的存储方式将所述已编码音频数据发送至所述服务器端协议侧;
解码处理模块,用于基于所述客户端协议侧接收所述服务器端协议侧发送的已编码音频数据,并对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
7.根据权利要求6所述的基于云手机的音频输出装置,其特征在于,所述装置还包括:
编码压缩模块,用于初始化一块专用于音频数据读写的特定的第一共享内存区,其中,基于所述第一共享内存区使当服务器Android侧有音频数据产生时,对Android侧HAL层音频输出对应的buffer数据进行编码压缩,再将编码后的数据写到第一共享内存区;
共享内存模块,用于在所述服务器端协议侧中初始化一块专用于音频数据读写的特定的第二共享内存区,其中,所述第二共享内存区与所述第一共享内存区为同一内存缓存区,基于所述第二共享内存区,以使服务器Android侧有音频数据产生时,所述服务器端协议侧从所述第二共享内存区中读取编码后的数据,读取的编码后的数据用于经所述服务器端协议侧发送至所述客户端协议侧。
8.根据权利要求6所述的基于云手机的音频输出装置,其特征在于,所述装置还包括:
原始音频模块,用于基于获取的所述原始音频数据,调用第一数据处理函数,并基于所述第一数据处理函数对所述原始音频数据作编码压缩,并生成已编码音频数据;其中,所述第一数据处理函数为opus_encode()函数;
数据保存模块,用于在生成所述已编码音频数据后,调用第一存储数据集,基于所述第一存储数据集将所述原始音频数据保存;其中,所述第一存储数据集为encode_data;
函数调用,用于在保存所述原始音频数据后,调用第一数据写入函数,基于所述第一数据写入函数将所述原始音频数据写入至所述第一共享内存区内;其中,所述第一数据写入函数为:
write_vmic_output_stream(encode_data,encode_len);
编码协议模块,用于在生成所述已编码音频数据后,所述服务器端协议侧调取第一服务端的数据读取函数,基于所述数据读取函数从所述第二共享内存区中读取所述已编码音频数据,其中,所述第一服务端为binder service端;所述数据读取函数为所述binderservice端中的函数,该函数为:
uint32_t AudioEngine::readInputDataStream(void*buffer,uint32_t len)函数;
网络模块模块,用于所述服务器端协议侧通过网络模块将所述已编码音频数据发送至所述客户端协议侧;
数据解码模块,用于所述客户端协议侧对所述已编码音频数据做解码处理,在解码处理后生成已解码音频数据,基于所述客户端Android侧的音频实现框架对已解码音频数据进行播放。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
CN202110747054.4A 2021-07-01 一种基于云手机的音频输出方法、装置及计算机设备、存储介质 Active CN113488065B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110747054.4A CN113488065B (zh) 2021-07-01 一种基于云手机的音频输出方法、装置及计算机设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110747054.4A CN113488065B (zh) 2021-07-01 一种基于云手机的音频输出方法、装置及计算机设备、存储介质

Publications (2)

Publication Number Publication Date
CN113488065A true CN113488065A (zh) 2021-10-08
CN113488065B CN113488065B (zh) 2024-05-14

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114024992A (zh) * 2021-10-19 2022-02-08 北京润信恒达科技有限公司 一种云手机语音通话方法、装置、设备和系统

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275557A1 (en) * 2012-04-12 2013-10-17 Seawell Networks Inc. Methods and systems for real-time transmuxing of streaming media content
CN108259987A (zh) * 2017-12-19 2018-07-06 湖北鸿云科技股份有限公司 移动端低延时流媒体播放器及播放方法
CN108932948A (zh) * 2017-05-26 2018-12-04 腾讯科技(深圳)有限公司 音频数据处理方法、装置、计算机设备和计算机可读存储介质
CN108966197A (zh) * 2018-08-20 2018-12-07 南昌黑鲨科技有限公司 基于蓝牙的音频传输方法、系统、音频播放设备及计算机可读存储介质
CN109817232A (zh) * 2019-01-30 2019-05-28 维沃移动通信有限公司 一种传输方法、终端设备及音频处理装置
CN110149375A (zh) * 2019-04-30 2019-08-20 广州微算互联信息技术有限公司 网络存储云手机间的数据共享方法、系统及存储介质
CN110784525A (zh) * 2019-10-14 2020-02-11 广州微算互联信息技术有限公司 一种基于h5网页技术的云手机控制方法、系统及存储介质
CN110944015A (zh) * 2019-12-19 2020-03-31 斑马网络技术有限公司 音频远程传输方法、装置、服务器及存储介质
CN111541878A (zh) * 2020-05-19 2020-08-14 山东超越数控电子股份有限公司 音视频传输方法、装置、计算机设备和存储介质
CN112565247A (zh) * 2020-12-03 2021-03-26 东北大学 基于IPv6的移动终端实时多媒体数据流传输系统及方法
CN112615853A (zh) * 2020-12-16 2021-04-06 瑞芯微电子股份有限公司 一种Android设备音频数据接入方法
CN112825488A (zh) * 2019-11-21 2021-05-21 成都鼎桥通信技术有限公司 音频数据传输方法、装置及终端
CN112910899A (zh) * 2021-02-02 2021-06-04 深圳市瑞驰信息技术有限公司 一种安卓系统下的音视频透传方法
CN113015019A (zh) * 2021-03-09 2021-06-22 北京百度网讯科技有限公司 数据处理方法、装置和系统

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275557A1 (en) * 2012-04-12 2013-10-17 Seawell Networks Inc. Methods and systems for real-time transmuxing of streaming media content
CN108932948A (zh) * 2017-05-26 2018-12-04 腾讯科技(深圳)有限公司 音频数据处理方法、装置、计算机设备和计算机可读存储介质
CN108259987A (zh) * 2017-12-19 2018-07-06 湖北鸿云科技股份有限公司 移动端低延时流媒体播放器及播放方法
CN108966197A (zh) * 2018-08-20 2018-12-07 南昌黑鲨科技有限公司 基于蓝牙的音频传输方法、系统、音频播放设备及计算机可读存储介质
CN109817232A (zh) * 2019-01-30 2019-05-28 维沃移动通信有限公司 一种传输方法、终端设备及音频处理装置
CN110149375A (zh) * 2019-04-30 2019-08-20 广州微算互联信息技术有限公司 网络存储云手机间的数据共享方法、系统及存储介质
CN110784525A (zh) * 2019-10-14 2020-02-11 广州微算互联信息技术有限公司 一种基于h5网页技术的云手机控制方法、系统及存储介质
CN112825488A (zh) * 2019-11-21 2021-05-21 成都鼎桥通信技术有限公司 音频数据传输方法、装置及终端
CN110944015A (zh) * 2019-12-19 2020-03-31 斑马网络技术有限公司 音频远程传输方法、装置、服务器及存储介质
CN111541878A (zh) * 2020-05-19 2020-08-14 山东超越数控电子股份有限公司 音视频传输方法、装置、计算机设备和存储介质
CN112565247A (zh) * 2020-12-03 2021-03-26 东北大学 基于IPv6的移动终端实时多媒体数据流传输系统及方法
CN112615853A (zh) * 2020-12-16 2021-04-06 瑞芯微电子股份有限公司 一种Android设备音频数据接入方法
CN112910899A (zh) * 2021-02-02 2021-06-04 深圳市瑞驰信息技术有限公司 一种安卓系统下的音视频透传方法
CN113015019A (zh) * 2021-03-09 2021-06-22 北京百度网讯科技有限公司 数据处理方法、装置和系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114024992A (zh) * 2021-10-19 2022-02-08 北京润信恒达科技有限公司 一种云手机语音通话方法、装置、设备和系统

Similar Documents

Publication Publication Date Title
CN111882626B (zh) 图像处理方法、装置、服务器及介质
CN110430441B (zh) 一种云手机视频采集方法、系统、装置及存储介质
CN110841278A (zh) 一种云游戏实现方法及装置
CN105141567B (zh) 终端应用和服务端的交互数据处理方法及系统、交互方法
KR100680004B1 (ko) 통신 시스템의 송수신장치 및 방법
CN108932948B (zh) 音频数据处理方法、装置、计算机设备和计算机可读存储介质
CN108200447A (zh) 直播数据传输方法、装置、电子设备、服务器及存储介质
CN112165331A (zh) 数据压缩方法及其装置、数据解压方法及其装置、存储介质及电子设备
CN112289307A (zh) 基于GRPC实现Kaldi语音识别服务的方法、系统及介质
CN110024395A (zh) 图像数据处理、传输的方法以及控制终端
CN108055595B (zh) 视频图像的重定向方法、计算机可读存储介质
US20050107073A1 (en) Multimedia data streaming in a single threaded mobile communication device operating environment
CN108809924A (zh) 执行网络实时通信的方法和装置
CN113488065A (zh) 一种基于云手机的音频输出方法、装置及计算机设备、存储介质
CN113488065B (zh) 一种基于云手机的音频输出方法、装置及计算机设备、存储介质
CN114221909A (zh) 数据传输方法、装置、终端及存储介质
CN109788293A (zh) 一种视频编解码系统和方法
CN113411503B (zh) 一种云手机相机预览方法、装置及计算机设备、存储介质
CN114116617A (zh) 点云媒体的数据处理方法、装置、设备及可读存储介质
CN111063347B (zh) 实时语音识别方法、服务端及客户端
CN113794931A (zh) 视频播放方法、系统以及电子设备
CN114363301B (zh) 基于localStorage的多媒体数据离线加载方法
CN107454432B (zh) 数据发送方法及装置
KR20160066274A (ko) 클라우드 스트리밍 서비스 시스템, 어플리케이션 코드를 이용한 이미지 클라우드 스트리밍 서비스 방법 및 이를 위한 장치
CN115037732B (zh) 通过流媒体进行远程真机调试的方法、装置、设备及介质

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