CN109634809A - 一种音频播放监控方法及相关设备 - Google Patents
一种音频播放监控方法及相关设备 Download PDFInfo
- Publication number
- CN109634809A CN109634809A CN201811479593.9A CN201811479593A CN109634809A CN 109634809 A CN109634809 A CN 109634809A CN 201811479593 A CN201811479593 A CN 201811479593A CN 109634809 A CN109634809 A CN 109634809A
- Authority
- CN
- China
- Prior art keywords
- data
- currently playing
- playing audio
- size
- audio
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000012544 monitoring process Methods 0.000 title claims abstract description 36
- 238000012545 processing Methods 0.000 claims description 21
- 230000009471 action Effects 0.000 claims description 16
- 238000012806 monitoring device Methods 0.000 claims description 11
- 230000000306 recurrent effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 34
- 238000010586 diagram Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3034—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a storage system, e.g. DASD based or network based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
Abstract
本申请实施例公开了一种音频播放监控方法及相关设备,包括:使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态。采用本申请实施例,提高音频播放监控的准确性,进而提高解决问题的效率。
Description
技术领域
本申请涉及电子技术领域,尤其涉及一种音频播放监控方法及相关设备。
背景技术
在音频的飞速发展下,用户对音频相关需求越来越大,评判、监控以及解决音频相关问题变得越来越复杂。例如,播放卡顿、开发难定位、本地难复现、无法评估外网的真实情况等等。由于没有办法对出现问题的地方进行监控,因此无法评估卡顿状态,导致解决问题的效率低下。
发明内容
本申请实施例提供一种音频播放监控方法及相关设备。可以提高音频播放监控的准确性,进而提高解决音频问题的效率。
第一方面,本申请实施例提供了一种音频播放监控方法,包括:
使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;
获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;
根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;
根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态
其中,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态包括:
当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。
其中,所述确定所述当前播放音频的数据的所述播放状态为卡顿状态之后,还包括:
获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;
根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;
确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;
将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
其中,所述方法还包括:
获取所述数据结构体中所记录的共享缓冲区的空间大小;
根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
其中,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态之后,还包括:
获取在所述当前播放音频的数据发生卡顿时的操作记录;
根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
其中,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态之后,还包括:
显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
第二方面,本申请实施例提供了一种音频播放监控装置,包括:
监控模块,用于使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;
获取模块,用于获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;
处理模块,用于根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态。
其中,所述处理模块,还用于当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。
其中,所述获取模块,还用于获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;所述处理模块,还用于根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
其中,所述获取模块,还用于获取所述数据结构体中所记录的共享缓冲区的空间大小;所述处理模块,还用于根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
其中,所述获取模块,还用于获取在所述当前播放音频的数据发生卡顿时的操作记录;所述处理模块,还用于根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
其中,所述装置还包括:
显示模块,还用于显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
第三方面,本申请实施例提供了一种音频播放监控设备,包括:处理器、存储器和通信总线,其中,通信总线用于实现处理器和存储器之间连接通信,处理器执行存储器中存储的程序用于实现上述第一方面提供的一种音频播放监控方法中的步骤。
在一个可能的设计中,本申请实施例提供的音频播放监控设备可以包含用于执行上述方法设计中音频播放监控装置的行为相对应的模块。模块可以是软件和/或是硬件。
又一方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
又一方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。
实施本申请实施例,首先使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,数据结构体用于记录当前播放音频的数据的读写地址;然后获取数据结构体中所记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址;其次根据第一偏移地址确定写入的当前播放音频的数据的第一数据大小、以及根据第二偏移地址确定读取的当前播放音频的数据的第二数据大小;最后根据第一数据大小以及第二数据大小,确定当前播放音频的数据的播放状态。通过使用监控拦截函数对当前播放情况进行监控,从而可以对当前播放状况进行准确判断,以便及时上报相关信息,从而提高解决音频问题的效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提出的一种音频播放监控方法的流程示意图;
图2是本申请实施例提供的一种当前播放音频的数据播放的流程示意图;
图3(A)是本申请实施例提供的一种共享缓冲区的示意图;
图3(B)是本申请实施例提供的另一种共享缓冲区的示意图;
图3(C)是本申请实施例提供的又一种共享缓冲区的示意图;
图3(D)是本申请实施例提供的又一种共享缓冲区的示意图;
图3(E)是本申请实施例提供的又一种共享缓冲区的示意图;
图4是本申请实施例提出的又一种音频播放监控方法的流程示意图;
图5是本申请实施例提供的一种音频播放监控装置的结构示意图;
图6是本申请实施例提出的一种音频播放监控设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1是本申请实施例提供的一种音频播放监控方法的流程示意图。如图所示,本申请实施例中的步骤包括:
S101,使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址。
如图2所示,对于在线音乐或本地音乐,当前播放音频的数据先写入sd卡,然后播放器对当前播放音频的数据进行解码(decode)得到脉冲编码调制(Pulse CodeModulation,PCM),然后加音效。加音效完成后调用系统(audiotrack)的方法write统一写入,然后交给系统的(audioFlinger)来处理,而维护和管理audiotrack和audioflinger是数据结构体audio_track_cblk_t。其中,audio_track_cblk_t是AudioTrack和AudioFlinger共享的数据结构体,AudioTrack向audio_track_cblk_t中写入当前播放音频的数据,AudioFlinger从audio_track_cblk_t中读取当前播放音频的数据。在本申请实施例中,可以将监控拦截函数(如Hook函数)加入到当前播放音频的数据的播放进程中,通过Hook函数对数据结构体audio_track_cblk_t进行监控,以便获取当前播放的当前播放音频的数据的读写地址。
其中,audio_track_cblk_t中包括3个变量:server–AudioTrack记录当前的写入位置处的偏移地址;user–AudioFlinger记录当前的读取位置处的偏移地址;frameCount--audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小,以当前播放音频的数据的帧为单位。
需要说明的是,Hook(钩子)是Android平台的一种消息处理机制,Hook机制允许应用程序截获处理Android消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在加载并播放当前播放音频的数据之前,通过Hook函数首先捕获该当前播放音频的数据的相关信息,然后加工处理该当前播放音频的数据,也可以不作处理而继续传递该当前播放音频的数据,还可以强制结束该当前播放音频的数据的传递。而本申请实施例是在audioTrack调用方法write时进行拦截,获取当前播放音频的数据的读写情况来判断是否出现卡顿状况。
S102,获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址。
具体实现中,在当前播放音频的数据播放过程中,将当前播放音频的数据的当前写入位置处的偏移地址、以及当前读取位置处的偏移地址记录到数据结构体中。当执行到Hook函数时,在audioTrack调用方法write时进行拦截,从数据结构体中获取记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址。
S103,根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小(server值)、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小(user值)。
S104,根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的所述播放状态。
具体实现中,当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。当所述第一数据大小不小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为流畅状态,可以对当前播放音频的数据进行正常播放。
可选的,可以显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
可选的,audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小。可以获取所述数据结构体中所记录的共享缓冲区的空间大小;根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
例如,如图3(A)所示,定义了一个七个元素空间的圆形共享缓冲区,其中,底部的单线与箭头表示“头尾相接”形成一个圆形地址空间。如图3(B)所示,首先1被写入共享缓冲区,再写入2个元素2和3。如图3(C)所示,如果读取最先写入的两个元素,那么共享缓冲区只剩下3。如图3(D)所示,继续写入当前播放音频的数据,将共享缓冲区的剩余空间填满。如图3(E)所示,如果共享缓冲区已经填满,需要写入新的当前播放音频的数据,则写入2个新的当前播放音频的数据A&B,覆盖掉最先写入的3和4。如此循环往复。
在本申请实施例中,首先使用监控拦截函数对当前播放音频的数据结构体进行监控,然后获取数据结构体中所记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址;最后根据第一偏移地址以及第二偏移地址,确定当前播放音频的数据的播放状态。通过使用监控拦截函数对当前播放情况进行监控,获取底层数据audio_track_cblk_t中的server值和user值,从而可以对当前播放状况进行准确判断。
请参考图4,图4是本申请实施例提供的一种音频播放监控方法的流程示意图。如图所示,本申请实施例中的步骤包括:
S401,使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址。
如图2所示,对于在线音乐或本地音乐,当前播放音频的数据先写入sd卡,然后播放器对当前播放音频的数据进行解码(decode)得到脉冲编码调制(Pulse CodeModulation,PCM),然后加音效。加完音效后调用系统(audiotrack)的方法write统一写入,然后交给系统的(audioFlinger)来处理,而维护和管理audiotrack和audioflinger是数据结构体audio_track_cblk_t。其中,audio_track_cblk_t是AudioTrack和AudioFlinger共享的数据结构体,AudioTrack向audio_track_cblk_t中写入当前播放音频的数据,AudioFlinger从audio_track_cblk_t中读取当前播放音频的数据。可以将监控拦截函数(如Hook函数)加入到当前播放音频的数据的播放进程中,通过Hook函数对数据结构体audio_track_cblk_t进行监控,以便获取当前播放的当前播放音频的数据的读写地址。
其中,audio_track_cblk_t中包括3个变量:server–AudioTrack记录当前的写入位置处的偏移地址;user–AudioFlinger记录当前的读取位置处的偏移地址;frameCount--audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小,以当前播放音频的数据的帧为单位。
需要说明的是,Hook(钩子)是Android平台的一种消息处理机制,Hook机制允许应用程序截获处理Android消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在加载并播放当前播放音频的数据之前,通过Hook函数首先捕获该当前播放音频的数据的相关信息,然后加工处理该当前播放音频的数据,也可以不作处理而继续传递该当前播放音频的数据,还可以强制结束该当前播放音频的数据的传递。而本申请实施例是在audioTrack调用方法write时进行拦截,获取当前播放音频的数据的读写情况来判断是否出现卡顿状况。
S402,获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址。
具体实现中,在当前播放音频的数据播放过程中,将当前播放音频的数据的当前写入位置处的偏移地址、以及当前读取位置处的偏移地址记录到数据结构体中。当执行到Hook函数时,在audioTrack调用方法write时进行拦截,从数据结构体中获取记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址。
S403,根据所述第一偏移地址以及所述第二偏移地址,确定所述当前播放音频的数据的播放状态。
具体实现中,可以首先根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小(server值)、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小(user值);然后根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的所述播放状态。
进一步的,当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。当所述第一数据大小不小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为流畅状态,可以对当前播放音频的数据进行正常播放。
可选的,audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小。可以获取所述数据结构体中所记录的共享缓冲区的空间大小;根据所述共享缓冲区的所述空间大小,在共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
例如,如图3(A)所示,定义了一个七个元素空间的圆形共享缓冲区,其中,底部的单线与箭头表示“头尾相接”形成一个圆形地址空间。如图3(B)所示,首先1被写入共享缓冲区,再写入2个元素2和3。如图3(C)所示,如果读取最先写入的两个元素,那么共享缓冲区只剩下3。如图3(D)所示,继续写入当前播放音频的数据,将共享缓冲区的剩余空间填满。如图3(E)所示,如果共享缓冲区已经填满,需要写入新的当前播放音频的数据,则写入2个新的当前播放音频的数据A&B,覆盖掉最先写入的3和4。如此循环往复。
S404,若确定所述当前播放音频的数据的所述播放状态为卡顿状态,则获取在所述当前播放音频的数据发生卡顿时的操作记录。
具体实现中,每次进入到一个界面或者进行点击操作事件,都可以记录到一个文件中。例如,在进入操作界面A时,将此操作事件记录到该文件中,当用户在操作界面A上进行点击操作时,将此操作事件也记录到该文件中;在进入操作界面B时,将此操作事件也记录到该文件中,当用户在操作界面B上进行点击操作时,将此操作事件也记录到该文件中,依次按照相同的方法将进入其他操作界面并在其他操作界面进行操作的事件记录到该文件中。当确定当前播放音频的数据播放过程中出现卡顿时,可以从该文件中获取在当前播放音频的数据发生卡顿时的操作记录。
S405,根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
具体实现中,可以根据操作记录,复现发生卡顿时的操作过程,确定引起当前播放音频的数据发生卡顿的操作事件,从而查找卡顿原因。
可选的,可以获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
例如,假设共享缓冲区中上次剩余的当前播放音频的数据可以播放100ms,并记录上次写入当前播放音频的数据时间戳为t1,当前写入当前播放音频的数据时记录时间戳t2。在t2-t1这段时间内,没有向共享缓冲区写入当前播放音频的数据。共享缓冲区只能播放100ms,假设t2-t1为1000ms,则下一次写入数据需要等待1000ms,因此卡顿时长为900ms。
可选的,可以向服务器发送卡顿的相关信息,服务器接收到相关信息之后,可以根据相关信息确定解决方案,并向用户设备返回解决方案,以便用户设备可以及时解决出现卡顿的问题。其中,相关信息可以包括出现卡顿时的操作记录以及卡顿时长等等。
在本申请实施例中,首先使用监控拦截函数对数据结构体进行监控,然后获取数据结构体中所记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址;最后根据第一偏移地址以及第二偏移地址,确定当前播放音频的数据的播放状态。通过使用监控拦截函数对当前播放情况进行监控,从而可以对当前播放状况进行准确判断,以便及时上报相关信息,从而提高解决问题的效率。
请参考图5,图5是本申请实施例提供的一种音频播放监控装置的结构示意图。如图所示,本申请实施例中的装置包括:
监控模块501,用于使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址。
如图2所示,对于在线音乐或本地音乐,当前播放音频的数据先写入sd卡,然后播放器对当前播放音频的数据进行解码(decode)得到脉冲编码调制(Pulse CodeModulation,PCM),然后加音效。加完音效后调用系统(audiotrack)的方法write统一写入,然后交给系统的(audioFlinger)来处理,而维护和管理audiotrack和audioflinger是数据结构体audio_track_cblk_t。其中,audio_track_cblk_t是AudioTrack和AudioFlinger共享的数据结构体,AudioTrack向audio_track_cblk_t中写入当前播放音频的数据,AudioFlinger从audio_track_cblk_t中读取当前播放音频的数据。可以将监控拦截函数(如Hook函数)加入到当前播放音频的数据的播放进程中,通过Hook函数对数据结构体audio_track_cblk_t进行监控,以便获取当前播放的当前播放音频的数据的读写地址。
其中,audio_track_cblk_t中包括3个变量:server–AudioTrack记录当前的写入位置处的偏移地址;user–AudioFlinger记录当前的读取位置处的偏移地址;frameCount--audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小,以当前播放音频的数据的帧为单位。
需要说明的是,Hook(钩子)是Android平台的一种消息处理机制,Hook机制允许应用程序截获处理Android消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在加载并播放当前播放音频的数据之前,通过Hook函数首先捕获该当前播放音频的数据的相关信息,然后加工处理该当前播放音频的数据,也可以不作处理而继续传递该当前播放音频的数据,还可以强制结束该当前播放音频的数据的传递。而本申请实施例是在audioTrack调用方法write时进行拦截,获取当前播放音频的数据的读写情况来判断是否出现卡顿状况。
获取模块502,用于获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址。
具体实现中,在当前播放音频的数据播放过程中,将当前播放音频的数据的当前写入位置处的偏移地址、以及当前读取位置处的偏移地址记录到数据结构体中。当执行到Hook函数时,在audioTrack调用方法write时进行拦截,从数据结构体中获取记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址。
处理模块503,用于根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小(server值)、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小(user值);然后根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的所述播放状态。
具体实现中,当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。当所述第一数据大小不小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为流畅状态,可以对当前播放音频的数据进行正常播放。
可选的,显示模块404,用于显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
可选的,audio_track_cblk_t还定义了共享缓冲区sharebuffer的大小。可以获取所述数据结构体中所记录的共享缓冲区的空间大小;根据所述共享缓冲区的所述空间大小,在共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
例如,如图3(A)所示,定义了一个七个元素空间的圆形共享缓冲区,其中,底部的单线与箭头表示“头尾相接”形成一个圆形地址空间。如图3(B)所示,首先1被写入共享缓冲区,再写入2个元素2和3。如图3(C)所示,如果读取最先写入的两个元素,那么共享缓冲区只剩下3。如图3(D)所示,继续写入当前播放音频的数据,将共享缓冲区的剩余空间填满。如图3(E)所示,如果共享缓冲区已经填满,需要写入新的当前播放音频的数据,则写入2个新的当前播放音频的数据A&B,覆盖掉最先写入的3和4。如此循环往复。
可选的,若确定所述当前播放音频的数据的所述播放状态为卡顿状态,则获取在所述当前播放音频的数据发生卡顿时的操作记录。根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
具体实现中,每次进入到一个界面或者进行点击操作事件,都可以记录到一个文件中。例如,在进入操作界面A时,将此操作事件记录到该文件中,当用户在操作界面A上进行点击操作时,将此操作事件也记录到该文件中;在进入操作界面B时,将此操作事件也记录到该文件中,当用户在操作界面B上进行点击操作时,将此操作事件也记录到该文件中,依次按照相同的方法将进入其他操作界面并在其他操作界面进行操作的事件记录到该文件中。当确定当前播放音频的数据播放过程中出现卡顿时,可以从该文件中获取在当前播放音频的数据发生卡顿时的操作记录。可以根据操作记录,复现发生卡顿时的操作过程,确定引起当前播放音频的数据发生卡顿的操作事件,从而查找卡顿原因。
可选的,可以获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
例如,假设共享缓冲区中上次剩余的当前播放音频的数据可以播放100ms,并记录上次写入当前播放音频的数据时间戳为t1,当前写入当前播放音频的数据时记录时间戳t2。在t2-t1这段时间内,没有向共享缓冲区写入当前播放音频的数据。共享缓冲区只能播放100ms,假设t2-t1为1000ms,则下一次写入数据需要等待1000ms,因此卡顿时长为900ms。
可选的,可以向服务器发送卡顿的相关信息,服务器接收到相关信息之后,可以根据相关信息确定解决方案,并向装置返回解决方案,以便用户设备可以及时解决出现卡顿的问题。其中,相关信息可以包括出现卡顿时的操作记录以及卡顿时长等等。
在本申请实施例中,首先使用监控拦截函数对数据结构体进行监控,然后获取数据结构体中所记录的当前播放音频的数据的写入位置处的第一偏移地址、以及当前播放音频的数据的读取位置处的第二偏移地址;最后根据第一偏移地址以及第二偏移地址,确定当前播放音频的数据的播放状态。通过使用监控拦截函数对当前播放情况进行监控,从而可以对当前播放状况进行准确判断,以便及时上报相关信息,从而提高解决问题的效率。
请继续参考图6,图6是本申请实施例提出的一种音频播放监控设备的结构示意图。如图所示,该音频播放监控设备可以包括:至少一个处理器601,至少一个通信接口602,至少一个存储器603和至少一个通信总线604。
其中,处理器601可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。通信总线604可以是外设部件互连标准PCI总线或扩展工业标准结构EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信总线604用于实现这些组件之间的连接通信。其中,本申请实施例中设备的通信接口602用于与其他节点设备进行信令或数据的通信。存储器603可以包括易失性存储器,例如非挥发性动态随机存取内存(Nonvolatile Random Access Memory,NVRAM)、相变化随机存取内存(PhaseChange RAM,PRAM)、磁阻式随机存取内存(Magetoresistive RAM,MRAM)等,还可以包括非易失性存储器,例如至少一个磁盘存储器件、电子可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory,EEPROM)、闪存器件,例如反或闪存(NORflash memory)或是反及闪存(NAND flash memory)、半导体器件,例如固态硬盘(SolidState Disk,SSD)等。存储器603可选的还可以是至少一个位于远离前述处理器601的存储装置。存储器603中存储一组程序代码,且处理器601执行存储器603中上述数据服务器所执行的程序。
使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;
获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;
根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;
根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态。
可选的,处理器601还用于执行如下操作:
当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。
可选的,处理器601还用于执行如下操作:
获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;
根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;
确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;
将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
可选的,处理器601还用于执行如下操作:
获取所述数据结构体中所记录的共享缓冲区的空间大小;
根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
可选的,处理器601还用于执行如下操作:
获取在所述当前播放音频的数据发生卡顿时的操作记录;
根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
可选的,处理器601还用于执行如下操作:
显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
进一步的,处理器还可以与存储器和通信接口相配合,执行上述申请实施例中音频播放监控装置的操作。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种音频播放监控方法,其特征在于,所述方法包括:
使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;
获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;
根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;
根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态。
2.如权利要求1所述的方法,其特征在于,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态包括:
当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。
3.如权利要求2所述的方法,其特征在于,所述确定所述当前播放音频的数据的所述播放状态为卡顿状态之后,还包括:
获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;
根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;
确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;
将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述数据结构体中所记录的共享缓冲区的空间大小;
根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
5.如权利要求1所述的方法,其特征在于,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态之后,还包括:
获取在所述当前播放音频的数据发生卡顿时的操作记录;
根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
6.如权利要求1-5任一项所述的方法,其特征在于,所述根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态之后,还包括:
显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
7.一种音频播放监控装置,其特征在于,所述装置包括:
监控模块,用于使用监控拦截函数对当前播放音频的数据结构体进行监控,其中,所述数据结构体用于记录所述当前播放音频的数据的读写地址;
获取模块,用于获取所述数据结构体中所记录的所述当前播放音频的数据的写入位置处的第一偏移地址、以及所述当前播放音频的数据的读取位置处的第二偏移地址;
处理模块,用于根据所述第一偏移地址确定写入的所述当前播放音频的数据的第一数据大小、以及根据所述第二偏移地址确定读取的所述当前播放音频的数据的第二数据大小;根据所述第一数据大小以及所述第二数据大小,确定所述当前播放音频的数据的播放状态。
8.如权利要求7所述的装置,其特征在于,
所述处理模块,还用于当所述第一数据大小小于所述第二数据大小时,确定所述当前播放音频的数据的所述播放状态为卡顿状态。
9.如权利要求8所述的装置,其特征在于,
所述获取模块,还用于获取上一次停止写入所述当前播放音频的数据的第一时间点、以及当前开始写入所述当前播放音频的数据的第二时间点;
所述处理模块,还用于根据所述第二时间点以及所述第一时间点,确定停止写入所述当前播放音频的数据的第一时长;确定在所述第一时间点到所述第二时间点的时间段内读取共享缓冲区中的所述当前播放音频的数据所需的第二时长;将所述第一时长减去所述第二时长,计算得到差值作为卡顿时长。
10.如权利要求7所述的装置,其特征在于,
所述获取模块,还用于获取所述数据结构体中所记录的共享缓冲区的空间大小;
所述处理模块,还用于根据所述共享缓冲区的所述空间大小,在所述共享缓冲区内循环写入所述当前播放音频的数据以及读取所述当前播放音频的数据。
11.如权利要求7所述的装置,其特征在于,
所述获取模块,还用于获取在所述当前播放音频的数据发生卡顿时的操作记录;
所述处理模块,还用于根据所述操作记录,确定引起所述当前播放音频的数据发生卡顿的操作事件。
12.如权利要求7-11任一项所述的装置,其特征在于,所述装置还包括:
显示模块,还用于显示提示信息,所述提示信息用于提醒用户所述当前播放音频的数据的所述播放状态。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811479593.9A CN109634809A (zh) | 2018-12-05 | 2018-12-05 | 一种音频播放监控方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811479593.9A CN109634809A (zh) | 2018-12-05 | 2018-12-05 | 一种音频播放监控方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109634809A true CN109634809A (zh) | 2019-04-16 |
Family
ID=66071391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811479593.9A Pending CN109634809A (zh) | 2018-12-05 | 2018-12-05 | 一种音频播放监控方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109634809A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116684521A (zh) * | 2022-10-14 | 2023-09-01 | 荣耀终端有限公司 | 音频处理方法、设备及存储介质 |
WO2023193632A1 (zh) * | 2022-04-06 | 2023-10-12 | 北京字节跳动网络技术有限公司 | 一种音频线程处理方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464685A (zh) * | 2002-06-13 | 2003-12-31 | 优创科技(深圳)有限公司 | 一种在网络终端缓冲区中处理音频流回放的方法 |
US20080147213A1 (en) * | 2006-12-13 | 2008-06-19 | Microsoft Corporation | Lock-Free Shared Audio Buffer |
CN104240739A (zh) * | 2014-09-04 | 2014-12-24 | 广东欧珀移动通信有限公司 | 一种移动终端的音乐播放方法及装置 |
CN105744342A (zh) * | 2016-01-28 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 移动终端的数据传输方法和装置 |
CN105786441A (zh) * | 2016-01-29 | 2016-07-20 | 腾讯科技(深圳)有限公司 | 一种音频处理的方法、服务器、用户设备及系统 |
CN107293316A (zh) * | 2016-04-13 | 2017-10-24 | 青岛海信电器股份有限公司 | 一种音频数据处理方法及装置 |
-
2018
- 2018-12-05 CN CN201811479593.9A patent/CN109634809A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464685A (zh) * | 2002-06-13 | 2003-12-31 | 优创科技(深圳)有限公司 | 一种在网络终端缓冲区中处理音频流回放的方法 |
US20080147213A1 (en) * | 2006-12-13 | 2008-06-19 | Microsoft Corporation | Lock-Free Shared Audio Buffer |
CN104240739A (zh) * | 2014-09-04 | 2014-12-24 | 广东欧珀移动通信有限公司 | 一种移动终端的音乐播放方法及装置 |
CN105744342A (zh) * | 2016-01-28 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 移动终端的数据传输方法和装置 |
CN105786441A (zh) * | 2016-01-29 | 2016-07-20 | 腾讯科技(深圳)有限公司 | 一种音频处理的方法、服务器、用户设备及系统 |
CN107293316A (zh) * | 2016-04-13 | 2017-10-24 | 青岛海信电器股份有限公司 | 一种音频数据处理方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023193632A1 (zh) * | 2022-04-06 | 2023-10-12 | 北京字节跳动网络技术有限公司 | 一种音频线程处理方法、装置、计算机设备和存储介质 |
CN116684521A (zh) * | 2022-10-14 | 2023-09-01 | 荣耀终端有限公司 | 音频处理方法、设备及存储介质 |
CN116684521B (zh) * | 2022-10-14 | 2024-04-12 | 荣耀终端有限公司 | 音频处理方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8331053B2 (en) | Systems and methods for adjacent track interference (ATI) risk management | |
CN110018914B (zh) | 基于共享内存的消息采集方法及装置 | |
CN107193750A (zh) | 一种脚本录制方法和装置 | |
US3723975A (en) | Overdue event detector | |
CN104765689B (zh) | 一种接口性能数据实时监制方法和装置 | |
US9355003B2 (en) | Capturing trace information using annotated trace output | |
CN109634809A (zh) | 一种音频播放监控方法及相关设备 | |
CN109304034A (zh) | 一种游戏作弊检测方法及相关设备 | |
CN108139961A (zh) | 遥测定义系统 | |
CN109453514A (zh) | 一种游戏作弊检测方法及装置 | |
US11755447B2 (en) | Predictive performance indicator for storage devices | |
CN108984255A (zh) | 一种远程协助方法及相关设备 | |
CN102271054A (zh) | 用于网络软件部署评估的书签和性能历史 | |
US10289523B2 (en) | Generating an advanced function usage planning report | |
CN115271586A (zh) | 物料清单生成方法、装置、计算机设备和存储介质 | |
US20120011328A1 (en) | Advanced function monitoring on a storage controller | |
CN108628694A (zh) | 一种基于可编程硬件的数据处理方法以及装置 | |
US20170109258A1 (en) | Smart logging of trace data for storage systems | |
US10169747B2 (en) | Advanced function usage detection | |
CN111142787A (zh) | 存储分层的数据交换测试方法、系统、终端及存储介质 | |
US20120011036A1 (en) | Advanced function usage-based billing | |
CN112463574A (zh) | 软件测试方法、装置、系统、设备和存储介质 | |
CN115129809A (zh) | 用户活跃度的确定方法、装置、电子设备及存储介质 | |
CN111414295B (zh) | 一种cpu占用率的统计方法、装置、设备及介质 | |
CN114443442A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190416 |