视频播放方法、装置和设备、计算机可读存储介质

文档序号:1345784 发布日期:2020-07-21 浏览:6次 >En<

阅读说明:本技术 视频播放方法、装置和设备、计算机可读存储介质 (Video playing method, device and equipment and computer readable storage medium ) 是由 韩存爱 于 2019-01-11 设计创作,主要内容包括:本发明公开了一种视频播放方法,包括:当正在播放所述视频的应用程序从前台被切换到后台时,发起记录所述视频的当前播放位置;当所述应用程序从后台被切换回前台时,取回所记录的当前播放位置并且在所述视频中获取最接近所述当前播放位置且在所述当前播放位置之前的帧内编码帧;发起从所述最接近的帧内编码帧开始解码所述视频;并且当解码到达所述当前播放位置时,发起从所述当前播放位置恢复播放所述视频。还公开了一种视频播放设备和计算机可读存储介质。(The invention discloses a video playing method, which comprises the following steps: when an application program playing the video is switched from a foreground to a background, initiating to record the current playing position of the video; when the application program is switched back to the foreground from the background, retrieving the recorded current playing position and acquiring an intra-frame coding frame which is closest to and before the current playing position in the video; initiating decoding of the video starting from the closest intra-coded frame; and when the decoding reaches the current playing position, initiating the video to resume playing from the current playing position. A video playback device and a computer-readable storage medium are also disclosed.)

视频播放方法、装置和设备、计算机可读存储介质

技术领域

本发明涉及视频内容再现,具体来说涉及一种视频播放方法、视频播放装置、视频播放设备、以及计算机可读存储介质。

背景技术

在播放视频的过程中,当视频应用被切入到后台(例如,由于用户按下home键),并且然后恢复到前台以继续播放视频时,可能会出现短暂的黑屏。直到视频中的下一个关键帧到来后,才能出现正常的画面,而此时的画面与用户点击home键时的画面通常是不连续的。这导致不连续的观看体验。

发明内容

提供一种可以缓解、减轻或消除上述问题的解决方案将是有利的。

根据本发明的一方面,提供了一种视频播放方法,包括:当正在播放所述视频的应用程序从前台被切换到后台时,发起记录所述视频的当前播放位置;当所述应用程序从后台被切换回前台时,取回所记录的当前播放位置并且在所述视频中获取最接近所述当前播放位置且在所述当前播放位置之前的帧内编码帧;发起从所述最接近的帧内编码帧开始解码所述视频;并且当解码到达所述当前播放位置时,发起从所述当前播放位置恢复播放所述视频。

在一些实施例中,发起记录所述视频的当前播放位置包括:将所述当前播放位置保存到全局内存中。取回所记录的当前播放位置包括:从所述全局内存中读取所述当前播放位置。

在一些实施例中,所述视频包括视频载荷数据、指示该视频载荷数据中的各视频帧的帧类型的标识元数据、以及指示所述各视频帧的显示时间值的时间元数据。获取所述最接近的帧内编码帧包括:基于所述标识元数据和所述时间元数据搜寻所述最接近的帧内编码帧。

在一些实施例中,所述标识元数据还包括索引信息,其指示所述视频载荷数据中的各帧内编码帧相对于所述视频的起始位置的相应偏移量。搜寻所述最接近的帧内编码帧包括:基于所述索引信息顺序地解析所述各帧内编码帧的所述时间元数据,其中:从所述时间元数据导出当前帧内编码帧的显示时间值;比较所述显示时间值与所述当前播放位置的时间值;响应于所述显示时间值小于所述当前播放位置的时间值,继续针对下一帧内编码帧进行所述时间元数据的所述解析;响应于所述显示时间值大于所述当前播放位置的时间值,确定前一帧内编码帧为所述最接近的帧内编码帧;并且响应于所述显示时间值等于所述当前播放位置的时间值,确定该当前帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,所述方法还包括:响应于所述各帧内编码帧中的最后一个帧内编码帧的显示时间值小于所述当前播放位置的时间值,确定该最后一个帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,所述视频包括多个分片,每个分片包括时间上分隔开的多个帧内编码帧,所述多个帧内编码帧中的每一个跟随有相应的非帧内编码帧。所述时间元数据还包括指示所述多个分片的相应持续时间的时间信息。搜寻所述最接近的帧内编码帧包括:根据所述当前播放位置和所述时间信息确定所述当前播放位置所在的、所述多个分片中的一个分片;顺序地解析所述当前播放位置所在的该分片内的各帧内编码帧和非帧内编码帧的所述标识元数据,其中:从所述标识元数据导出当前帧的帧类型;响应于所述当前帧为非帧内编码帧,继续针对下一帧进行所述标识元数据的所述解析;响应于所述当前帧为帧内编码帧,从所述当前帧的所述时间元数据导出所述当前帧的显示时间值;比较所述显示时间值与所述当前播放位置的时间值;响应于所述显示时间值小于所述当前播放位置的时间值,继续针对下一帧进行所述标识元数据的所述解析;响应于所述显示时间值大于所述当前播放位置的时间值,确定前一帧内编码帧为所述最接近的帧内编码帧;并且响应于所述显示时间值等于所述当前播放位置的时间值,确定该当前帧为所述最接近的帧内编码帧。

在一些实施例中,搜寻所述最接近的帧内编码帧还包括:响应于所述当前帧为非帧内编码帧,在继续针对下一帧进行所述标识元数据的所述解析之前,从所述当前帧的所述时间元数据导出所述当前帧的显示时间值;并且响应于所述当前帧的显示时间值等于所述当前播放位置所在的该分片的结束时间,确定所述各帧内编码帧中的最后一个帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,发起解码所述视频包括:将所获取的最接近的帧内编码帧和跟随该最接近的帧内编码帧的多个视频帧传递给解码器组件;并且每次当前帧被解码,则判断该解码的当前帧的显示时间值是否等于所述当前播放位置的时间值,其中:响应于所述显示时间值不等于所述当前播放位置的时间值,丢弃所述解码的当前帧并继续针对下一解码帧进行所述判断,并且响应于所述显示时间值等于所述当前播放位置的时间值,确定解码已到达所述当前播放位置。

在一些实施例中,所述应用程序运行在iOS平台中,所述iOS平台中开放了用于访问底层硬件解码框架的应用编程接口。发起解码所述视频包括:经由所述应用编程接口调用所述底层硬件解码框架以执行解码。

在一些实施例中,发起解码所述视频包括:调用软件解码器以执行解码。

根据本发明的另一方面,提供了一种视频播放装置,包括:用于当正在播放所述视频的应用程序从前台被切换到后台时,发起记录所述视频的当前播放位置的装置;用于当所述应用程序从后台被切换回前台时,取回所记录的当前播放位置并且在所述视频中获取最接近所述当前播放位置且在所述当前播放位置之前的帧内编码帧的装置;用于发起从所述最接近的帧内编码帧开始解码所述视频的装置;以及用于当解码到达所述当前播放位置时,发起从所述当前播放位置恢复播放所述视频的装置。

根据本发明的又另一方面,提供了一种视频播放设备,包括:播放位置记录模块,被配置成当正在播放所述视频的应用程序从前台被切换到后台时,记录所述视频的当前播放位置;帧内编码帧获取模块,被配置成当所述应用程序从后台被切换回前台时,取回所记录的当前播放位置并且在所述视频中获取最接近所述当前播放位置且在所述当前播放位置之前的帧内编码帧;以及播放恢复模块,被配置成从所述最接近的帧内编码帧开始解码所述视频,并且当解码到达所述当前播放位置时,促使所述应用程序从所述当前播放位置恢复播放所述视频。

在一些实施例中,所述播放位置记录模块被配置成将所述当前播放位置保存到全局内存中以记录所述视频的当前播放位置。所述帧内编码帧获取模块被配置成从所述全局内存中读取所述当前播放位置以取回所记录的当前播放位置。

在一些实施例中,所述视频包括视频载荷数据、指示该视频载荷数据中的各视频帧的帧类型的标识元数据、以及指示所述各视频帧的显示时间值的时间元数据。所述帧内编码帧获取模块被配置成基于所述标识元数据和所述时间元数据搜寻所述最接近的帧内编码帧。

在一些实施例中,所述标识元数据还包括索引信息,其指示所述视频载荷数据中的各帧内编码帧相对于所述视频的起始位置的相应偏移量。所述帧内编码帧获取模块被配置成:基于所述索引信息顺序地解析所述各帧内编码帧的所述时间元数据,其中:从所述时间元数据导出当前帧内编码帧的显示时间值;比较所述显示时间值与所述当前播放位置的时间值;响应于所述显示时间值小于所述当前播放位置的时间值,继续针对下一帧内编码帧进行所述时间元数据的所述解析;响应于所述显示时间值大于所述当前播放位置的时间值,确定前一帧内编码帧为所述最接近的帧内编码帧;并且响应于所述显示时间值等于所述当前播放位置的时间值,确定该当前帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,所述帧内编码帧获取模块还被配置成:响应于所述各帧内编码帧中的最后一个帧内编码帧的显示时间值小于所述当前播放位置的时间值,确定该最后一个帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,所述视频包括多个分片,每个分片包括时间上分隔开的多个帧内编码帧,所述多个帧内编码帧中的每一个跟随有相应的非帧内编码帧。所述时间元数据还包括指示所述多个分片的相应持续时间的时间信息。所述帧内编码帧获取模块被配置成:根据所述当前播放位置和所述时间信息确定所述当前播放位置所在的、所述多个分片中的一个分片;顺序地解析所述当前播放位置所在的该分片内的各帧内编码帧和非帧内编码帧的所述标识元数据,其中:从所述标识元数据导出当前帧的帧类型;响应于所述当前帧为非帧内编码帧,继续针对下一帧进行所述标识元数据的所述解析;响应于所述当前帧为帧内编码帧,从所述当前帧的所述时间元数据导出所述当前帧的显示时间值;比较所述显示时间值与所述当前播放位置的时间值;响应于所述显示时间值小于所述当前播放位置的时间值,继续针对下一帧进行所述标识元数据的所述解析;响应于所述显示时间值大于所述当前播放位置的时间值,确定前一帧内编码帧为所述最接近的帧内编码帧;并且响应于所述显示时间值等于所述当前播放位置的时间值,确定该当前帧为所述最接近的帧内编码帧。

在一些实施例中,所述帧内编码帧获取模块被配置成:响应于所述当前帧的显示时间值等于所述当前播放位置所在的该分片的结束时间,确定所述各帧内编码帧中的最后一个帧内编码帧为所述最接近的帧内编码帧。

在一些实施例中,所述播放恢复模块被配置成:将所获取的最接近的帧内编码帧和跟随该最接近的帧内编码帧的多个视频帧传递给解码器组件;并且每次当前帧被解码,则判断该解码的当前帧的显示时间值是否等于所述当前播放位置的时间值,其中:响应于所述显示时间值不等于所述当前播放位置的时间值,丢弃所述解码的当前帧并继续针对下一解码帧进行所述判断,并且响应于所述显示时间值等于所述当前播放位置的时间值,确定解码已到达所述当前播放位置。

在一些实施例中,所述应用程序运行在iOS平台中,所述iOS平台中开放了用于访问底层硬件解码框架的应用编程接口。所述播放恢复模块被配置成经由所述应用编程接口调用所述底层硬件解码框架以执行解码。

在一些实施例中,所述播放恢复模块被配置成调用软件解码器以执行解码。

根据本发明的再另一方面,提供了一种视频播放设备,包括处理器和存储器,所述存储器被配置成存储计算机指令,所述计算机指令当在所述处理器上执行时使所述处理器执行如上所述的方法。

根据本发明的再另一方面,提供了一种计算机可读存储介质,被配置成存储计算机指令,所述计算机指令当在处理器上执行时使所述处理器执行如上所述的方法。

根据在下文中所描述的实施例,本发明的这些和其它方面将是清楚明白的,并且将参考在下文中所描述的实施例而被阐明。

附图说明

在下面结合附图对于示例性实施例的描述中,本发明的更多细节、特征和优点被公开,在附图中:

图1示出了根据本发明实施例的视频播放方法的流程图;

图2更详细地示出了图1的方法中获取最接近的帧内编码帧的示例流程;

图3示出了相关技术中在分片内搜寻帧内编码帧的示意性图示;

图4更详细地示出了图1的方法中获取最接近的帧内编码帧的另一示例流程;

图5示出了图4的操作的示意性图示;

图6更详细地示出了图1的方法中发起解码和恢复播放的示意性和示例性图示;

图7示出了根据本发明实施例的视频播放设备的示意性框图;并且

图8一般地图示了一个示例系统,其包括代表可以实现本文描述的各种技术的一个或多个系统和/或设备的示例计算设备。

具体实施方式

本申请的发明人认识到,视频应用在前后台切换过程中遭受的视频播放不连续问题是由于视频解码组件中缓存的数据被清空所致。例如,在iOS平台中,使用可以直接访问硬件解码器的底层硬件解码框架(“VideoToolBox”)来进行硬件解码,并且当用户点击home键或者以其他方式将视频应用切入到后台时,VideoToolBox中缓存的数据会被回收。然后,当视频应用恢复到前台时,解码下一非关键帧所依赖的之前的关键帧已经被清空,使得无法正常解码该非关键帧,从而导致黑屏。直到下一个关键帧到来时,才能得到正常的解码画面,而此时的画面与播放被中断之前的画面是不连续的。其他平台(例如,Android或Windows)可能存在同样的问题。

图1示出了根据本发明实施例的视频播放方法100的流程图。

在步骤110处,当正在播放视频的应用程序(下文也称为“视频app”)从前台被切换到后台(例如,由于用户按下home键、视频播放窗口被最小化,等等)时,发起记录所述视频的当前播放位置(下文也称为“CurrentPos”)。

在一些实施例中,这包括将CurrentPos保存到全局内存中。这样,关于视频的当前播放位置的信息不会被清空,并且可以稍后被用于视频的恢复播放。其他实施例是可能的。具体地,CurrentPos可以是例如相对于视频的起始时间(例如,0分0秒)的相对时间量,并且可以具有例如毫秒或微妙的精度。

如本文使用的术语“视频”意图包括采用各种编码格式和/或封装格式的媒体文件。视频可以与播放该视频的视频app一起位于本地,或者从远程位置(例如,经由有线或无线网络)实时地接收。视频app在此处包括各种各样的具有视频播放功能的应用程序,例如视频播放器或内嵌有视频播放器的其他app,诸如腾讯视频、微信、微博、其变体(例如,手机版、网页版、电脑版),等等。

在步骤120处,当视频app从后台被切换回前台时,取回所记录的CurrentPos,并且在所述视频中获取最接近CurrentPos且在CurrentPos之前的帧内编码帧。

在一些实施例中,取回所记录的CurrentPos包括从所述全局内存中读取CurrentPos。然后,利用所取回的CurrentPos来在视频中定位适当的帧内编码帧。帧内编码帧(也称为“I帧”)包含重建一幅完整画面的全部信息,而非帧内编码帧(例如,P帧和B帧)必须直接或间接依赖于I帧进行解码。为了缩短处理时延以便尽快恢复播放,合乎期望的是获取最接近CurrentPos且时间上在CurrentPos之前的I帧。这可以利用I帧的搜寻(seek)操作来实现。

典型地,无论其编码格式和封装格式,视频均包括视频载荷数据和描述该视频载荷数据的元数据。元数据包括例如指示该视频载荷数据中的各视频帧的帧类型的标识元数据(例如,头部中的某一字段)以及指示所述各视频帧的显示时间值的时间元数据(例如,头部中的显示时间戳(pts))。因此,在步骤120中,可以利用所述标识元数据来识别某一帧是否为I帧,并且利用所述时间元数据来搜寻最接近CurrentPos且时间上在CurrentPos之前的I帧(简称为“最接近的I帧”)。

下面参考图2、3、4和5描述若干典型格式的视频的相应seek操作。

对于MP4格式或类似格式的视频,所述标识元数据还包括索引信息,例如I帧索引表,其指示所述视频载荷数据中的各I帧相对于所述视频的起始位置的相应偏移量。因此,针对这种类型的视频,可以通过解析所述索引信息来顺序地定位各个I帧,并且通过解析各I帧的时间元数据来确定所要求的I帧。在MP4格式的情况下,I帧索引表和显示时间信息均记录在HEADER BOX中。在进行seek操作时,如果HEADER BOX在本地可用,则可以通过直接读取HEADER BOX来得到I帧索引表和显示时间信息,并且如果HEADER BOX在本地不可用,则可以通过向远程视频源发送对于HEADER BOX的请求来得到I帧索引表和显示时间信息。

图2更详细地示出了适用于这一类视频格式的、获取最接近的I帧的示例流程120A。参考图2,在步骤121处,从当前I帧(例如,视频中的第1个I帧)的所述时间元数据导出当前I帧的显示时间值。在步骤122处,比较所述显示时间值与CurrentPos的时间值。如果所述显示时间值小于CurrentPos的时间值(步骤123),则继续针对下一个I帧进行所述时间元数据的所述解析(步骤124),并且因此流程返回到步骤121。相反,如果所述显示时间值不小于CurrentPos的时间值(步骤123),则在步骤125处判断当前I帧的显示时间值是否大于CurrentPos的时间值。如果所述显示时间值大于CurrentPos的时间值(步骤125),则表明当前I帧的显示时间已经超过了CurrentPos,并且确定前一个I帧为所要求的最接近的I帧(步骤126)。如果所述显示时间值不大于CurrentPos的时间值(步骤125),也即,所述显示时间值等于CurrentPos的时间值,则表明当前I帧就是所要求的最接近CurrentPos的I帧。在seek操作期间,各I帧的元数据被解析而无需解码视频载荷数据,因而仅导致很短的处理时延。

在CurrentPos处于视频中最后一个I帧之后的极端情况下,流程120A将无法定位所要求的最接近的I帧,因为对于该最后一个I帧,步骤125不会被触发。在这种情况下,可以响应于I帧索引表所指示的最后一个I帧的显示时间值小于CurrentPos的时间值,将该最后一个I帧确定为所要求的最接近的I帧。

对于HLS(HTTP Live Streaming)+TS(Transport Stream)格式或类似格式的视频,其包括多个分片(segment),每个分片包括时间上分隔开的多个I帧,并且所述多个I帧中的每一个跟随有相应的非帧内编码帧。而且,视频中的时间元数据还包括指示所述多个分片的相应持续时间的时间信息。

具体地,在HLS+TS格式的情况下,视频包括M3U8描述文件和TS媒体文件,其中M3U8描述文件由一系列标签(tag)组成,并且以文本方式对TS媒体文件进行描述。下面给出一个M3U8描述文件的示例。

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXTINF:10,

./0.ts

#EXTINF:10,

./1.ts

在该示例中,标签#EXT-X-TARGETDURATION指定最大的TS媒体分片的持续时间(单位:秒),并且各个标签#EXTINF指定相应TS媒体分片的持续时间,它们必须小于或等于由标签#EXT-X-TARGETDURATION指定的最大值(在该示例中,10秒)。

图3示出了与该示例M3U8描述文件对应的TS媒体文件的示意性图示。在该示例中,TS媒体分片0.ts和1.ts具有相同的持续时间,即10秒。对于HLS+TS格式的视频,默认的seek操作所获取的帧是当前seek位置所在的TS媒体分片的起始I帧,如图3所示。虽然得到的起始I帧在时间上处于seek位置之前,并且可以用于后续解码操作,但是该起始I帧有可能与seek位置相隔太远,导致耗费很长的时间用于解码无用的数据。例如,假设seek位置刚好位于当前TS媒体分片的末尾,那么由默认seek操作返回的I帧与该seek位置之间的时间间隔将高达10秒(因为TS媒体分片1.ts的持续时间为10秒)。这将花费较长的时间来解码到达恢复播放的视频帧,并且在实践中可能是不可接受的。

图4更详细地示出了适用于这一类视频格式的、获取最接近的I帧的另一示例流程120B。参考图4,在步骤221处,根据CurrentPos和各个TS媒体分片的持续时间确定CurrentPos所在的、所述多个TS媒体分片中的一个分片。然后,顺序地解析CurrentPos所在的该分片内的各视频帧的所述标识元数据。在步骤222处,从所述标识元数据导出当前帧的帧类型。例如,在TS媒体文件采用H.264标准进行编码的情况下,可以利用nal_unit_type字段来判断当前帧是否为I帧。如果当前帧为非I帧(步骤223),则继续针对下一帧进行所述标识元数据的所述解析(步骤224),并且流程返回到步骤222。如果当前帧为I帧(步骤223),则在步骤225处从当前帧的时间元数据导出当前帧的显示时间值。在步骤226处,比较所述显示时间值与CurrentPos的时间值。如果所述显示时间值小于CurrentPos的时间值(步骤227),则继续针对下一帧进行所述标识元数据的所述解析(步骤228),并且流程返回步骤222。相反,如果所述显示时间值不小于CurrentPos的时间值(步骤227),则在步骤229处判断所述显示时间值是否大于CurrentPos的时间值。如果所述显示时间值大于CurrentPos的时间值(步骤229),则表明当前帧(具体地,I帧)的显示时间已经超过了CurrentPos,并且确定前一个I帧为所要求的最接近的I帧。如果所述显示时间值不大于CurrentPos的时间值(步骤229),也即,所述显示时间值等于所述当前播放位置的时间值,则确定该当前帧(具体地,I帧)为所要求的最接近的I帧。

图5示出了图4的操作的示意性图示。在该示例中,假设CurrentPos为15s。由于TS媒体分片0.ts和1.ts的持续时间均为10s,所以可以确定CurrentPos位于TS媒体分片1.ts内。如图5所示,在CurrentPos所在的TS媒体分片1.ts内进行seek操作。从1.ts的起始I帧a开始解析标识元数据,由于该视频帧为I帧,所以其时间元数据被解析,得到其显示时间值。由于该I帧a的显示时间值小于CurrentPos的时间值,所以继续对下一帧(未示出)进行所述标识元数据的所述解析。由于该下一帧为非I帧,所以继续针对再下一帧进行所述标识元数据的所述解析。当I帧b被解析时,由于其显示时间值仍然小于CurrentPos的时间值,所以继续对下一帧(未示出)进行所述标识元数据的所述解析。这样的过程持续进行,直到I帧d被解析。由于I帧d为I帧,所以其时间元数据被解析,得到其显示时间值。由于该I帧d的显示时间值大于CurrentPos的时间值,所以确定I帧d的前一个I帧(即I帧c)为所要求的最接近的I帧。在seek操作期间,各视频帧的元数据被解析而无需解码视频载荷数据,因而仅导致很短的处理时延。

与流程120A类似,在CurrentPos处于TS媒体分片中最后一个I帧之后的极端情况下,流程120B将无法定位所要求的最接近的I帧,因为对于该最后一个I帧,步骤229不会被触发。考虑到这种情形,在一些实施例中,可以解析每一视频帧的时间元数据,而无论该视频帧的类型如何(I帧或非I帧)。具体地,在步骤223处,如果当前帧为非I帧,则在步骤224之前,从当前帧的时间元数据导出当前帧的显示时间值。可以将当前帧的该导出的显示时间值与当前播放位置的时间值进行比较。响应于当前帧的显示时间值等于该TS媒体分片的结束时间,将该TS媒体分片中最后一个I帧确定为所要求的最接近的I帧。该TS媒体分片的结束时间例如可以通过将该TS媒体分片的持续时间与先前的各个TS媒体分片的持续时间进行累加而得到。在图5的示例中,TS媒体分片1.ts的结束时间可以计算为10+10=20s。

现在,获取到了最接近当前播放位置CurrentPos且时间上处于CurrentPos之前的I帧,并且因此可以从该获取的I帧开始对视频进行解码。

返回参考图1,在步骤130处,发起从所述最接近的I帧开始解码所述视频,并且在步骤140处,当解码到达CurrentPos时,发起从CurrentPos恢复播放所述视频。

图6更详细地示出了图1的方法100中发起解码和恢复播放的示意性和示例性图示。

在步骤131处,读取(例如,从播放器的缓存中)所获取的最接近的I帧数据和跟随该最接近的I帧的多个视频帧,并且将其传递给解码器用于解码。在一些实施例中,视频app运行在iOS平台中。版本8.0及更高版本的iOS系统提供了经由其访问底层硬件解码框架VideoToolBox的应用编程接口(API),并且VideoToolBox可以直接访问硬件解码器来加快解码。在这种情况下,可以通过经由这样的API调用VideoToolBox来执行解码,从而缩短到视频的恢复播放的时延。将理解的是,本发明的概念是平台无关的,并且其他实施例是可能的。例如,可以调用软件解码器来进行解码。这在某些应用情景下是可能的。例如,在桌面型或膝上型计算机上使用网页版视频app的情况下,可以通过调用网络浏览器的内核中自带的软件解码器来进行解码。

在步骤132处,每次当前帧被解码,则判断该解码的当前帧的显示时间值是否等于CurrentPos的时间值。如果所述显示时间值不等于CurrentPos的时间值,则丢弃所述解码的当前帧(步骤133),并且继续针对下一帧的判断(步骤134)。如果该解码的当前帧的显示时间值等于CurrentPos的时间值,则确定解码已到达CurrentPos(步骤135)。此时,发起从CurrentPos恢复播放所述视频。如图6所示,已解码的帧数据被发送给应用层以供显示。

针对最接近的I帧的seek操作和从最接近的I帧开始的解码操作可以耗费如此短的时间以致于产生的时延对于用户而言不可察觉。因此,从用户的视角看,在视频app从后台切换回前台时,视频的播放将是连续的且流畅的。

这提供了相对于几种典型方案的优点。在一种典型方案中,当应用程序切入后台时,当前播放器实例被直接停止,并且当应用程序被切回到前台时,播放流程被从头重新执行(例如,调用播放器的start逻辑),并且开始播放位置被设置为之前应用程序切换到后台时的播放位置。然而,调用start逻辑来重新播放耗时较久,会出现短暂的黑屏。在另一种典型方案中,当应用程序切入后台时,通过调用播放器的pause逻辑来暂停播放,并且然后当应用程序从后台切回到前台时,调用播放器的resume逻辑重新播放当前视频。然而,直接调用resume逻辑会导致解码失败并且因此导致黑屏,因为此时解码器组件中的缓存的数据已经被清空。黑屏的持续时间由当前播放位置与下一个关键帧的显示时间值之间的间隔决定。由于解码失败,直到下一个I帧才会得到正常的画面,导致播放的画面是不连续的。

图7示出了根据本发明实施例的视频播放设备700的示意性框图。参考图7,视频播放设备700包括播放位置记录模块710、帧内编码帧获取模块720和播放恢复模块730。

播放位置记录模块710被配置成当正在播放所述视频的应用程序从前台被切换到后台时,记录所述视频的当前播放位置。播放位置记录模块710的操作已经在上面关于结合图1例示说明的方法实施例进行了详细描述,并且为了简洁起见在此不再重复。

帧内编码帧获取模块720被配置成当所述应用程序从后台被切换回前台时,取回所记录的当前播放位置并且在所述视频中获取最接近所述当前播放位置且在所述当前播放位置之前的帧内编码帧。帧内编码帧获取模块720的操作已经在上面关于结合图1-5例示说明的方法实施例进行了详细描述,并且为了简洁起见在此不再重复。

播放恢复模块730被配置成从所述最接近的帧内编码帧开始解码所述视频,并且当解码到达所述当前播放位置时,促使所述应用程序从所述当前播放位置恢复播放所述视频。播放恢复模块730的操作已经在上面关于结合图1和6例示说明的方法实施例进行了详细描述,并且为了简洁起见在此不再重复。

将理解的是,播放位置记录模块710、帧内编码帧获取模块720和播放恢复模块730可以由软件、固件、硬件或其组合来实现。

图8一般地图示了一个示例系统800,其包括代表可以实现本文描述的各种技术的一个或多个系统和/或设备的示例计算设备810。计算设备810可以是例如与客户端(例如,客户端设备)相关联的设备、片上系统、服务提供商的服务器、和/或任何其它合适的计算设备或计算系统。上面关于图7描述的视频播放设备700可以采取计算设备810的形式。替换地,视频播放设备700可以以视频app 816的形式被实现为计算机程序。更具体地,视频播放设备700可以被实现为视频播放器的组成部分,或者作为可与视频播放器相分离地下载和安装的插件。

如图示的示例计算设备810包括彼此通信耦合的处理系统811、一个或多个计算机可读介质812以及一个或多个I / O接口813。尽管未示出,但是计算设备810还可以包括系统总线或其他数据和命令传送系统,其将各种组件彼此耦合。系统总线可以包括不同总线结构的任何一个或组合,所述总线结构诸如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种总线架构中的任何一种的处理器或局部总线。还构思了各种其他示例,诸如控制和数据线。

处理系统811代表使用硬件执行一个或多个操作的功能。因此,处理系统811被图示为包括可被配置为处理器、功能块等的硬件元件814。这可以包括在硬件中实现作为专用集成电路或使用一个或多个半导体形成的其它逻辑器件。硬件元件814不受其形成的材料或其中采用的处理机构的限制。例如,处理器可以由(多个)半导体和/或晶体管(例如,电子集成电路(IC))组成。在这样的上下文中,处理器可执行指令可以是电子可执行指令。

计算机可读介质812被图示为包括存储器/存储装置815。存储器/存储装置815表示与一个或多个计算机可读介质相关联的存储器/存储容量。存储器/存储装置815可以包括易失性介质(诸如随机存取存储器(RAM))和/或非易失性介质(诸如只读存储器(ROM)、闪存、光盘、磁盘等)。存储器/存储装置815可以包括固定介质(例如,RAM、ROM、固定硬盘驱动器等)以及可移动介质(例如,闪存、可移动硬盘驱动器、光盘等)。计算机可读介质812可以以下面进一步描述的各种其他方式进行配置。

一个或多个I/O接口813代表允许用户向计算设备810输入命令和信息并且可选地还允许使用各种输入/输出设备将信息呈现给用户和/或其他组件或设备的功能。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风(例如,用于语音输入)、扫描仪、触摸功能(例如,被配置为检测物理触摸的容性或其他传感器)、相机(例如,可以采用可见或不可见的波长(诸如红外频率)将不涉及触摸的运动检测为手势)等等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡、触觉响应设备等。因此,计算设备810可以以下面进一步描述的各种方式进行配置以支持用户交互。

计算设备810还可以包括视频app 816。视频app 816可以例如是图7的视频播放设备700的软件实例,并且与计算设备810中的其他元件相组合地实现本文描述的技术。

本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。一般地,这些模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元素、组件、数据结构等。本文所使用的术语“模块”(例如,前面段落中的播放位置记录模块710、帧内编码帧获取模块720和播放恢复模块730)、“功能”和“组件”一般表示软件、固件、硬件或其组合。本文描述的技术的特征是与平台无关的,意味着这些技术可以在具有各种处理器的各种计算平台上实现。

所描述的模块和技术的实现可以存储在某种形式的计算机可读介质上或者跨某种形式的计算机可读介质传输。计算机可读介质可以包括可由计算设备810访问的各种介质。作为示例而非限制,计算机可读介质可以包括“计算机可读存储介质”和“计算机可读信号介质”。

与单纯的信号传输、载波或信号本身相反,“计算机可读存储介质”是指能够持久存储信息的介质和/或设备,和/或有形的存储装置。因此,计算机可读存储介质是指非信号承载介质。计算机可读存储介质包括诸如易失性和非易失性、可移动和不可移动介质和/或以适用于存储信息(诸如计算机可读指令、数据结构、程序模块、逻辑元件/电路或其他数据)的方法或技术实现的存储设备之类的硬件。计算机可读存储介质的示例可以包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字通用盘(DVD)或其他光学存储装置、硬盘、盒式磁带、磁带,磁盘存储装置或其他磁存储设备,或其他存储设备、有形介质或适于存储期望信息并可以由计算机访问的制品。

“计算机可读信号介质”是指被配置为诸如经由网络将指令发送到计算设备810的硬件的信号承载介质。信号介质典型地可以将计算机可读指令、数据结构、程序模块或其他数据体现在诸如载波、数据信号或其它传输机制的调制数据信号中。信号介质还包括任何信息传递介质。术语“调制数据信号”是指以这样的方式对信号中的信息进行编码来设置或改变其特征中的一个或多个的信号。作为示例而非限制,通信介质包括诸如有线网络或直接连线的有线介质以及诸如声、RF、红外和其它无线介质的无线介质。

如前所述,硬件元件814和计算机可读介质812代表以硬件形式实现的指令、模块、可编程器件逻辑和/或固定器件逻辑,其在一些实施例中可以用于实现本文描述的技术的至少一些方面。硬件元件可以包括集成电路或片上系统、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)以及硅中的其它实现或其他硬件设备的组件。在这种上下文中,硬件元件可以作为执行由硬件元件所体现的指令、模块和/或逻辑所定义的程序任务的处理设备,以及用于存储用于执行的指令的硬件设备,例如,先前描述的计算机可读存储介质。

前述的组合也可以用于实现本文所述的各种技术和模块。因此,可以将软件、硬件或程序模块和其它程序模块实现为在某种形式的计算机可读存储介质上和/或由一个或多个硬件元件814体现的一个或多个指令和/或逻辑。计算设备810可以被配置为实现与软件和/或硬件模块相对应的特定指令和/或功能。因此,例如通过使用处理系统的计算机可读存储介质和/或硬件元件814,可以至少部分地以硬件来实现将模块实现为可由计算设备810作为软件执行的模块。指令和/或功能可以由一个或多个制品(例如,一个或多个计算设备810和/或处理系统811)可执行/可操作以实现本文所述的技术、模块和示例。

在各种实施方式中,计算设备810可以采用各种不同的配置。例如,计算设备810可以被实现为包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机、上网本等的计算机类设备。计算设备810还可以被实现为包括诸如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等移动设备的移动装置类设备。计算设备810还可以实现为电视类设备,其包括具有或连接到休闲观看环境中的一般地较大屏幕的设备。这些设备包括电视、机顶盒、游戏机等。

本文描述的技术可以由计算设备810的这些各种配置来支持,并且不限于本文所描述的技术的具体示例。计算设备810还可以通过各种各样的通信技术“云”820进行交互。

云820包括和/或代表用于资源824的平台822。平台822抽象云820的硬件(例如,服务器)和软件资源的底层功能。资源824可以包括在远离计算设备810的服务器上执行计算机处理时可以使用的应用和/或数据。资源824还可以包括通过因特网和/或通过诸如蜂窝或Wi-Fi网络的订户网络提供的服务。平台822可以抽象资源和功能以将计算设备810与其他计算设备连接。平台822还可以用于抽象资源的分级以提供遇到的对于经由平台822实现的资源824的需求的相应水平的分级。

尽管已经以结构特征和/或方法动作特定的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上述具体特征或动作。相反,上述具体特征和动作被公开为实现权利要求的示例形式。

本文中使用的术语仅出于描述特定实施例的目的并且不意图限制本发明。如本文中使用的,单数形式“一个”、“一”和“该”意图也包括复数形式,除非上下文清楚地另有指示。将进一步理解的是,术语“包括”和/或“包含”当在本说明书中使用时指定所述及特征、整体、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、整体、步骤、操作、元件、部件和/或其群组的存在或添加一个或多个其他特征、整体、步骤、操作、元件、部件和/或其群组。如本文中使用的,术语“和/或”包括相关联的列出项目中的一个或多个的任意和全部组合。

通过研究附图、公开内容和所附的权利要求书,本领域技术人员在实践所要求保护的主题时,能够理解和实现对于所公开的实施例的变型。在相互不同的从属权利要求中记载了某些措施的仅有事实并不表明这些措施的组合不能用来获利。

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于显示图像的方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类