CN113515406B - 一种安卓运行环境中音频播放故障处理方法及装置 - Google Patents

一种安卓运行环境中音频播放故障处理方法及装置 Download PDF

Info

Publication number
CN113515406B
CN113515406B CN202111078057.XA CN202111078057A CN113515406B CN 113515406 B CN113515406 B CN 113515406B CN 202111078057 A CN202111078057 A CN 202111078057A CN 113515406 B CN113515406 B CN 113515406B
Authority
CN
China
Prior art keywords
fault
audio
module
operating environment
file
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
CN202111078057.XA
Other languages
English (en)
Other versions
CN113515406A (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 Linzhuo Information Technology Co Ltd
Original Assignee
Beijing Linzhuo Information 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 Linzhuo Information Technology Co Ltd filed Critical Beijing Linzhuo Information Technology Co Ltd
Priority to CN202111078057.XA priority Critical patent/CN113515406B/zh
Publication of CN113515406A publication Critical patent/CN113515406A/zh
Application granted granted Critical
Publication of CN113515406B publication Critical patent/CN113515406B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种安卓运行环境中音频播放故障处理方法及装置,通过在安卓运行环境中部署音频播放错误探针,能够针对音频播放过程中的不同环节进行准确的故障诊断及响应,同时,通过与运行在Linux平台上的服务相配合,能够以用户无感的方式很大程度上实现故障的自动恢复,从而有效提高了安卓运行环境的可用性,显著提升了用户体验。

Description

一种安卓运行环境中音频播放故障处理方法及装置
技术领域
本发明属于在桌面操作系统上运行移动应用的开发技术领域,具体涉及一种安卓运行环境中音频播放故障处理方法及装置。
背景技术
在Linux平台上运行安卓(Android)应用时,通常采用在Linux平台上安装安卓运行环境的方式,因此安卓运行环境对于丰富操作系统应用生态具有非常重要的意义。对于采用PulseAudio作为声音处理架构的安卓运行环境而言,可能会面临安卓运行环境与Linux平台之间的兼容问题,从而导致基于PulseAudio Client API实现的Audio HAL(Hardware Abstraction Layer)在打开或读/写音频设备时出现操作失败的情况。
例如,在安卓运行环境中,可能出现由于特殊应用修改了导入到安卓文件系统的PulseAudio相关文件或相关文件所在目录的访问权限,导致Audio HAL出现打开或者读/写音频设备等操作的失败,进而导致音频播放失败;在Linux平台上,在PulseAudio Server进程重启、切换音频设备、Linux平台上PulseAudio相关文件或相关文件所在目录的权限被修改等情况下,都可能会导致Audio HAL出现打开或者读/写音频设备等操作的失败。
在现有安卓运行环境中,当出现安卓应用播放音频失败的情况时,安卓运行环境往往仅是报出异常,而未对异常进行处理,还需要用户进一步排查故障原因解决问题,这就为用户使用安卓运行环境造成了不便。
发明内容
有鉴于此,本发明提供了一种安卓运行环境中音频播放故障处理方法及装置,能够检测音频播放错误、确定故障原因并进行容错处理,为安卓运行环境提供正常的音频播放功能提供保障。
本发明提供的一种安卓运行环境中音频播放故障处理方法,具体包括以下步骤:
在安卓运行环境的HAL层的打开音频设备、读音频设备、写音频设备功能单元中分别部署打开错误探针、读错误探针和写错误探针;
所述打开错误探针用于检测安卓应用打开音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的打开音频设备的操作,然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误;
所述读错误探针用于检测安卓应用读音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的读音频设备的操作,将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误,同时,停止向Linux平台的读缓冲区写入白噪声音频;
所述写错误探针用于检测安卓应用写音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的写音频设备的操作,若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;否则丢弃当前音频流,并向Linux平台返回写音频正常的消息;然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误,同时,将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备。
进一步地,所述打开错误探针的处理过程包括:
S11、根据错误消息确定故障类型及故障文件名;
S12、当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重启Linux平台的PulseAudio Server,在Linux平台上新建PulseAudio Client作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则所述安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S13;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S13;所述安卓运行环境服务为运行在Linux平台上用于为所述安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S14;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S14;
S13、通知安卓运行环境的HAL层重新执行打开音频设备的操作;
S14、将当前错误信息返回到所述安卓运行环境的音频服务。
进一步地,所述读错误探针的处理过程包括:
S21、设置故障修复次数recovery_count的初始值为0;
S22、将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;
S23、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重新启动PulseAudio Server;在Linux平台上新建PulseAudio Client作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则所述安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S24;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S24;所述安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S25;若未能修改所述目标文件的访问权限或未能将所述目标文件成功导入安卓运行环境中,则执行步骤S25;
S24、通知安卓运行环境的HAL层重新执行读音频设备的操作,且停止向Linux平台的读缓冲区写入白噪声音频,并将recovery_count设置为0;
S25、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S23;若recovery_count大于或等于故障修复次数阈值则将当前错误信息返回到所述安卓运行环境的音频服务。
进一步地,所述写错误探针的处理过程包括:
S31、设置故障修复次数recovery_count的初始值为0;清空临时音频数据缓冲区temp_buffer;
S32、若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息;
S33、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重新启动PulseAudio Server,在Linux平台上新建PulseAudio Client作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S34;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S34;其中,所述安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S35;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S35;
S34、通知安卓运行环境的HAL层重新执行写音频设备的操作,且判断当前临时音频数据缓冲区是否为空,若不为空则将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备,并将recovery_count设置为0;
S35、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S33;若recovery_count大于或等于故障修复次数阈值则将当前错误信息返回到所述安卓运行环境的音频服务。
进一步地,所述临时音频数据缓冲区的大小设置为能够保存10秒音频数据的大小。
进一步地,所述当前音频流是否为纯音频流的判断方式为:通过修改安卓系统的音频解码模块,在解码结果中增加类型字节表示当前音频流的类型,在安卓运行环境的HAL层写音频设备操作时跳过所述类型字节。
本发明提供的一种安卓运行环境中音频播放故障处理装置,包括第一故障探针模块、第二故障探针模块、第三故障探针模块、第二故障响应模块、第三故障响应模块、第一故障修复模块、第二故障修复模块、第三故障修复模块、故障信息提示模块,以及部署于Linux平台上的安卓运行环境服务模块;
所述第一故障探针模块,运行于安卓运行环境的HAL层的打开音频设备功能中用于检测处理与打开音频设备相关操作的故障,当检测到操作故障时暂停执行打开音频设备的操作,根据系统返回的故障码确定故障类型,确定故障文件名,再将故障类型及故障文件名发送至所述安卓运行环境服务模块;
所述第二故障探针模块,运行于安卓运行环境的HAL层的读音频设备功能中用于检测处理与读音频设备相关操作的故障,当检测到操作故障时暂停执行读音频设备的操作,设置故障修复次数recovery_count1,令其初始值为0;将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至所述第二故障响应模块;
所述第二故障响应模块,运行于安卓运行环境中,当接收到所述第二故障探针模块发送的故障文件名和故障类型后或接收到来自所述故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至安卓运行环境服务模块;
所述第三故障探针模块,运行于安卓运行环境的HAL层的写音频设备功能中用于检测处理与写音频设备相关操作的故障,当检测到操作故障时暂停执行写音频设备的操作,设置故障修复次数recovery_count2的初始值为0;并清空临时音频数据缓冲区temp_buffer;若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至所述第三故障响应模块;
所述第三故障响应模块,运行于安卓运行环境中,当接收到所述第三故障探针模块发送的故障文件名和故障类型后或接收到来自所述故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至所述安卓运行环境服务模块;
所述安卓运行环境服务模块,运行于Linux平台上用于为安卓运行环境正常运行提供支持,当接收到包含故障文件名及故障类型的消息时,记录消息源模块的编号,若错误类型为缺少依赖的文件则重启PulseAudio Server,在Linux平台上新建PulseAudioClient作为测试客户端,测试客户端反复尝试与PulseAudio Server建立连接,若成功建立连接,则在Linux平台内查找故障文件名对应的目标文件,修改目标文件的访问权限后将目标文件动态导入到安卓运行环境内,通知与记录的故障响应模块编号一致的故障修复模块处理;若未能成功建立连接,则将故障类型和故障文件名发送至所述故障信息提示模块;
若错误类型为无权访问依赖的文件则修改目标文件的访问权限后,通知与记录的故障响应模块编号一致的故障修复模块处理;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则将故障类型、故障文件名及故障来源发送至所述故障信息提示模块;
所述第一故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行打开音频设备的操作;
所述第二故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行读音频设备的操作;同时,通知所述第二故障探针模块停止向Linux平台的读缓冲区写入白噪声音频,并将recovery_count1设置为0;
所述第三故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行写音频设备的操作;且若当前临时音频数据缓冲区不为空,则将当前临时音频数据缓冲区中的音频数据写入音频设备,并将recovery_count2设置为0;
所述故障信息提示模块,用于将接收到的故障类型、故障文件名及故障来源作为故障信息通知到用户,当故障来源为第一故障探针模块时,则弹出故障信息并提示用户做进一步的处理;当故障来源为第二故障响应模块时,则令故障修复次数recovery_count自加1,若此时recovery_count1小于故障修复次数阈值则通知第二故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务;当故障来源为第三故障响应模块时,令故障修复次数recovery_count2自加1,若recovery_count2小于故障修复次数阈值则通知第三故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务。
进一步地,所述音频播放故障处理装置还包括音频类型判断模块,所述音频类型判断模块用于判断音频流的类型,在打开音频设备时将当前音频流的类型保存在所述音频类型判断模块,所述第二故障探针模块和第三故障探针模块通过读取音频类型判断模块保存的数据获取当前音频流的类型。
进一步地,所述第三故障修复模块中将当前临时音频数据缓冲区中的音频数据经重采样后再一次性写入音频设备。
有益效果:
本发明通过在安卓运行环境中部署音频播放错误探针,能够针对音频播放过程中的不同环节进行准确的故障诊断及响应,同时,通过与运行在Linux平台上的服务相配合,能够以用户无感的方式很大程度上实现故障的自动恢复,从而有效提高了安卓运行环境的可用性,显著提升了用户体验。
附图说明
图1为本发明提供的一种安卓运行环境中音频播放故障处理方法的打开错误探针处理流程图。
图2为本发明提供的一种安卓运行环境中音频播放故障处理方法的读错误探针处理流程图。
图3为本发明提供的一种安卓运行环境中音频播放故障处理方法的写错误探针处理流程图。
图4为本发明提供的一种安卓运行环境中音频播放故障处理方法的结构图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明要解决的核心技术问题是运行在Linux平台上的安卓运行环境如何检测安卓应用的音频播放错误、识别音频播放错误的成因、及时处理音频播放错误等。为此本发明提供了一种安卓运行环境中音频播放故障处理方法及装置,其核心思想是:通过在安卓运行环境的Audio HAL层的打开音频设备、读音频设备、写音频设备等功能单元中部署音频播放错误探针,实现对不同音频播放错误类型的检查、识别及处理。
本发明所涉及的PulseAudio配置文件表示保证PulseAudio架构正常运行的相关文件,包括设备文件等。本发明提供的一种安卓运行环境中音频播放故障处理方法,包括以下步骤:
在安卓运行环境的Audio HAL层的打开音频设备、读音频设备、写音频设备等功能单元中部署音频播放错误探针。本发明中,音频播放错误探针包括打开错误探针、读错误探针和写错误探针,其中,打开错误探针用于检测安卓应用打开音频设备时出现的错误,读错误探针用于检测安卓应用读音频设备时出现的错误,写错误探针用于检测安卓应用写音频设备时出现的错误。
当打开错误探针检测到操作错误时,暂停执行打开音频设备的操作,根据系统返回的故障码确定故障类型,当错误类型为缺少依赖的文件或无权访问依赖的文件时,流程如图1所示,进行如下处理:
S11、根据错误消息确定故障类型及故障文件名。
S12、当错误类型为缺少依赖的设备文件时,通知Linux平台的安卓运行环境服务重新启动PulseAudio Server;其中,安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务。在Linux平台上新建PulseAudio Client作为测试客户端,测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,则修改目标文件的访问权限,再将目标文件动态导入到安卓运行环境内,执行步骤S13;
当错误类型为无权访问依赖的文件时,则修改目标文件的访问权限,执行步骤S13;
若未能成功建立连接,则执行步骤S14;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S14。
现有技术中,往往是在安卓运行环境启动时通过预先设定的配置文件静态地将运行所需文件导入到安卓运行环境中,而本发明则是采用动态导入的方式在安卓运行环境运行过程中完成文件的导入。例如,可通过动态构造mount命令的参数实现文件的动态导入。
S13、通知安卓运行环境的HAL层重新执行打开音频设备的操作。
S14、将当前错误信息返回到安卓运行环境的音频服务。
由于Linux平台的读音频设备不论输入的是纯音频流还是视频文件中的音频流,其读入的一定是纯音频流,因此当读音频设备产生故障时,故障期间的输入音频流就丢失了,这一过程中如果安卓应用一直未收到任何音频数据则会由于读取异常当前安卓应用可能会退出当前的读音频操作或中断。本发明提供的技术方案就是,在极短的时间内修复故障,同时在修复故障的过程中向安卓应用输出白噪声防止Linux退出当前操作。
本发明中,当读错误探针检测到操作错误时,暂停执行读音频设备的操作,流程如图2所示,进行如下处理:
S21、设置故障修复次数recovery_count的初始值为0。
S22、将预设的白噪声音频写入安卓运行环境的HAL层的读缓冲区,并向安卓应用返回读取正常的消息。
S23、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,通知Linux平台的安卓运行环境服务重新启动PulseAudio Server;其中,安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务。在Linux平台新建PulseAudioClient作为测试客户端,测试客户端反复尝试与PulseAudio Server建立连接,若成功建立连接,则安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件;修改目标文件的访问权限,再将目标文件动态导入到安卓运行环境内,执行步骤S24;
当错误类型为无权访问依赖的文件时,则修改目标文件的访问权限,执行步骤S24;
若未能成功建立连接,则执行步骤S25;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S25。
S24、通知安卓运行环境的HAL层重新执行读音频设备的操作,且停止向安卓运行环境的HAL层的读缓冲区写入白噪声音频,并将recovery_count设置为0。
S25、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S23;若recovery_count大于或等于故障修复次数阈值,则将当前的故障信息返回到安卓运行环境的音频服务。
Linux平台上的写音频设备操作过程,当处理的是视频文件中的音频流时,则需要保证视频文件中音频数据与图像数据的同步性;而当处理的是纯音频流时则不必考虑同步问题。因此,本发明中,对于Linux平台上的写音频设备故障问题需要区分纯音频流和视频文件中的音频流,进行不同处理。
本发明中,当写错误探针检测到操作错误时,暂停执行写音频设备的操作,流程如图3所示,进行如下处理:
S31、设置故障修复次数recovery_count的初始值为0;在安卓运行环境的HAL层设置临时音频数据缓冲区temp_buffer,并设置temp_buffer为空。其中,为保证故障修复的效果,可将临时音频数据缓冲区的大小设置为可保存10秒音频数据的大小。
S32、若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向安卓应用返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息。
S33、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,通知Linux平台的安卓运行环境服务重新启动PulseAudio Server;在安卓运行环境内新建PulseAudio Client作为测试客户端,测试客户端反复尝试与PulseAudio Server建立连接,若成功建立连接,则安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改目标文件的访问权限,再将目标文件动态导入到安卓运行环境内,执行步骤S34;
当错误类型为无权访问依赖的文件时,则修改目标文件的访问权限,执行步骤S34;
若未能成功建立连接,则执行步骤S35;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S35。
其中,安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务。
S34、通知安卓运行环境的HAL层重新执行写音频设备的操作,且判断当前临时音频数据缓冲区是否为空,若不为空则将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备,并将recovery_count设置为0。
S35、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S33;若recovery_count大于或等于故障修复次数阈值,则当前的错误信息返回到安卓运行环境的音频服务。
本发明中,确定当前处理的音频流是纯音频流还是视频文件中的音频流可采用如下两种方式:
1、安卓运行环境的多媒体框架在通过Audio HAL层输出音频时,即写音频设备时,首先会执行打开音频设备的操作,在打开音频设备时由多媒体框架通知Audio HAL层当前音频流是纯音频流还是视频文件中的音频流,可将当前音频流保存为临时文件,当写错误探针检测到操作错误时,通过读取临时文件即可知道当前音频流的类型。
2、修改安卓系统的音频解码模块,例如,ffmpeg/google,在解码结果的最前面增加字节来表示当前音频流的类型,例如,0表示纯音频流,1表示视频文件中的音频流,当写错误探针检测到操作错误时,即可通过该字节判断当前音频流的类型,而在Audio HAL层正常的写音频设备操作中跳过该字节输出其他的字节。
本发明提供的一种安卓运行环境中音频播放故障处理装置,结构如图4所示,包括部署于安卓运行环境内的第一故障探针模块、第二故障探针模块、第三故障探针模块、第二故障响应模块、第三故障响应模块、第一故障修复模块、第二故障修复模块、第三故障修复模块、故障信息提示模块,以及部署于Linux平台上的安卓运行环境服务模块。
第一故障探针模块,运行于Audio HAL层的打开音频设备功能中用于检测处理与打开音频设备相关操作的故障,当检测到操作故障时暂停执行打开音频设备的操作,根据系统返回的故障码确定故障类型及故障文件名,再将故障类型及故障文件名发送至安卓运行环境服务模块。
第二故障探针模块,运行于Audio HAL层的读音频设备功能中用于检测处理与读音频设备相关操作的故障,当检测到操作故障时暂停执行读音频设备的操作,设置故障修复次数recovery_count1,令其初始值为0;将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至第二故障响应模块。
第二故障响应模块,运行于安卓运行环境中,当接收到第二故障探针模块发送的故障文件名和故障类型后或接收到来自故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至安卓运行环境服务模块。
第三故障探针模块,运行于Audio HAL层的写音频设备功能中用于检测处理与写音频设备相关操作的故障,当检测到操作故障时暂停执行写音频设备的操作,设置故障修复次数recovery_count2的初始值为0;并清空临时音频数据缓冲区temp_buffer;若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至第三故障响应模块。
第三故障响应模块,运行于安卓运行环境中,当接收到第三故障探针模块发送的故障文件名和故障类型后或接收到来自故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至安卓运行环境服务模块。
安卓运行环境服务模块,运行于Linux平台上用于为安卓运行环境正常运行提供支持,当接收到包含故障文件名及故障类型的消息时,记录消息源模块的编号。当故障类型为缺少依赖的设备文件时,重启PulseAudio Server;在Linux平台上新建PulseAudioClient作为测试客户端,测试客户端反复尝试与PulseAudio Server建立连接,若成功建立连接,则在Linux平台内查找故障文件名对应的目标文件,修改目标文件的访问权限后将目标文件动态导入到安卓运行环境内,通知与记录的故障探针模块编号一致的故障修复模块处理;若未能成功建立连接,则将故障类型和故障文件名发送至故障信息提示模块。当错误类型为无权访问依赖的文件时,则修改目标文件的访问权限后,通知与记录的故障探针模块编号一致的故障修复模块处理。若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则将故障类型、故障文件名及故障来源发送至故障信息提示模块。
第一故障修复模块,用于在接收到安卓运行环境服务模块发送的消息后,通知安卓运行环境的HAL层重新执行打开音频设备的操作。
第二故障修复模块,用于在接收到安卓运行环境服务模块发送的消息后,通知安卓运行环境的HAL层重新执行读音频设备的操作;同时,通知第二故障探针模块停止向Linux平台的读缓冲区写入白噪声音频,并将recovery_count1设置为0。
第三故障修复模块,用于在接收到安卓运行环境服务模块发送的消息后,通知安卓运行环境的HAL层重新执行写音频设备的操作;且若当前临时音频数据缓冲区不为空,则将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备,并将recovery_count2设置为0。
故障信息提示模块,运行于安卓运行环境中,用于将接收到的故障类型、故障文件名及故障来源作为故障信息通知到用户,当故障来源为第一故障探针模块时,则弹出故障信息并提示用户做进一步的处理;当故障来源为第二故障响应模块时,则令故障修复次数recovery_count自加1,若此时recovery_count1小于故障修复次数阈值则通知第二故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务;当故障来源为第三故障响应模块时,令故障修复次数recovery_count2自加1,若recovery_count2小于故障修复次数阈值则通知第三故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务。
其中,本发明中采用动态导入的方式在安卓运行环境运行过程中完成文件的导入。
此外,本发明提供的一种安卓运行环境中音频播放故障处理装置,还包括音频类型判断模块,音频类型判断模块用于判断音频流的类型,进行音频设备相关操作时,在打开音频设备时都将当前音频流的类型保存在音频类型判断模块,第二故障探针模块和第三故障探针模块通过读取音频类型判断模块保存的数据获取当前音频流的类型。
综上,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种安卓运行环境中音频播放故障处理方法,其特征在于,具体包括以下步骤:
在安卓运行环境的HAL层的打开音频设备、读音频设备、写音频设备功能单元中分别部署打开错误探针、读错误探针和写错误探针;
所述打开错误探针用于检测安卓应用打开音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的打开音频设备的操作,然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误;
所述读错误探针用于检测安卓应用读音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的读音频设备的操作,将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误,同时,停止向Linux平台的读缓冲区写入白噪声音频;
所述写错误探针用于检测安卓应用写音频设备时出现的错误,当出现操作错误时,首先暂停执行当前的写音频设备的操作,若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;否则丢弃当前音频流,并向Linux平台返回写音频正常的消息;然后根据系统返回的故障码确定故障类型及故障文件,通过修改所述故障文件的访问权限或将所述故障文件拷贝到所述安卓运行环境中解决当前的操作错误,同时,将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备。
2.根据权利要求1所述的一种安卓运行环境中音频播放故障处理方法,其特征在于,所述打开错误探针的处理过程包括:
S11、根据错误消息确定故障类型及故障文件名;
S12、当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重启Linux平台的PulseAudio Server,在Linux平台上新建PulseAudio Client作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则所述安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S13;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S13;所述安卓运行环境服务为运行在Linux平台上用于为所述安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S14;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S14;
S13、通知安卓运行环境的HAL层重新执行打开音频设备的操作;
S14、将当前错误信息返回到所述安卓运行环境的音频服务。
3.根据权利要求1所述的一种安卓运行环境中音频播放故障处理方法,其特征在于,所述读错误探针的处理过程包括:
S21、设置故障修复次数recovery_count的初始值为0;
S22、将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;
S23、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重新启动PulseAudio Server;在Linux平台上新建PulseAudioClient作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则所述安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S24;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S24;所述安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S25;若未能修改所述目标文件的访问权限或未能将所述目标文件成功导入安卓运行环境中,则执行步骤S25;
S24、通知安卓运行环境的HAL层重新执行读音频设备的操作,且停止向Linux平台的读缓冲区写入白噪声音频,并将recovery_count设置为0;
S25、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S23;若recovery_count大于或等于故障修复次数阈值则将当前错误信息返回到所述安卓运行环境的音频服务。
4.根据权利要求1所述的一种安卓运行环境中音频播放故障处理方法,其特征在于,所述写错误探针的处理过程包括:
S31、设置故障修复次数recovery_count的初始值为0;清空临时音频数据缓冲区temp_buffer;
S32、若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息;
S33、根据错误消息确定故障文件名;当错误类型为缺少依赖的文件时,则通知Linux平台的安卓运行环境服务重新启动PulseAudio Server,在Linux平台上新建PulseAudioClient作为测试客户端,所述测试客户端尝试与PulseAudio Server建立连接,若成功建立连接,则安卓运行环境服务在Linux平台内查找到故障文件名对应的目标文件,修改所述目标文件的访问权限,再将所述目标文件动态导入到安卓运行环境内,执行步骤S34;当错误类型为无权访问依赖的文件时,则修改所述目标文件的访问权限,执行步骤S34;其中,所述安卓运行环境服务为运行在Linux平台上用于为安卓运行环境正常运行提供支持的服务;
若未能成功建立连接,则执行步骤S35;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则执行步骤S35;
S34、通知安卓运行环境的HAL层重新执行写音频设备的操作,且判断当前临时音频数据缓冲区是否为空,若不为空则将当前临时音频数据缓冲区中的音频数据经重采样后一次性写入音频设备,并将recovery_count设置为0;
S35、令故障修复次数recovery_count自加1,若recovery_count小于故障修复次数阈值则执行S33;若recovery_count大于或等于故障修复次数阈值则将当前错误信息返回到所述安卓运行环境的音频服务。
5.根据权利要求1所述的一种安卓运行环境中音频播放故障处理方法,其特征在于,所述临时音频数据缓冲区的大小设置为能够保存10秒音频数据的大小。
6.根据权利要求1所述的一种安卓运行环境中音频播放故障处理方法,其特征在于,所述当前音频流是否为纯音频流的判断方式为:通过修改安卓系统的音频解码模块,在解码结果中增加类型字节表示当前音频流的类型,在安卓运行环境的HAL层写音频设备操作时跳过所述类型字节。
7.一种安卓运行环境中音频播放故障处理装置,其特征在于,包括第一故障探针模块、第二故障探针模块、第三故障探针模块、第二故障响应模块、第三故障响应模块、第一故障修复模块、第二故障修复模块、第三故障修复模块、故障信息提示模块,以及部署于Linux平台上的安卓运行环境服务模块;
所述第一故障探针模块,运行于安卓运行环境的HAL层的打开音频设备功能中用于检测处理与打开音频设备相关操作的故障,当检测到操作故障时暂停执行打开音频设备的操作,根据系统返回的故障码确定故障类型,确定故障文件名,再将故障类型及故障文件名发送至所述安卓运行环境服务模块;
所述第二故障探针模块,运行于安卓运行环境的HAL层的读音频设备功能中用于检测处理与读音频设备相关操作的故障,当检测到操作故障时暂停执行读音频设备的操作,设置故障修复次数recovery_count1,令其初始值为0;将预设的白噪声音频写入Linux平台的读缓冲区,并向Linux平台返回读取正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至所述第二故障响应模块;
所述第二故障响应模块,运行于安卓运行环境中,当接收到所述第二故障探针模块发送的故障文件名和故障类型后或接收到来自所述故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至安卓运行环境服务模块;
所述第三故障探针模块,运行于安卓运行环境的HAL层的写音频设备功能中用于检测处理与写音频设备相关操作的故障,当检测到操作故障时暂停执行写音频设备的操作,设置故障修复次数recovery_count2的初始值为0;并清空临时音频数据缓冲区temp_buffer;若当前音频流为纯音频流,则将当前音频流写入临时音频数据缓冲区,并向Linux平台返回写音频正常的消息;若当前音频流为视频文件的音频流,则将当前音频流丢弃,并向Linux平台返回写音频正常的消息;根据系统返回的故障码确定故障类型,确定故障文件名;再将故障类型及故障文件名发送至所述第三故障响应模块;
所述第三故障响应模块,运行于安卓运行环境中,当接收到所述第三故障探针模块发送的故障文件名和故障类型后或接收到来自所述故障信息提示模块的消息时,启动响应过程:将故障文件名和故障类型发送至所述安卓运行环境服务模块;
所述安卓运行环境服务模块,运行于Linux平台上用于为安卓运行环境正常运行提供支持,当接收到包含故障文件名及故障类型的消息时,记录消息源模块的编号,若错误类型为缺少依赖的文件则重启PulseAudio Server,在Linux平台上新建PulseAudio Client作为测试客户端,测试客户端反复尝试与PulseAudio Server建立连接,若成功建立连接,则在Linux平台内查找故障文件名对应的目标文件,修改目标文件的访问权限后将目标文件动态导入到安卓运行环境内,通知与记录的故障响应模块编号一致的故障修复模块处理;若未能成功建立连接,则将故障类型和故障文件名发送至所述故障信息提示模块;
若错误类型为无权访问依赖的文件则修改目标文件的访问权限后,通知与记录的故障响应模块编号一致的故障修复模块处理;若未能修改目标文件的访问权限或未能将目标文件成功导入安卓运行环境中,则将故障类型、故障文件名及故障来源发送至所述故障信息提示模块;
所述第一故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行打开音频设备的操作;
所述第二故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行读音频设备的操作;同时,通知所述第二故障探针模块停止向Linux平台的读缓冲区写入白噪声音频,并将recovery_count1设置为0;
所述第三故障修复模块,用于在接收到所述安卓运行环境服务模块发送的消息后,重新执行写音频设备的操作;且若当前临时音频数据缓冲区不为空,则将当前临时音频数据缓冲区中的音频数据写入音频设备,并将recovery_count2设置为0;
所述故障信息提示模块,用于将接收到的故障类型、故障文件名及故障来源作为故障信息通知到用户,当故障来源为第一故障探针模块时,则弹出故障信息并提示用户做进一步的处理;当故障来源为第二故障响应模块时,则令故障修复次数recovery_count1自加1,若此时recovery_count1小于故障修复次数阈值则通知第二故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务;当故障来源为第三故障响应模块时,令故障修复次数recovery_count2自加1,若recovery_count2小于故障修复次数阈值则通知第三故障响应模块重新执行响应过程,否则将当前错误信息返回到所述安卓运行环境的音频服务。
8.根据权利要求7所述的一种安卓运行环境中音频播放故障处理装置,其特征在于,所述音频播放故障处理装置还包括音频类型判断模块,所述音频类型判断模块用于判断音频流的类型,在打开音频设备时将当前音频流的类型保存在所述音频类型判断模块,所述第二故障探针模块和第三故障探针模块通过读取音频类型判断模块保存的数据获取当前音频流的类型。
9.根据权利要求7所述的一种安卓运行环境中音频播放故障处理装置,其特征在于,所述第三故障修复模块中将当前临时音频数据缓冲区中的音频数据经重采样后再一次性写入音频设备。
CN202111078057.XA 2021-09-15 2021-09-15 一种安卓运行环境中音频播放故障处理方法及装置 Active CN113515406B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111078057.XA CN113515406B (zh) 2021-09-15 2021-09-15 一种安卓运行环境中音频播放故障处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111078057.XA CN113515406B (zh) 2021-09-15 2021-09-15 一种安卓运行环境中音频播放故障处理方法及装置

Publications (2)

Publication Number Publication Date
CN113515406A CN113515406A (zh) 2021-10-19
CN113515406B true CN113515406B (zh) 2021-12-21

Family

ID=78063321

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111078057.XA Active CN113515406B (zh) 2021-09-15 2021-09-15 一种安卓运行环境中音频播放故障处理方法及装置

Country Status (1)

Country Link
CN (1) CN113515406B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114333933B (zh) * 2022-03-11 2022-05-20 北京麟卓信息科技有限公司 一种Linux平台上安卓应用低延迟音频输出方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106911831B (zh) * 2017-02-09 2019-09-20 青岛海信移动通信技术股份有限公司 一种终端的麦克风的数据处理方法和具有麦克风的终端
CN107908491B (zh) * 2017-10-31 2021-06-15 努比亚技术有限公司 卡屏检测与解决方法、移动终端及计算机可读存储介质
CN111654743B (zh) * 2020-05-27 2022-04-22 海信视像科技股份有限公司 音频播放方法及显示设备
CN111930340B (zh) * 2020-09-21 2021-06-01 北京技德系统技术有限公司 一种基于Linux与Android兼容技术的虚拟音频装置与方法
CN113282271A (zh) * 2021-07-22 2021-08-20 北京麟卓信息科技有限公司 一种Linux平台上安卓应用的音频处理方法及装置

Also Published As

Publication number Publication date
CN113515406A (zh) 2021-10-19

Similar Documents

Publication Publication Date Title
CN108399132B (zh) 一种调度测试方法、装置及存储介质
CN106951345B (zh) 一种虚拟机磁盘数据的一致性测试方法及装置
US20040194063A1 (en) System and method for automated testing of a software module
US20130227356A1 (en) Apparatus and method for handling rebooting of mobile terminal
US8225142B2 (en) Method and system for tracepoint-based fault diagnosis and recovery
JP5503539B2 (ja) 損傷したハードディスクのファイルシステムを修復する方法およびシステム
CN107391333B (zh) 一种osd磁盘故障测试方法及系统
CN113515406B (zh) 一种安卓运行环境中音频播放故障处理方法及装置
CN113608692B (zh) 一种存储系统数据一致性验证方法、系统、设备以及介质
CN108874441B (zh) 一种板卡配置方法、装置、服务器和存储介质
EP0883061A1 (en) Debugging method for a microcomputer system and recording medium on which debug program is recorded
CN108920338A (zh) 一种指示文件系统状态的方法及终端
CN113032183A (zh) 系统管理方法、装置、计算机设备和存储介质
CN112069082A (zh) 一种自动化测试方法及系统
CN109062731B (zh) 一种数据库切换时的幂等控制方法和装置
CN111382016A (zh) 测试终端与计算机的连接方法和装置
CN113448760B (zh) 一种硬盘异常状态的恢复方法、系统、设备以及介质
TW201015296A (en) Method for auto-testing environment variable setting
CN103473081A (zh) 终端进行系统升级后生效的方法及该终端
KR101235802B1 (ko) 저장 매체, 그 저장 매체를 이용한 테스트 자동화 방법 및장치
CN113805928A (zh) 热补丁文件生成、一致性检测方法、装置、设备和介质
US20100115328A1 (en) Methods and Systems for Handling Device Failovers during Test Executions
CN110727571B (zh) 一种影院放映设备故障检测方法及系统
CN110795297B (zh) 一种电子设备的测试方法及装置
KR100759590B1 (ko) 휴대용 기기의 플래쉬 메모리 초기화 방법 및 상기 방법에따른 프로그램이 기록된 기록 매체

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