流媒体播放状态检测方法及装置与流程

文档序号:16065944发布日期:2018-11-24 12:40阅读:545来源:国知局

本发明涉及数据检测技术领域,更具体的说,涉及流媒体播放状态检测方法及装置。

背景技术

随着科学技术的发展,信息传播越来越快,多媒体技术发展日益更新,视频成为了信息传播的重要途径,越来越多的用户选择观看视频来获取信息,也将观看视频作为娱乐休闲。那么,如何准确并及时地检测到流媒体是否播放完毕成为一个必须面对和解决的现实问题。

现有的技术方案,通常是获取流媒体的开始帧的显示时间戳pts

(presentationtimestamp)值与结束帧的pts值,并将开始帧的pts值与结束帧的pts值之间的差值作为流媒体的总时长,然后根据流媒体播放过程中总时长的流失情况来判断流媒体是否播放完毕。但是,这种方法只适用于具有固定开始时间与固定结束时间的完整片源,如本地媒体片源文件或点播的单个流媒体,并且要求流媒体数据帧的pts值必须具有连续性,一旦pts值发生突变,就会导致流媒体的总时长计算出错,从而无法准确地检测出流媒体是否播放完毕;而且,对于时移播放与回看播放的流媒体,以及将多段广告流数据片源打包到同一个码流中下发的流媒体,当流媒体中的pts值不对时,也会导致流媒体的总时长的计算结果出现偏差,从而无法准确地检测出流媒体是否播放完毕。

因此,目前迫切需要一种更加切实有效的流媒体播放状态检测方案,以提高流媒体播放状态检测的准确性与普适性。



技术实现要素:

有鉴于此,本发明提供了一种流媒体播放状态检测方法及装置,以解决现有的流媒体播放状态检测方案的准确性与普适性较差的技术问题。

为实现上述目的,本发明提供如下技术方案:

一种流媒体播放状态检测方法,所述方法包括:

在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;

当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;

当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。

优选的,所述方法还包括:

当所述水位值大于预设水位值时,再次执行所述获取流媒体解码器的缓冲区的水位值的步骤。

优选的,所述方法还包括:

当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长不大于预设时长时,再次执行所述获取流媒体解码器的缓冲区的水位值的步骤。

优选的,在所述当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值的步骤之后,所述方法还包括:

当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值,并再次执行所述获取流媒体解码器的缓冲区的水位值的步骤;

当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

优选的,所述预设时长不小于两倍的单帧时长;其中,所述单帧时长为所述流媒体中单个数据帧的输出时长。

一种流媒体播放状态检测装置,所述装置包括:

水位值获取单元,用于在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;

pts值获取单元,用于当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;

播放状态确定单元,用于当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。

优选的,所述水位值获取单元,还用于:

当所述水位值大于预设水位值时,再次获取流媒体解码器的缓冲区的水位值。

优选的,所述水位值获取单元,还用于:

当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长不大于预设时长时,再次获取流媒体解码器的缓冲区的水位值。

优选的,所述装置还包括:pts记录更新单元与持续时长确定单元;

所述pts记录更新单元,用于当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值;

所述水位值获取单元,还用于当本次获取的数据帧的pts值与上一次记录的pts值不同时,再次获取流媒体解码器的缓冲区的水位值;

所述持续时长确定单元,用于当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

优选的,所述预设时长不小于两倍的单帧时长;其中,所述单帧时长为所述流媒体中单个数据帧的输出时长。

从上述的技术方案可以看出,本发明提供的流媒体播放状态检测方法及装置,在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。本发明通过检测缓冲区的水位值来判断流媒体的实时解码状态,通过检测数据帧的pts值来判断是否有新的数据帧到达,并通过pts值保持恒定不变的持续时长来规避pts值突变或不对造成的影响,从而以多条件的组合判断方式来检测流媒体播放状态,且无需依赖于对流媒体总时长的检测,有效提高了流媒体播放状态检测的准确性与普适性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的流媒体播放状态检测方法的一种流程图;

图2为本发明实施例提供的流媒体解码流程的示例图;

图3为本发明实施例提供的流媒体播放状态检测方法的另一种流程图;

图4为本发明实施例提供的流媒体播放状态检测方法的又一种流程图;

图5为本发明实施例提供的流媒体播放状态检测装置的一种结构示意图;

图6为本发明实施例提供的流媒体播放状态检测装置的另一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,图1为本发明实施例提供的流媒体播放状态检测方法的一种流程图。

如图1所示,所述方法包括:

s110:在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值。

所述流媒体解码器用于对所述流媒体进行解码。在流媒体播放过程中,如图2所示,播放设备会利用流媒体解码器将流媒体数据进行解码,并将解码后的数据帧输出到流媒体解码器的缓冲区中,最后利用解码显示模块刷新输出解码数据(如解码后的视频数据和/或音频数据)。

在流媒体播放过程中,对于纯音频格式的媒体流,则获取音频解码器的缓冲区的水位值;对于带有视频的媒体流,则获取视频解码器的缓冲区的水位值,从而针对不同的流媒体组成方式提供更准确的参数值。

流媒体解码器的缓冲区(fifo_buffer,firstinputfirstoutput_

buffer)是一个先入先出的缓冲区,其利用读写指针偏移位置指示数据的读写位置,并且可以循环利用同一个缓冲区。

缓冲区的水位值,是指缓冲区的已用空间(fifo_used_size)与分配给缓冲区的总空间(fifo_buf_size)的比值再乘以100后得到的比值,用于表明缓冲区的使用情况。其中,fifo_used_size与fifo_buf_size的单位均可采用字节(byte)来表示。

s120:当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值。

缓冲区的水位值的变化范围在[0,100]的区间内,其中,0表示缓冲区中没有解码成功的数据帧,100表示缓冲区处于满载状态。在正常工作状态下,缓冲区的水位值大于0且小于100。

当流媒体播放完毕时,缓冲区的水位值会等于0;但是,当水位值等于0时,却并不一定是由于流媒体播放完毕,因为也有可能是解码错误后数据帧直接被丢弃使得缓冲区中没有新数据而导致,还有可能是由于流媒体解码器的解码生成码率小于解码的消费码率使缓冲区出现“饥饿”状态而导致,所以,缓冲区的水位值等于0,可作为判断流媒体播放完毕的必要条件,但却不是充分条件。

一示例中,所述预设水位值等于0。在该示例中,由于水位值的变化范围在[0,100]的区间内,所以,当获取到的水位值不大于预设水位值时,表明获取到的水位值等于0。

其他示例中,所述预设水位值也可以设置成一个大于0但接近于0的值,通过一定的容错机制,可以避免流媒体播放完毕后,由于缓冲区中存在极少量残留数据而导致判断出错的情况。

显示时间戳pts(presentationtimestamp)用于表征数据帧呈现的时间值;pts主要用于数据帧的同步和输出,在呈现输出的时候使用。

所述获取所述流媒体解码器中数据帧的显示时间戳pts值,实际上就是获取所述流媒体解码器中最近播放的数据帧的显示时间戳pts值。所述数据帧的显示时间戳pts值,同样源于流媒体解码器的缓冲区。

对于纯音频格式的媒体流,则获取所述音频解码器中最近播放的音频帧的pts值;对于带有视频的媒体流,则获取所述视频解码器中最近播放的视频帧的pts值,从而针对不同的流媒体组成方式提供更准确的参数值。

s130:当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。

当流媒体播放完毕时,所述流媒体解码器中不会再有新的数据帧,最后获取的所述流媒体解码器中数据帧的pts值将会保持恒定不变,但是,当所述流媒体解码器中数据帧的pts值保持恒定不变时,也有可能是由于所述流媒体解码器中数据帧的pts值的在短时间内发生突变或不对造成的,所以,本发明通过预设时长的设置,当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,表明所述流媒体解码器中数据帧的pts值已在较长时间内未发生变化,由此可以排除因pts值发生突变或不对而导致检测结果有误的情况。

当所述水位值不大于预设水位值,且,所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,则可以判定所述流媒体播放完毕。

本实施例提供的流媒体播放状态检测方法,在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。本发明通过检测缓冲区的水位值来判断流媒体的实时解码状态,通过检测数据帧的pts值来判断是否有新的数据帧到达,并通过pts值保持恒定不变的持续时长来规避pts值突变或不对造成的影响,从而以多条件的组合判断方式来检测流媒体播放状态,且无需依赖于对流媒体总时长的检测,有效提高了流媒体播放状态检测的准确性与普适性。

请参阅图3,图3为本发明实施例提供的流媒体播放状态检测方法的另一种流程图。

如图3所示,所述方法包括:

s210:在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值。

s220:判断所述水位值是否不大于预设水位值,若是,执行步骤s230;若否,再次执行步骤s210。

当所述水位值大于预设水位值时,再次执行所述获取流媒体解码器的缓冲区的水位值的步骤。

s230:获取所述流媒体解码器中数据帧的显示时间戳pts值。

当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值。

s240:判断pts值保持恒定不变的持续时长是否大于预设时长,若是,执行步骤s250;若否,执行步骤s210。

判断所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长是否大于预设时长,当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长不大于预设时长时,再次执行所述获取流媒体解码器的缓冲区的水位值的步骤。

s250:确定所述流媒体播放完毕。

当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。

本实施例提供的流媒体播放状态检测方法,在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕;并且,当所述水位值大于预设水位值,或者,所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长不大于预设时长时,再次执行所述获取流媒体解码器的缓冲区的水位值的步骤,从而提供了一个更加详细、完整的流媒体播放状态检测流程,进一步提高了流媒体播放状态检测的准确性。

请参阅图4,图4为本发明实施例提供的流媒体播放状态检测方法的又一种流程图。

如图3所示,所述方法包括:

s310:在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值。

s320:判断所述水位值是否不大于预设水位值,若是,执行步骤s330;若否,再次执行步骤s310。

s330:获取所述流媒体解码器中数据帧的显示时间戳pts值。

s340:判断pts_current的值与pts_last的值是否相同,若否,则执行步骤s350;若是,则执行步骤s360。

在获取流媒体解码器中数据帧的显示时间戳pts值时,可通过比较变量pts_current的值与变量pts_last的值来判断流媒体解码器中数据帧的pts值是否恒定不变。其中,变量pts_current的值即为本次获取的数据帧的pts值,也即最近播放的数据帧的pts值;变量pts_last的值即为上一次记录的pts值,其初始值为0。

判断变量pts_current的值与变量pts_last的值是否相同,实际就是判断本次获取的数据帧的pts值与上一次记录的pts值是否相同。

s350:将pts_last的值更新为pts_current的值,并再次执行步骤s310。

将变量pts_last的值更新为变量pts_current的值,实际上就是将上一次记录的pts值更新为本次获取的数据帧的pts值。

其中,在第一次判断时,由于变量pts_last的值为初始值0,变量pts_current的值与变量pts_last的值必然不相等,此时就要将变量pts_current的值赋值给pts_last,并返回步骤s310重新进入检测流程。

当变量pts_current的值与变量pts_last的值相等时,则不会执行将pts_last的值更新为pts_current的值的处理过程。

s360:将pts_current的本次更新时刻与pts_last的上一次更新时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

当变量pts_current的值与变量pts_last的值相同时,则表明流媒体解码器中数据帧的pts值保持恒定不变,即没有新的数据帧达到,此时需要获取流媒体解码器中数据帧的pts值保持恒定不变的持续时长,具体可以将变量pts_current的本次更新时刻与变量pts_last的上一次更新时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

其中,变量pts_current的本次更新时刻与变量pts_last的上一次更新时刻之间的时间间隔,实际上就是本次获取时刻与上一次记录时刻之间的时间间隔。

也就是说,当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值,并再次执行所述获取流媒体解码器的缓冲区的水位值的步骤;当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

s370:判断所述持续时长是否大于预设时长,若是,执行步骤s380;若否,执行步骤s310。

其中,设置预设时长的作用在于,确定流媒体解码器中数据帧的pts值保持恒定不变的情况是否确实属于流媒体播放完毕的情况。

一示例中,所述预设时长不小于两倍的单帧时长;其中,所述单帧时长为所述流媒体中单个数据帧的输出时长。

例如,视频输出一般是25帧/秒,单帧的输出时长为40毫秒,当流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于80ms时,可以确定视频播放完毕。

通过pts值保持恒定不变的持续时长的判断,能够有效规避数据帧的pts值突变造成的影响,并能够保证数据帧能够在结束播放之前显示完毕。

s380:确定所述流媒体播放完毕。

在确定流媒体播放完毕时,还可以向播放设备发出播放结束消息,并设定相应的结束播放状态,完成流媒体播放状态检测流程。

本实施例提供的流媒体播放状态检测方法,当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值,并再次执行所述获取流媒体解码器的缓冲区的水位值的步骤;当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长,从而准确地获取到所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长,并当持续时长大于预设时长时,确定所述流媒体播放完毕,无需依赖于对流媒体总时长的检测,进一步提高了流媒体播放状态检测的准确性与普适性。

本发明实施例还提供了流媒体播放状态检测装置,所述流媒体播放状态检测装置用于实施本发明实施例提供的流媒体播放状态检测方法,下文描述的流媒体播放状态检测装置的技术内容,可与上文描述的流媒体播放状态检测方法的技术内容与相互对应参照。

请参阅图5,图5为本发明实施例提供的流媒体播放状态检测装置的一种结构示意图。

如图5所示,所述流媒体播放状态检测装置包括:

水位值获取单元110,用于在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值。

pts值获取单元120,用于当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值。

一示例中,所述预设水位值等于0。

播放状态确定单元130,用于当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。

本实施例提供的流媒体播放状态检测装置,在流媒体播放过程中,获取流媒体解码器的缓冲区的水位值;当所述水位值不大于预设水位值时,获取所述流媒体解码器中数据帧的显示时间戳pts值;当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长大于预设时长时,确定所述流媒体播放完毕。本发明通过检测缓冲区的水位值来判断流媒体的实时解码状态,通过检测数据帧的pts值来判断是否有新的数据帧到达,并通过pts值保持恒定不变的持续时长来规避pts值突变或不对造成的影响,从而以多条件的组合判断方式来检测流媒体播放状态,且无需依赖于对流媒体总时长的检测,有效提高了流媒体播放状态检测的准确性与普适性。

请参阅图6,图6为本发明实施例提供的流媒体播放状态检测装置的另一种结构示意图。

如图6所示,所述流媒体播放状态检测装置除了包括前述实施例中的水位值获取单元110、pts值获取单元120与播放状态确定单元130外,还可以包括:pts记录更新单元140与持续时长确定单元150。

一示例中,所述水位值获取单元110,还用于:

当所述水位值大于预设水位值时,再次获取流媒体解码器的缓冲区的水位值。

一示例中,所述水位值获取单元110,还用于:

当所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长不大于预设时长时,再次获取流媒体解码器的缓冲区的水位值。

一示例中,所述pts记录更新单元,用于当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值;

所述水位值获取单元,还用于当本次获取的数据帧的pts值与上一次记录的pts值不同时,再次获取流媒体解码器的缓冲区的水位值;

所述持续时长确定单元,用于当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长。

一示例中,所述预设时长不小于两倍的单帧时长;其中,所述单帧时长为所述流媒体中单个数据帧的输出时长。

本实施例提供的流媒体播放状态检测装置,当本次获取的数据帧的pts值与上一次记录的pts值不同时,将上一次记录的pts值更新为本次获取的数据帧的pts值,并再次执行所述获取流媒体解码器的缓冲区的水位值的步骤;当本次获取的数据帧的pts值与上一次记录的pts值相同时,将本次获取时刻与上一次记录时刻之间的时间间隔,确定为所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长,从而准确地获取到所述流媒体解码器中数据帧的pts值保持恒定不变的持续时长,并当持续时长大于预设时长时,确定所述流媒体播放完毕,无需依赖于对流媒体总时长的检测,进一步提高了流媒体播放状态检测的准确性与普适性。

本发明提供的流媒体播放状态检测方法及装置,可应用于机顶盒平台,需要机顶盒平台的sdkapi(softwaredevelopmentkitapi,软件开发工具包接口)提供获取流媒体解码器的缓冲区的水位值及所述流媒体解码器中数据帧的显示时间戳pts值的获取接口,一般所有的机顶盒平台都带有此功能。其中,sdkapi是将平台硬件驱动及设备操作逻辑封装好后以供用户使用的接口集。

本发明对于任何类别的流媒体都可以进行准确的播放进度判定,其中,通过多个预设条件的组合判定,能够有效避免由于获取到的某个参数错误而导致结果出错,从而实现更精准的结束标志判定以结束播放。

最后,还需要说明的是,在本文中,诸如第一和第一等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式来实现。基于这样的理解,本申请的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1