具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
第一实施例
图1为本发明第一实施例提供的数据缓冲处理的方法流程图。如图1所示,本实施例数据缓冲处理的方法包括:
步骤11、接收数据,将接收的数据缓存到缓冲区中属性为第一状态的数据位、并将相应数据位的属性更新为第二状态,其中,第一状态用于表示数据位没有缓存数据或者表示数据位缓存有数据且数据已处理完成,第二状态用于表示数据位缓存有数据且数据待处理。
可根据数据位自身数据存储的情况,将缓冲区中任一数据位的属性设置为三种不同的可选状态之一,用以实时表示数据位当前是否缓存有数据以及数据当前的处理状态。例如:第一状态用于表示数据位没有缓存数据或者表示数据位缓存有数据且数据已处理完成,第二状态用于表示数据位缓存有数据且数据待处理,第三状态用于表示数据位缓存有数据且数据正在处理。当然,在本发明实施例中也可以采用其他标识方式来对数据位的属性进行不同的属性设置,本发明实施例包括但不限于上述方式。
在本步骤中,装置可检测缓冲区中属性为第一状态的数据位,将接收端接收到的数据缓存到缓冲区的这些数据位中,同时将这些数据位的属性更新为第二状态,用于表示这些数据位缓存有数据且这些数据等待处理端进行处理。
步骤12、将缓冲区中属性为第二状态的数据位缓存的数据发送到处理端进行处理、并将相应数据位的属性更新为第三状态,第三状态用于表示数据位缓存有数据且数据正在处理。
当缓冲区中已缓存的数据发送到处理端,以供处理端对该数据进行处理。缓存已发送到处理端的数据相应的数据位的数据处理状态已经发生了改变,因此将该数据位的属性由第二状态更新为第三状态,用于表示这些数据位缓存有数据且处理端正在处理这些数据位缓存的数据。
步骤13、当处理端数据处理完成后,将缓冲区中缓存处理完成的数据的相应数据位的属性更新为第一状态。
当处理端完成某数据位缓存的数据的处理时,该数据位的数据处理状态已经发生了改变,因此可将该数据位的属性由第三状态更新为第一状态,用于表示该数据位缓存有数据且处理端已经完成对这些数据位缓存的数据的处理,该数据位可用于缓存新的数据,即可将新接收的数据覆盖该数据原缓存的旧数据。
发明人在实现本发明实施例过程中发现,在现有技术传统的定时器技术中,缓冲区的数据获取周期通常是一个缺省的固定值,其对应着数据推送端向处理端推送缓冲区缓存数据的能力,如果数据推送端向处理端推送缓冲区缓存数据的能力与处理端实际处理数据的能力匹配,则数据缓冲处理的效果较好;否则数据缓冲处理的效果将很不理想。可见,传统的定时器技术中处理端的适配性较差,使得数据缓冲处理的效果难以得到保证。举例说明:假设缺省的数据获取周期为T1,处理端实际处理每帧数据所需的时间为T2,则存在以下三种情形:
1)如果T1等于T2,则处理端实际处理数据的能力等于数据推送端向处理端推送缓冲区缓存数据的能力。当处理端处理完成已缓存的旧数据时,可获取到缓冲区缓存的需要处理的新数据,数据缓冲处理的效果好。
2)如果T1大于T2,则处理端实际处理数据的能力高于数据推送端向处理端推送缓冲区缓存数据的能力。当处理端完成已缓存的旧数据的处理时,数据推送端还没能向处理端推送缓冲区缓存的、需要处理的新数据,造成该时间段内处理端无可处理的数据,从而影响数据内容播放的流畅性。
3)如果T1小于T2,则处理端实际处理数据的能力低于数据推送端向处理端推送缓冲区缓存数据的能力。当处理端还没完成上一数据获取周期已获取的旧数据处理之前,数据推送端又向处理端推送了数据需要处理的新数据,处理端上接收的新数据覆盖未处理完成的旧数据,造成部分数据的丢失。
通过上述分析可知,为了获得较好的数据缓冲处理效率,传统的定时器技术客观上对与缓冲区对接的处理端的实际数据处理能力提出了限制性要求,仅在T1等于T2时,数据缓冲处理的效果才能得到保障,否则可能导致某些时间段内处理端无可处理的数据或部分数据的丢失,从而对数据缓冲处理的效果造成了负面影响。当然,可根据处理端的实际数据处理能力设置缓冲区的数据获取周期以克服上述缺陷。但是,由于不同类型处理端的数据处理能力存在差异,因此当处理端的类型发生变化时,传统的定时器技术须根据当前连接的处理端的实际处理能力重新设置缓冲区的数据获取周期,明显增加了实现的复杂度。
本实施例数据缓冲处理的方法中,将缓冲区任一数据位通过其属性的三种不同的可选状态之一,表示该数据位是否缓存有数据以及缓存有数据时数据的处理状态如何,并在该数据位缓存的数据处理状态发生变化时及时更新,这样可将处理端的数据处理状态回调反馈到缓冲区,通过某一数据位属性的不同状态建立向处理端推送数据能力和处理端实际数据处理能力之间的关联,有效降低了处理端无可处理的数据或部分数据的丢失现象发生的几率。采用本实施例数据缓冲处理的方法根据各数据位的属性进行缓冲区数据位的数据存取控制,缓冲区数据推送能力可与具有不同数据处理能力的处理端设备适配,达到较好的数据缓冲处理效果。
第二实施例
图2为本发明第二实施例提供的数据缓冲处理的方法流程图。本实施例中缓冲区任一数据位的属性可根据自身是否缓存有数据且数据当前处理状态,设置为三种可选的状态之一,假设三种可选状态分别为:“空”、“待处理”和“处理中”,分别对应本发明实施所述的第一状态、第二状态和第三状态。如图2所示,本实施例数据缓冲处理的方法包括:
步骤21、以预设时长为检测周期,周期性检测缓冲区中是否存在属性为“空”的数据位,如果是,则执行步骤22,否则执行步骤23。
本步骤中周期性检测为可选方案,即接收端也可采用实时检测缓冲区中是否存在属性为“空”的数据位等替换方案。
步骤22、将接收端接收的数据缓存到缓冲区中属性为“空”的数据位中,并将这些数据位的属性由“空”更新为“待处理”,在下一检测周期到来时,执行步骤21。
步骤23、不向缓冲区缓存新接收到的数据,在下一检测周期到来时,执行步骤21。
上述步骤21-步骤23为在缓冲区进行数据的存控制,即解决将接收端接收的数据缓存到缓冲区中。
步骤24、以预设时长为检测周期,周期性检测缓冲区中属性为“处理中”的数据位的总位数。
本步骤预设的检测周期与步骤21中预设的检测周期可相同或不同。此外,本步骤中周期性检测为可选方案,即接收端也可采用实时检测缓冲区中属性为“处理中”的数据位的总位数等替换方案。当然,在本发明实施例中包括但不限于上述方式。
步骤25、判断步骤24检测得到的缓冲区中属性为“处理中”的数据位的总位数,是否小于处理端所需的门限数据量;如果是,执行步骤26,否则执行步骤28。
处理端所需的门限数据量可预先获取,该门限数据量反映了处理端的实际数据处理能力。需要说明的是,并不是每次执行流程时都需后去处理端所需的门限数据量,例如:当处理端所需的门限数据量没有发生变化时,只需获取一次,在后续流程中即可使用已获取的处理端所需门限数据量。
步骤26、计算处理端的所需的门限数据量与缓冲区中属性为“处理中”的数据位的总位数的差值,向处理端发送缓冲区中属性为“待处理”的数据位缓存的数据,并将这些数据位的属性由“待处理”更新为“处理中”,本步骤向处理端发送数据相应的数据位的位数等于计算得到的上述差值。
本步骤用于在处理端实际数据处理能力允许的前提下,周期性地向处理端推送待处理的数据,以提高数据处理的效率。具体的,缓冲区中属性为“处理中”的数据位的总位数反映了处理端正在处理的数据量。如果处理端所需的门限数据量大于处理端当前正在处理的数据量,说明处理端实际数据处理能力还没有饱和,则向处理端补充部分处理量,充分运用处理端数据处理的能力以提高效率。
步骤27、当处理端数据处理完成时接收处理端反馈的系统消息,并将缓冲区中缓存处理完成的数据的相应数据位的属性由“处理中”更新为“空”,执行步骤29。
本步骤将处理端数据处理进度信息回调反馈到缓冲区,并更新了相应数据位的属性,以便提高向处理端推送待处理数据量的精准性。
步骤28、不向处理端发送缓冲区中属性为“待处理”的数据位缓存的数据;执行步骤29。
如果处理端当前正在处理的数据量等于处理端所需的门限数据量,说明处理端实际数据处理能力已饱和,则不向处理端推送待处理的数据,以免新推送的待处理数据覆盖处理端还没处理完成的旧数据,从而导致部分数据丢失。
步骤29、在下一检测周期到来时,执行步骤24。
上述步骤24-步骤29为在缓冲区进行数据的取控制,即解决将缓冲区中已缓存的待处理数据发送到处理端,并回调处理端的处理反馈。
本实施例中对缓冲区进行数据的存控制即步骤21-步骤23,与对缓冲区进行数据的取控制即步骤24-步骤29之间的时序关系,与缓冲区各数据位的属性动态变化有关。对于缓冲区而言,一些数据位进行存控制、一些数据位进行取控制以及一些数据位不进行存取控制等三种情形是并存的,步骤编号仅为示例,不应理解为步骤之间时序关系的静态限制。
本实施例数据缓冲处理的方法中,引入了处理端数据处理进度回调反馈机制和待处理数据的定时推送机制,一方面通过检测缓冲区中数据位的状态确定是否需要向处理端推送待处理的数据以及需要推送的数据量,另一方面通过系统消息获取处理端数据处理进度的信息,在获取系统信息时更新缓冲区中相应数据位的状态,从而可充分发挥处理端数据处理的能力以提高数据处理效率,提高处理端推送待处理数据的精准性,有效改善了数据缓冲处理的效果。
第三实施例
图3为本发明实施例提供的数据缓冲处理的方法应用场景示例。图3所示的应用场景以音频数据播放为例进行说明,本应用场景中与缓冲区对接的处理端可为具有音频数据处理功能的设备,如声卡等。任一数据位的属性可根据自身是否缓存有数据且数据当前处理状态,设置为三种可选的状态之一。假设三种可选状态分别采用数据位属性信息中的某标志位的设置值表示,图中仅示出了缓冲区中的部分数据位的标记位,例如:
0:“空位”,对应本发明实施所述的第一状态,表示该数据位可用来存放新数据;
1:“待播放”,对应本发明实施所述的第二状态,表示该数据位已经存放有数据且该数据尚未处理,可将数据位存放的数据发送到声卡进行处理;
2:“播放”,对应本发明实施所述的第三状态,表示该数据位已经存放有数据且该数据已经发送到声卡进行处理。
本实施例可通过创建三个线程实现对缓冲区各数据位进行存取控制,这三个线程例如:
数据接收线程:用于处理从网络侧或串口接收到的数据,将数据组成帧后按顺序保存到缓冲区属性为“空位”,即标记位设置值为“0”的数据位中,同时将相应数据位的属性由“空位”修改为“待播放”,即将相应数据位用于表示属性的标记位设置值由“0”修改为“1”。可选的,当缓冲区已满时,则可丢弃多余的数据。
定时处理线程:可采用媒体定时器进行定时控制,以既定时长为间隔进行周期性调用定时处理线程。定时处理线程用于不断监控缓冲区各数据位使用情况,例如:任一周期内,检测缓冲区中属性为“处理中”的数据位的总位数,即监测缓冲区中标志位设置值为“2”的数据位的总位数,判断监测到的标志位设置值为“2”的数据位的总位数小于声卡所需的门限数据量,即声卡还没发挥自身最大数据处理能力,则向声卡补充推送标志位设置值为“1”的数据位上存放的数据,声卡补充推送数据量对应的数据位的位数,等于声卡所需的门限数据量与上述检测标志位设置值为“2”的数据位的总位数之间的差值;同时定时处理线程补充推送数据相应数据位标志位设置值由“1”修改为“2”。如果当前检测周期标志位设置值为“2”的数据位的总位数等于声卡所需的门限数据量,则不向声卡补充推送数据。
声卡播放回调线程:在声卡每播放完一帧数据后,声卡会向缓冲区发送系统消息,当接收到声卡发送的系统消息时,调用一次声卡播放回调线程,声卡播放回调线程用于将已经播放完成的数据对应的数据位的标记位设置值由“2”修改为“0”。
上述数据接收线程、定时处理线程和声卡播放回调线程通过设置标记位的方式配合动作,将定时监控和声卡回调的反馈有效集成在一起,优化了缓冲区的管理,从而改善了数据缓冲处理的效果。
本发明上述实施例可应用于各种基于缓冲区进行数据缓冲处理的应用场景中,如果应用于对数据处理实时性要求较高的业务数据的缓冲处理的应用场景中,可有效保障数据处理效果。
第四实施例
图4为本发明第四实施例提供的数据缓冲处理的装置结构示意图。如图4所示,本实施例数据缓冲处理的装置包括:数据接收模块41、数据推送模块42和回调反馈模块43。
数据接收模块41用于接收数据,将接收的数据缓存到缓冲区中属性为第一状态的数据位、并将相应数据位的属性更新为第二状态,其中,第一状态用于表示数据位没有缓存数据或者表示数据位缓存有数据且数据已处理完成,第二状态用于表示数据位缓存有数据且数据待处理。
数据推送模块42用于将缓冲区中属性为第二状态的数据位缓存的数据发送到处理端进行处理、并将相应数据位的属性更新为第三状态,第三状态用于表示数据位缓存有数据且数据正在处理。
回调反馈模块43用于当处理端数据处理完成后,将缓冲区中缓存处理完成的数据的相应数据位的属性更新为第一状态。
在上述技术方案的基础上,可选的数据推送模块包括:定时检测单元、比较单元和推送单元(图中未示出)。
定时检测单元用于以预设时长为间隔,周期性检测缓冲区中属性为第三状态的数据位的总位数。
比较单元用于比较定时检测单元检测得到属性为第三状态的数据位的总位数,是否小于预先获取的处理端所需的门限数据量。
推送单元用于如果定时检测单元检测得到属性为第三状态的数据位的总位数,小于处理端所需的门限数据量,则将缓冲区中属性为第二状态的数据位缓存的数据发送到处理端进行处理、并将相应数据位的属性更新为第三状态;向处理端发送的数据相应的数据位的位数,等于处理端所需的门限数据量与定时检测单元检测得到属性为第三状态的数据位的总位数的差值。
可选的,推送单元还可用于如果总位数大于或等于处理端所需的门限数据量,则不向处理端发送缓冲区中属性为第二状态的数据位缓存的数据。
数据接收模块包括:状态检测单元和数据缓存单元(图中未示出)。
状态检测单元用于检测缓冲区中是否存在属性为第一状态的数据位。状态检测单元还可用于以预设时长为间隔,周期性检测缓冲区中是否存在属性为第一状态的数据位。
数据缓存单元用于如果缓冲区中存在属性为第一状态的数据位,则将接收的数据缓存到相应数据位。
本实施例数据缓冲处理的装置中,将缓冲区任一数据位通过其属性的三种不同的可选状态之一,表示该数据位是否缓存有数据以及缓存有数据时数据的处理状态如何,并在该数据位缓存的数据处理状态发生变化时及时更新,这样可将处理端的数据处理状态回调反馈到缓冲区,通过某一数据位属性的不同状态建立向处理端推送数据能力和处理端实际数据处理能力之间的关联,有效降低了处理端无可处理的数据或部分数据的丢失现象发生的几率。采用本实施例数据缓冲处理的装置根据各数据位的属性进行缓冲区数据位的数据存取控制,数据处理模块向处理端推送缓冲区缓存的数据的能力,可与具有不同数据处理能力的处理端设备适配,达到较好的数据缓冲处理效果。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。