掌桥专利:专业的专利平台
掌桥专利
首页

用于使用PROCESS@APPEND和PROCESS@PLAY模式处理DASH和CMAF带内事件以及媒体的W3C媒体扩展

文献发布时间:2023-06-19 18:32:25



相关申请的交叉引用

本申请要求于2021年4月21日提交的临时申请US 63/177,791的优先权,该申请的全部内容在此通过引用明确并入本申请。

技术领域

本公开的实施例针对流媒体内容,更具体地,针对根据动态图像专家组(MovingPicture Experts Group,MPEG)基于超文本传输协议的动态自适应流(Dynamic AdaptiveStreaming Over Hypertext Transfer Protocol,DASH)的流媒体内容。

背景技术

MPEG DASH为IP网络上的流媒体内容提供了标准。在MPEG DASH中,媒体呈现描述(Media Representation Description,MPD)和带内事件(inband event)用于向客户端传送媒体时间线相关事件。DASH为媒体段提供了承载带内事件的机制。ISO/IEC 23009-1DASH标准定义了用于使用媒体段承载事件的事件消息框。ISO/IEC 23000-19CMAF标准使用具有CMAF块、片段和分段的带内事件。类似地,通用媒体应用格式(Common Media ApplicationFormat,CMAF)为CMAF块提供了承载带内事件的机制。一种普遍的DASH事件是带内MPD有效期到期事件。其他事件包括诸如SCTE-35(“有线电视的数字节目插入提示消息”)事件之类的应用事件。

包括DASH播放器的流播放器使用媒体源扩展(Media Source Extension,MSE),其允许浏览器或用户代理处理媒体段。然而,当前的MSE规范不支持解析和处理嵌入在DASH或CMAF媒体段中的带内事件。利用当前的MSE规范的浏览器或用户代理无法本地处理DASH或CMAF带内事件并将带内事件调度到相应的应用。

发明内容

本公开的实施例提供了使MSE能够本地处理包含在媒体段中的DASH和CMAF带内事件框的解决方案。

提供了一种用于处理媒体流中的事件的方法。所述方法包括:获取媒体数据;从媒体数据生成一个或多个事件段和一个或多个媒体段;从一个或多个事件段中解析出各自的事件,以确定事件起始时间、事件结束时间和调度模式;基于事件起始时间和当前播放位置的比较,以及确定该各自的事件不存在于已调度缓冲区中,将来自该一个或多个事件段的各自的事件附加到事件调度缓冲区,其中,在该事件调度缓冲区中与各自的事件相关联的位置基于该各自的事件的调度模式;以及基于该事件调度缓冲区中与各自的事件相关联的位置、事件起始时间、事件结束时间和当前播放位置来调度各自的事件。

可提供一种用于处理媒体流中的事件的装置。该装置可以包括至少一个存储器,该存储器被配置为存储程序代码;并且至少一个处理器可以被配置为读取程序代码并按照程序代码的指示进行操作。该程序代码包括第一获取代码,配置为使该至少一个处理器获取媒体数据;第一生成代码,配置为使该至少一个处理器从媒体数据生成一个或多个事件段和一个或多个媒体段;第一解析代码,配置为使该至少一个处理器从一个或多个事件段中解析出各自的事件,以确定事件起始时间、事件结束时间和调度模式;第一附加代码,配置为使该至少一个处理器,基于事件起始时间和当前播放位置的比较,以及确定该各自的事件不存在于已调度缓冲区中,将来自该一个或多个事件段的各自的事件附加到事件调度缓冲区,其中,在该事件调度缓冲区中与各自的事件相关联的位置基于该各自的事件的调度模式;和第一调度代码,配置为使该至少一个处理器,基于该事件调度缓冲区中与各自的事件相关联的位置、事件起始时间、事件结束时间和当前播放位置来调度各自的事件。

可提供一种存储用于处理媒体流中的事件的指令的非暂时性计算机可读介质。所述指令由至少一个处理器执行可使所述至少一个处理器获取媒体数据;从媒体数据生成一个或多个事件段和一个或多个媒体段;从一个或多个事件段中解析出各自的事件,以确定事件起始时间、事件结束时间和调度模式;基于事件起始时间和当前播放位置的比较,以及确定该各自的事件不存在于已调度缓冲区中,将来自该一个或多个事件段的各自的事件附加到事件调度缓冲区,其中,在该事件调度缓冲区中与各自的事件相关联的位置基于该各自事件的调度模式;以及基于该事件调度缓冲区中与各自的事件相关联的位置、事件起始时间、事件结束时间和当前播放位置来调度各自的事件。

附图说明

通过以下详细描述和附图,所公开的主题的其它特征、性质和各种优点将更加明显,在附图中:

图1是根据实施例的通信系统的简化图示。

图2是根据实施例的流环境中的组件放置的示例说明。

图3是根据实施例的DASH处理模型的简化框图。

图4是根据实施例的DASH处理模型的简化框图。

图5A和图5B是根据实施例的媒体缓冲区和事件缓冲区的简化图。

图6A和图6B是根据实施例的媒体缓冲区和事件缓冲区的简化图。

图7是示出根据实施例的用于处理DASH和CMAF带内事件的过程的简化流程图。

图8是根据实施例的计算机系统的简化图。

具体实施方式

本公开的实施例提供了使MSE能够本地处理DASH和CMAF带内事件框的技术方案。具体地,本公开的实施例涉及用于处理DASH带内消息框(例如,消息框v0和v1)的处理模型和算法。本公开的方面旨在对具有“on_receive”或“on_start”调度模式的方案进行DASH带内消息处理。本公开使得利用基于本公开的MSE的浏览器或用户代理能够本地处理DASH和CMAF带内事件框,并将它们发送到各自的应用。

下面所讨论的提议特征可以单独使用或以任何顺序组合使用。此外,实施例可以通过处理电路(例如,一个或多个处理器或一个或多个集成电路)来实现。在一个示例中,一个或多个处理器执行存储在非暂时性计算机可读介质中的程序。

图1示出了根据本公开的实施例的通信系统100的简化框图。通信系统100可以包括经由网络105互连的至少两个终端102和103。对于单向数据传输,第一终端103可以对本地位置的视频数据进行编码,以经由网络105传输到另一终端102。第二终端102可以从网络105接收另一终端的已编码视频数据、解码已编码数据并显示已恢复的视频数据。单向数据传输在媒体服务应用等方面是较常见的。

图1示出了提供用于支持例如在视频会议期间可能发生的已编码视频的双向传输的第二对终端101和104。对于双向数据传输,每个终端101和104可以对在本地位置捕获的视频数据进行编码,以经由网络105传输到另一终端。每个终端101和104还可以接收由另一终端传输的已编码视频数据,可对已编码数据进行解码并可在本地显示设备上显示恢复的视频数据。

在图1中,终端101、102、103和104可被示出为服务器、个人计算机和智能电话,但本公开的原理可不限于此。本公开的实施例适用于膝上型计算机、平板电脑、媒体播放器和/或专用视频会议设备。网络105表示在终端101、102、103和104之间传送已编码视频数据的任意数量的网络,包括例如有线和/或无线通信网络。通信网络105可在电路交换和/或分组交换信道中交换数据。代表性的网络包括电信网络、局域网、广域网和/或互联网。出于本讨论的目的,除非在下文中有所解释,否则网络105的架构和拓扑对于本公开的操作来说可能是无关紧要的。

作为示例,图2示出了视频编码器和视频解码器在流环境中的放置方式。实施例可适用于其它支持视频的应用,包括例如视频会议、数字TV、在包括CD、DVD、存储棒等的数字介质上存储压缩视频等等。

流系统可包括采集子系统203,该采集子系统可包括例如数码相机的视频源201,该视频源创建例如未压缩的视频样本流213。相较于已编码视频比特流,该样本流213可被强调为高数据量,并且可以由耦接到视频源201的编码器202处理。编码器202可包括硬件、软件或软硬件组合以实现或实施如下文更详细地描述的实施例的各方面。相较于样本流,已编码视频比特流204可被强调为较低数据量,并可存储在流服务器205上以供将来使用。一个或多个流客户端212和207可访问流服务器205以检索已编码视频比特流208和206,其可以是已编码视频比特流204的副本。客户端212可包括视频解码器211,其对已编码视频比特流的传入副本208进行解码,并产生可在显示器209或其他呈现设备上呈现的输出视频样本流210。在一些流系统中,可根据某些视频编码/压缩标准对已编码视频比特流204、206和208进行编码。这些标准的示例在上文中已提及并在本文中进一步描述。

图3示出了例如用于处理DASH和CMAF事件的示例客户端架构的示例DASH处理模型300。在DASH处理模型300中,媒体段的客户端的请求可以基于清单303中描述的地址。清单303还描述了元数据路径,客户端可以从中访问元数据路径的段、对这些段进行解析并将其发送到应用301。

清单303可包括MPD事件或带内事件,带内事件和“moof”解析器306可解析MPD事件段或带内事件段,并将这些事件段附加到事件和元数据缓冲区330。带内事件和“moof”解析器306还可以获取媒体段并将其附加到媒体缓冲区340。事件和元数据缓冲区330可以将事件和元数据信息发送到事件和元数据同步器和调度器335。事件和元数据同步器和调度器335可以将特定事件调度至DASH播放器控制、选择和启发式逻辑302,并将应用相关事件和元数据路径调度至应用301。

根据一些实施例,MSE可以包括媒体缓冲区340和媒体解码器345。MSE 320是媒体段的一个或多个逻辑缓冲区,在MSE 320中,可以基于媒体段的呈现时间来跟踪和排序媒体段。可以基于媒体段的起始时间、结束时间或时间戳偏移将每个媒体段添加或附加到媒体缓冲区340,并且时间戳偏移可以用于对媒体缓冲区340中的媒体段进行排序。

只要媒体段存在于媒体缓冲区340中,事件和元数据缓冲区330就保留对应的事件段和元数据。根据图3,MSE 320可以仅包括媒体缓冲区340和媒体解码器345。事件和元数据缓冲区330以及事件和元数据同步器和调度器335不是MSE320的本地装置,从而禁止MSE320本地处理事件并将它们发送到应用。

图4示出了例如用于处理DASH和CMAF事件的示例客户端架构的示例DASH处理模型400。在DASH处理模型400中,媒体段的客户端请求可以基于清单403中描述的地址。清单403还描述了元数据路径,客户端可以从中访问元数据路径的段、对这些段进行解析并将其发送到应用401。

清单403可包括MPD事件或带内事件,带内事件和“moof”解析器406可解析MPD事件段或带内事件段,并将这些事件段附加到事件清除缓冲区430。基于清单403中的媒体数据或媒体流和信息,带内事件和“moof”解析器406可以获取媒体段并将其附加到媒体缓冲区440。事件清除缓冲区330可以将事件和元数据信息发送到事件同步器和调度器435。事件同步器和调度器435可以将特定事件调度至DASH播放器控制、选择和启发式逻辑402,并将应用相关事件和元数据路径调度至应用401。

根据示例性实施例,在图4中,MSE被扩展为包括媒体缓冲区340、媒体解码器345、事件清除缓冲区430、事件同步器和调度器435以及已调度事件表450。已调度事件表450可以记录已调度至应用401的事件。事件清除缓冲区430以及事件同步器和调度器435的扩展使得MSE能够在本地处理带内事件,并且已调度事件表450的创建使得能够对已调度的事件消息进行记录和跟踪。

在示例性实施例中,MSE 420或其组件可基于事件段或事件的事件起始时间、事件结束时间、事件特定偏移、事件持续时间或当前播放时间/位置来调度事件。示例可包括事件起始时间偏移(在一些实施例中可称为事件起始时间)。MSE 420或其组件可确定事件段的事件起始时间偏移,其中该起始时间偏移是参考事件起始时间和当前播放时间/位置确定的,并使用事件起始时间偏移来排序和调度事件清除缓冲区430或事件同步器和调度器435中的事件。

在示例性实施例中,MSE 420可以为相关联的事件和媒体处理事件段和媒体段清除和覆写。如果与事件相关联的媒体段被保留在媒体缓冲区440中,MSE 420可以将事件保留在事件清除缓冲区430或事件同步器和调度器435中。MSE 420可基于相关联的媒体段的时序和持续时间来管理事件段的时序和持续时间。

在示例性实施例中,应用401可以设置事件时间、时间戳偏移或事件时间戳偏移。应用401还可以设置方案URI/值(scheme URI/value)和方案URI/值的调度模式。另外,在一些实施例中,应用401还可以为方案URI/值设置处理模式。MSE 420可以基于方案URI/值来调度事件。

在一些实施例中,方案URI(scheme URI)的处理模式可以是process@append。处理模式为process@append可以使MSE在将相关联的媒体段附加到媒体缓冲区时处理与媒体段相关联的事件段。因此,基于处理模式为process@append,事件段可以在将相关联的媒体段附加到媒体缓冲区时被解析、被调度或至少被安排调度。

例如,应用可以设置方案URI以反映process@append。在方案URI包括具有on_receive调度模式的process@append的情况下,当媒体段被附加到媒体缓冲区时,可以处理与媒体段相关联的一个或多个事件。在一些实施例中,如果一个或多个事件中的事件具有不小于当前播放位置的结束时间,则可以立即调度该事件。也就是说,在当前播放位置处将该事件附加到事件调度缓冲区中,并将该事件调度到应用。在一些实施例中,当事件结束时间不小于当前播放位置且之前没有调度过该事件时,将立即调度该事件。

在一些实施例中,方案URI可以包括具有on_start调度模式的process@append。在调度模式为on_start的情况下,当媒体段被附加到媒体缓冲区时,可以处理与该媒体段相关联的一个或多个事件中的事件,但可以基于与该事件相关联的事件起始时间、事件时间戳偏移、事件结束时间或事件持续时间来调度该事件。在一些实施例中,当方案URI包括具有on_start调度模式的process@append时,如果当前播放位置不小于事件起始时间,当前播放位置不等于或大于事件结束时间且之前没有调度过事件或等效事件,则可以在与事件起始时间相关联的位置处将该事件存储在事件调度缓冲区中。

在一些实施例中,方案URI的处理模式可以是process@play。处理模式为process@play可以使MSE在播放相关联的媒体段时处理与媒体段相关联的事件段。在一些实施例中,基于处理模式为process@play,事件段可以在相关联的媒体段被播放或流式传输时被解析、被调度或至少被安排调度。在一些实施例中,当处理模式是process@play时,如果包含事件段的媒体段的至少一个媒体样本已经被播放,则可以调度该事件段。为了实现process@play处理模式,MSE可以利用事件清除缓冲区(可以称为清除缓冲区)来跟踪已调度的事件段。

基于方案URI是具有on_receive调度模式的process@play时,当媒体段被附加到媒体缓冲区时,可以处理与该媒体段相关联的一个或多个事件。在一些实施例中,事件段的处理可以包括立即调度,即在当前播放位置附加到事件调度缓冲区或向应用发送事件。立即调度可以基于与事件结束时间与当前播放时间的比较。作为示例,如果当前播放位置与包含事件的电子消息(esmg)或事件标识符的媒体段相关联,如果事件的结束时间不小于当前播放位置,以及如果之前没有调度过事件或等效事件,则可以立即调度该事件。

如果方案URI包括具有on_start调度模式的process@play时,当媒体段被附加到媒体缓冲区时,可以处理与媒体段相关联的一个或多个事件。对事件的处理可包括立即调度。作为示例,如果当前播放位置不小于事件的起始时间、当前播放位置不等于或大于事件的结束时间、事件与包含事件的电子消息(esmg)或事件标识符的媒体段相关联以及如果之前没有调度过事件或等效事件,则可以立即调度该事件。

下表(表1)描述了在方案URI的不同操作模式、处理模式和调度模式下的事件处理。

可以获得媒体数据,并且可以从该媒体数据生成一个或多个事件段和一个或多个媒体段。可以从一个或多个事件段解析特定的或各自的事件,并且可以确定事件起始时间、事件结束时间和调度模式。

基于事件起始时间和当前播放位置的比较以及确定各个事件不存在于已调度缓冲区中,将各个事件附加到事件调度缓冲区。事件调度缓冲区中与各自事件相关联的位置可以基于各自事件的调度模式。可以基于事件调度缓冲区中与各自事件相关联的位置、事件起始时间、事件结束时间和当前播放位置,对各自事件进行调度。在一些实施例中,可以使用清除缓冲区。将各自事件附加到清除缓冲区可包括,将各自事件附加在与目标范围相关联的位置,目标范围可基于与各自事件相关联的媒体段的媒体段起始时间和媒体段结束时间。

根据本公开的实施例,具有处理模式“append”或“process@append”的事件和/或媒体段可以按如下所述进行处理。

在一些实施例中,基于事件的结束时间小于当前播放位置或者事件的标识符(例如,事件的emsg.id)在已调度缓冲区中,可结束该事件的处理并且解析和处理下一个事件。

在一些实施例中,基于事件的调度模式是on_receive模式,可以立即调度该事件,即可以在与当前播放位置相关联的位置处将事件附加到调度缓冲区。在附加之后,可以将事件或事件的标识符附加到已调度缓冲区。

根据本公开的实施例,基于事件的调度模式是on_start模式,事件处理可以包括,基于事件起始时间和事件结束时间计算事件的事件调度范围,以及在与事件调度范围相关联的位置处将事件附加到事件调度缓冲区。

作为示例,事件调度范围可以基于下式确定:

对于emsg v0(esmg.version=0):dispatch_range_start=segment_start+emsg.presentation_time_delta/emsg.time_scale (1)

对于emsg v1(emsg.version=1):dispatch_range_start=emsg.presentation_time/emsg.timescale (2)

dispatch_range_end=dispatch_range_start+emsg.duration/emsg.timescale (3)

在一些实施例中,在事件调度缓冲区中与事件的事件调度范围相关联的位置处可能存在已有的重叠事件(overlapping event)。基于确定在事件调度缓冲区中与事件的事件调度范围相关联的位置处存在已有的重叠事件,可将事件调度范围划分为多个子范围,使得多个子范围中的每个子范围为空,或者被至少一个对于整个子范围具有相同状态的事件占用。

在将事件调度缓冲区划分为多个子范围之后,对于被至少一个事件占用的多个子范围中的每个子范围,可以基于多个子范围中的相应子范围来划分该至少一个事件。这些被划分的事件可以在与各个子范围相关联的位置处附加到事件调度缓冲区中。在一些实施例中,对于每个已划分的事件,可以添加诸如Emsg.scheme_id_uri、emsg.value、emsg.id、dispatch_range_start、dispatch_duration=emsg.duration/emsg.timescale和emsg.message_data()之类的事件特征和/或属性。

根据实施例,在事件调度缓冲区中当前播放位置处发生的事件可以基于事件标识符(例如,emsg.id)不在已调度缓冲区中,来进行调度。在将事件调度到应用之后,可以从事件调度缓冲区中移除事件,并且可以将事件的标识符添加至已调度缓冲区。然而,在实施例中,当在事件调度缓冲区中当前播放位置处发生的事件的事件标识符存在于已调度缓冲区时,可以从事件调度缓冲区中移除该事件。

在一些实施例中,可以清除从媒体缓冲区的开始或结束的范围。被清除的媒体缓冲区范围可以称为“媒体子范围”。该清除可包括,从媒体缓冲区清除媒体子范围,以及基于确定事件调度缓冲区中与媒体子范围相关联的位置与事件调度缓冲区中相应事件的事件调度范围重叠,从事件调度缓冲区中清除重叠子范围。

根据本公开的实施例,具有处理模式“play”或“process@play”的事件和/或媒体段可以按如下所述进行处理。

在一些实施例中,基于事件的结束时间小于当前播放位置或者事件的标识符(例如,事件的emsg.id)在已调度缓冲区中,可结束该事件的处理并且可解析和处理下一个事件。

在一些实施例中,基于处理模式是“play”或“process@play”,可以使用附加的清除缓冲区。事件可以在与目标范围相关联的位置处附加至清除缓冲区,其中目标范围可基于与事件相关联的媒体段的段起始时间和段结束时间。在一些实施例中,与事件相关联的媒体段的段起始时间和段结束时间可以使用解析器确定,该解析器可从一个或多个媒体段中解析媒体段。

在一些实施例中,目标范围可以基于下式来确定:

purge_range_start=segment_start (4)

purge_range_end=segment_start+segment duration (5)

在一些实施例中,在清除缓冲区中与目标范围相关联的位置处可能存在重叠事件。基于确定在清除缓冲区中与目标范围相关联的位置处存在重叠事件,清除缓冲区中的目标范围可被划分为多个清除子范围,其中多个清除子范围中的每个子范围为空,或者被至少一个对于整个清除子范围具有相同状态的事件占用。

在将清除缓冲区划分为多个清除子范围之后,对于被至少一个事件占用的多个清除子范围中的每个子范围,可以基于多个清除子范围中的相应清除子范围来划分该至少一个事件。这些被划分的事件可以在与各个的清除子范围相关联的位置处附加到清除缓冲区。在一些实施例中,相同的事件关联标识符(Event Association Identifier,EAI)可分配给清除缓冲区中与目标范围相关联的位置处的至少一个被划分事件中的每一个。在一些实施例中,对于清除缓冲区中与相应的清除子范围相关联的位置处的至少一个被划分事件中的每一个,可将已播放标志设置为假,其中已播放标志可以指示与至少一个被划分事件中的每一个相关联的媒体段是否已经播放。在一些实施例中,对于每个已划分的事件,可以添加诸如EAI、Emsg.scheme_id_uri、emsg.value、emsg.id、dispatch_range_start、dispatch_duration=emsg.duration/emsg.timescale和emsg.message_data()之类的事件特征和/或属性。

在一些实施例中,基于事件的调度模式是on_receive模式,可以立即调度事件,即可以在与当前播放位置相关联的位置处将事件附加到调度缓冲区。在附加之后,可以将事件或事件的标识符附加到已调度缓冲区中。

在一些实施例中,基于事件的调度模式是on_start模式,事件处理可以包括,基于事件起始时间和事件结束时间计算事件的事件调度范围,以及在与事件调度范围相关联的位置处将事件附加到事件调度缓冲区中。

作为示例,事件调度范围可以基于下式确定:

对于emsg v0(esmg.version=0):dispatch_range_start=purge_range_start+emsg.presentation_time_delta/emsg.time_scale (6)

对于emsg v1(emsg.version=1):dispatch_range_start=emsg.presentation_time/emsg.timescale (7)

dispatch_range_end=dispatch_range_start+emsg.duration/emsg.timescale (8)

在一些实施例中,在事件调度缓冲区中与事件的事件调度范围相关联的位置处可能存在已有的重叠事件。基于确定在事件调度缓冲区中与事件的事件调度范围相关联的位置处存在已有的重叠事件,可将事件调度范围划分为多个子范围,使得多个子范围中的每个子范围为空,或者被至少一个对于整个子范围具有相同状态的事件占用。

在将事件调度缓冲区划分为多个子范围之后,对于被至少一个事件占用的多个子范围中的每个子范围,可以基于多个子范围中的相应子范围来划分该至少一个事件。这些被划分的事件可以在与各自子范围相关联的位置处附加到事件调度缓冲区中。在一些实施例中,对于每个已划分的事件,可以添加诸如EAI、Emsg.scheme_id_uri、emsg.value、emsg.id、dispatch_range_start、dispatch_duration=emsg.duration/emsg.timescale和emsg.message_data()之类的事件特征和/或属性。作为示例,相同的事件关联标识符(EAI)可分配给在事件调度缓冲区中与事件调度范围相关联的位置处的至少一个被划分事件中的每一个。

根据实施例,在事件调度缓冲区中当前播放位置处发生的事件可以基于事件标识符(例如,emsg.id)不在已调度缓冲区中且在清除缓冲区中与该事件具有相同EAI的至少一个事件具有已播放标志值“true”,进行调度。在将该事件调度到应用之后,可以从事件调度缓冲区中移除该事件,并且可以将该事件的标识符添加至已调度缓冲区中。

在一些实施例中,可以清除从媒体缓冲区的开始或结束的范围。被清除的媒体缓冲区范围可以称为“媒体子范围”。该清除可包括,从媒体缓冲区清除媒体子范围,以及确定事件调度缓冲区中与媒体子范围相关联的位置与事件调度缓冲区中各个事件的事件调度范围是否重叠。

在一些实施例中,基于确定在与清除缓冲区中的媒体子范围相关联的位置和清除缓冲区中的相应事件的目标范围之间存在重叠清除子范围,可以从清除缓冲区中清除重叠清除子范围。此外,对于清除缓冲区中处于与清除缓冲区中的媒体子范围相关联的位置处的已播放标志设置为假的每个事件,在满足以下条件时从清除缓冲区中移除该事件:在清除缓冲区中、处于与清除缓冲区中的媒体子范围相关联的位置之外的事件不具有与被移除事件相同的EAI,或者在清除缓冲区中、处于与清除缓冲区中的媒体子范围相关联的位置内的事件不具有与被移除事件相同的EAI且已播放标志设置为真。

图5A描述了根据实施例当方案URI的处理模式是process@append且方案URI的调度模式是on_start时处理媒体段和事件段的示例媒体和事件调度缓冲区组500A。

如图5A所示,媒体流510可以包括媒体段(S0、S1、S2)和事件(E0、E1、E2)。

解析器可以获得媒体数据并且可以从媒体数据生成一个或多个事件段和一个或多个媒体段。解析器还可以从一个或多个事件段中解析出一个或多个事件,以确定事件起始时间、事件结束时间和调度模式。媒体段可以附加到媒体源缓冲区或媒体缓冲区。作为示例,可以按照解析媒体段的顺序或与媒体段相关联的播放时间将媒体段附加到媒体缓冲区520。每个媒体段可以与一个或多个事件相关联。在一些实施例中,一个或多个事件和事件段可以与媒体段相关联。

在将媒体段附加到媒体缓冲区时,可以将事件附加到事件调度缓冲区。在on_start模式下,事件可在基于其事件起始时间的位置处被附加到事件调度缓冲区中,并且可以将事件持续时间映射到事件调度缓冲区上。作为示例,当媒体段S0和S1被附加到媒体缓冲区520时,事件E0和E1可以基于其各自的起始时间被附加到事件调度缓冲区530中,并且可以将其各自的持续时间映射到调度缓冲区530上。

在一些实施例中,可以基于事件起始时间和事件结束时间来计算事件的事件调度范围。当确定事件调度缓冲区中与事件的事件调度范围相关联的位置(或范围)处存在覆盖事件时,事件调度缓冲区中的事件调度范围可被划分为多个子范围,其中多个子范围中的每个子范围要么为空,要么被至少一个对于整个子范围具有相同状态的事件占用。根据示例,当媒体段S2被附加到媒体缓冲区520时,相关联的事件E2可在基于事件E2的起始时间和持续时间的位置处被附加到事件调度缓冲区540。如图5A所示,如果事件调度缓冲区中与事件E2的映射(或事件调度范围)相关联的位置处存在重叠事件,例如事件E1,则事件调度范围可被划分为三个子范围,使得每个子范围要么不包括事件,要么具有至少一个对于整个子范围具有相同状态的事件。作为示例,事件E1可以存在于事件调度缓冲区540中新事件E2的事件调度范围内,然后事件调度缓冲区640可以被划分为三个子范围,第一子范围542可以被事件E1的非重叠子范围占用,第二子范围544可以被事件E1和事件E2之间的重叠子范围占用,第三子范围546可以被事件E2的非重叠子范围占用。

图5B描述了根据实施例当方案URI的处理模式是process@append且方案URI的调度模式是on_start时,处理媒体段和事件段实现的示例性媒体和事件调度缓冲区组500B。

根据本公开的实施例,当调度模式为on_start时,媒体段可以被部分覆写,即在当调度模式为on_start时,如果已有的媒体段被新媒体段部分覆写,则可以仅修改媒体缓冲区,而不修改事件调度缓冲区。在一些实施例中,仅已有的媒体段的部分重叠部分可以被新媒体段覆写。作为示例,如果新的媒体段S2’被附加到媒体缓冲区550,且媒体段S2’与媒体段S2部分重叠,则可以仅覆写媒体缓冲区上的媒体段S2的重叠部分。

在process@play处理模式中,由于不是每个附加在媒体缓冲区中的媒体段都被播放和/或顺序播放,因此可以使用另一缓冲区来跟踪哪些媒体段已被播放以及哪些媒体段还没有被播放。作为示例,清除缓冲区可用于跟踪或维护媒体缓冲区中的媒体样本与事件调度缓冲区中的事件之间的关联。

图6A描述了根据实施例当方案URI的处理模式是process@play且方案URI的调度模式是on_start时,处理媒体段和事件段的示例性媒体、事件调度和事件清除缓冲区组600A。

如图6A所示,媒体流610可以包括媒体段(S0、S1、S2、S4)和事件(E0、E1、E2),处理媒体流610可以包括媒体缓冲区620、清除缓冲区630和事件调度缓冲区640。

解析器可以获得媒体数据并且可以从媒体数据生成一个或多个事件段和一个或多个媒体段。在一些实施例中,可对来自一个或多个媒体段中的媒体段进行解析以确定段起始时间和段结束时间,其中一个或多个事件可以与该媒体段相关联。可以按照解析媒体段的顺序或与媒体段相关联的播放时间,将媒体段附加到媒体缓冲区620中。每个媒体段可以与一个或多个事件相关联。

解析器还可以从一个或多个事件段中解析出一个或多个事件以确定事件起始时间、事件结束时间和调度模式。在将媒体段附加到媒体缓冲区时,可以将事件附加到事件调度缓冲区。在on_start模式下,事件可在基于其事件起始时间的位置处被附加到事件调度缓冲区,并且可以将事件持续时间映射到事件调度缓冲区上。作为示例,当媒体段S0和S1被附加到媒体缓冲区620时,事件E0和E1可以基于其各自的起始时间被附加到事件调度缓冲区6400,并且可以将其各自的持续时间映射到调度缓冲区640上。

在一些实施例中,事件可在与目标范围相关联的位置处被附加至清除缓冲区,其中目标范围基于与各自事件相关联的媒体段的段起始时间和段结束时间。在一些实施例中,附加到清除缓冲区的事件可以映射媒体段的持续时间、起始时间和结束时间,使得事件可以在清除缓冲区中对齐,类似于媒体缓冲区中的各自关联的媒体段。在示例性实施例中,通过将事件清除缓冲区630中的事件段的事件起始时间和事件持续时间与媒体缓冲区620中的相关联的媒体段(S0、S1、S2、S3)的起始时间和持续时间对齐,可以将事件段(E0、E1、E2)附加到事件清除缓冲区630。作为示例,事件清除缓冲区530中的一个或多个事件的起始时间和事件持续时间可以与媒体缓冲区620中的相关联的媒体段的媒体段起始时间和持续时间或媒体段结束时间对齐。在一些示例性实施例中,如果一个以上的事件段与同一媒体段相关联,则可以基于相关联的媒体段的起始时间和结束时间来调整清除缓冲区中的每个事件的起始时间。

在一些实施例中,可以为清除缓冲区中的每个事件分配唯一的事件关联ID(EAI),其可指示媒体缓冲区中的媒体段与事件调度缓冲区中的事件之间的关联。在一些实施例中,虽然清除缓冲区中的事件的起始时间和结束时间可以与相关联的媒体段的起始时间和结束时间范围相同,但事件的实际起始时间和结束时间可以映射在事件调度缓冲区中。在一些实施例中,由于清除缓冲区可用于跟踪已播放的媒体段并维持媒体缓冲区中的媒体样本与事件调度缓冲区中的事件间的关联,因此也可为事件调度缓冲区中的事件分配EAI。

在一些实施例中,事件可以在与目标范围相关联的位置处被附加至清除缓冲区,其中目标范围基于与各个事件相关联的媒体段的段起始时间和段结束时间。然而,当将事件附加到清除缓冲区时,如果清除缓冲区中在与目标范围相关联的位置处存在重叠事件,清除缓冲区的目标范围可被划分为多个清除子范围,其中多个清除子范围中的每个子范围要么为空,要么被至少一个对于整个清除子范围具有相同状态的事件占用。

作为示例,当媒体段S2被附加到媒体缓冲区时,相关联的事件E2可在基于事件E2的起始时间和持续时间的位置处被附加到事件调度缓冲区640,并且事件E2可在基于媒体段S2的起始时间和持续时间的位置处被附加到清除缓冲区630。如果在事件调度缓冲区中与新事件的映射或事件调度范围相关联的位置处存在重叠事件,则可以将新事件的事件调度范围划分为子范围,使得每个子范围被对于整个子范围具有相同状态的事件占用。作为示例,事件E1可以存在于调度缓冲区640中新事件E2的事件调度范围内,然后事件调度缓冲区640可以被划分为三个子范围,第一子范围642可以被事件E1的非重叠子范围占用,第二子范围644可以被事件E1和事件E2之间的重叠子范围占用,第三子范围646可以被事件E2的非重叠子范围占用。

图6B描述了根据实施例当方案URI的处理模式是process@play且方案URI的调度模式是on_start时,处理媒体段和事件段的示例性媒体、事件调度和事件清除缓冲区组600B。

根据本公开的实施例,当调度模式为on_start时,媒体段可以被部分覆写,即在当调度模式为on_start时,已有的媒体段被新媒体段部分覆写,并且可以仅修改媒体缓冲区,而不修改事件调度缓冲区。在一些实施例中,仅已有的媒体段的部分重叠部分可以被新媒体段覆写。作为示例,如果新的媒体段S2’被附加到媒体缓冲区660,且媒体段S2’与媒体段S2部分重叠,则可以仅覆写媒体缓冲区660上的媒体段S2的重叠部分。在一些实施例中,仅可以修改媒体缓冲区。在一些实施例中,可以修改清除缓冲区中的事件以反映媒体缓冲区。作为示例,清除缓冲区670中对应于媒体段S2的事件E2可以被清除或覆写,以反映媒体缓冲区660中被覆写的媒体段S2。

在一些实施例中,仅已有的媒体段的部分重叠部分可以被新媒体段覆写。作为示例,新的媒体段S2’可以被附加到媒体缓冲区660,且媒体段S2’可以与媒体段S2部分重叠,则可以仅覆写媒体缓冲区上的媒体段S2的重叠部分。

在一些实施例中,上述公开的实施例可使用单个调度缓冲区来实现。调度缓冲区中的每个事件可以维持该事件的电子消息所承载的媒体范围的列表。首先,该列表可能只有一个媒体范围,覆盖媒体段。然而,通过各种操作,媒体范围可能会被划分成两个或更多个范围。对于每个媒体范围,事件还可以包括指示是否播放该范围的标志。改变媒体范围列表中的媒体范围、更新“已播放”标志、将媒体范围划分为两个或更多个范围以及更新其各自的“已播放”标志,使得能够仅使用一个缓冲区来实现本公开的实施例。

图7是根据实施例用于处理媒体段和事件段的过程700的示例性流程图。

如图7所示,在过程700的操作710中,可以获取媒体数据。作为示例,解析器可以获取媒体数据。

在操作715中,可以从媒体数据生成一个或多个事件段。在一些实施例中,可以从一个或多个事件段中解析出各个事件,以确定事件起始时间、事件结束时间和调度模式。

在操作720中,可以从媒体数据生成一个或多个媒体段。在一些实施例中,可以对来自一个或多个媒体段中的媒体段进行解析以确定段起始时间和段结束时间。

在一些实施例中,在过程700中,一个或多个事件可以与媒体段相关联,并且各个事件可以与媒体段相关联。

在操作725中,可以基于事件起始时间和当前播放位置的比较以及确定各个事件不存在于已调度缓冲区中,将来自一个或多个事件段的各个事件附加到事件调度缓冲区,并且在事件调度缓冲区中与各个事件相关联的位置可以基于各个事件的调度模式。

在一些实施例中,在操作725中,基于处理模式是append以及事件的调度模式是on_start模式,事件处理可以包括:基于事件起始时间和事件结束时间计算事件的事件调度范围,以及在与事件调度范围相关联的位置处将事件附加到事件调度缓冲区。在一些实施例中,在事件调度缓冲区中与事件的事件调度范围相关联的位置处可能存在已有的重叠事件。基于确定在事件调度缓冲区中与事件的事件调度范围相关联的位置处存在已有的重叠事件,事件调度范围可被划分为多个子范围,使得多个子范围中的每个子范围要么为空,要么被至少一个对于整个子范围具有相同状态的事件占用。在将事件调度缓冲区划分为多个子范围之后,对于被至少一个事件占用的多个子范围中的每个子范围,可以基于多个子范围中的相应子范围来划分该至少一个事件。这些被划分的事件可以在与各自子范围相关联的位置处被附加到事件调度缓冲区。

在一些实施例中,在操作725中,基于处理模式是play以及事件的调度模式是on_start模式,事件处理可以包括:基于事件起始时间和事件结束时间计算事件的事件调度范围,以及在与事件调度范围相关联的位置处将事件附加事件调度缓冲区。在一些实施例中,在事件调度缓冲区中与事件的事件调度范围相关联的位置处可能存在已有的重叠事件。基于确定在事件调度缓冲区中与事件的事件调度范围相关联的位置处存在已有的重叠事件,事件调度范围可被划分为多个子范围,使得多个子范围中的每个子范围要么为空,要么被至少一个对于整个子范围具有相同状态的事件占用。在将事件调度缓冲区划分为多个子范围之后,对于被至少一个事件占用的多个子范围中的每个子范围,可以基于多个子范围中的相应子范围来划分该至少一个事件。这些被划分的事件可以在与各自子范围相关联的位置处被附加到事件调度缓冲区。

在操作730中,基于处理模式是play,可以使用附加的清除缓冲区。事件可以在与目标范围相关联的位置处被附加至清除缓冲区,其中目标范围基于与该事件相关联的媒体段的段起始时间和段结束时间。在一些实施例中,与事件相关联的媒体段的段起始时间和段结束时间可以使用解析器来确定,该解析器可对一个或多个媒体段中的媒体段进行解析。在一些实施例中,在清除缓冲区中与目标范围相关联的位置处可能存在重叠事件。基于确定在清除缓冲区中与目标范围相关联的位置处存在重叠事件,清除缓冲区中的目标范围可被划分为多个清除子范围,其中多个清除子范围中的每个子范围要么为空,要么被至少一个对于整个清除子范围具有相同状态的事件占用。在将清除缓冲区划分为多个清除子范围之后,对于被至少一个事件占用的多个清除子范围中的每个子范围,可以基于多个清除子范围中的相应清除子范围来划分该至少一个事件。这些被划分的事件可以在与各自的清除子范围相关联的位置处附加到清除缓冲区。

在操作735中,可以基于事件调度缓冲区中与各自事件相关联的位置、事件起始时间、事件结束时间和当前播放位置来调度各个事件。在一些实施例中,基于事件的调度模式是on_receive模式,可以立即调度事件,即可以在与当前播放位置相关联的位置处将事件附加到调度缓冲区。在附加之后,可以将事件或事件的标识符附加到已调度缓冲区。

在一些实施例中,在处理模式是append的情况下,在事件调度缓冲区中当前播放位置处发生的事件可以基于事件标识符(例如,emsg.id)不在已调度缓冲区中,来进行调度。在将事件调度到应用之后,可以从事件调度缓冲区中移除该事件,并且可以将该事件的标识符添加至已调度缓冲区。然而,在实施例中,当在事件调度缓冲区中当前播放位置处发生的事件的事件标识符存在于已调度缓冲区时,可以从事件调度缓冲区中移除该事件。

在一些实施例中,在处理模式是play的情况下,在事件调度缓冲区中当前播放位置处发生的事件可以基于事件标识符(例如,emsg.id)不在已调度缓冲区中且在清除缓冲区中与该事件具有相同EAI的至少一个事件具有已播放标志值“true”,进行调度。在将该事件调度到应用之后,可以从事件调度缓冲区中移除该事件,并且可以将该事件的标识符添加至已调度缓冲区。

在操作740中,当处理模式是append时,清除事件段可以包括清除从媒体缓冲区的开始或结束的范围。被清除的媒体缓冲区范围可以称为“媒体子范围”。该清除可包括:从媒体缓冲区清除媒体子范围,以及基于确定事件调度缓冲区中与媒体子范围相关联的位置与事件调度缓冲区中各个事件的事件调度范围重叠,从事件调度缓冲区中清除重叠子范围。

在一些实施例中,当处理模式是play时,清除事件段可以包括清除从媒体缓冲区的开始或结束的范围。被清除的媒体缓冲区范围可以称为“媒体子范围”。该清除可包括:从媒体缓冲区清除媒体子范围,以及确定事件调度缓冲区中与媒体子范围相关联的位置与事件调度缓冲区中各个事件的事件调度范围是否重叠。

在一些实施例中,基于确定在与清除缓冲区中的媒体子范围相关联的位置和清除缓冲区中的相应事件的目标范围之间存在重叠清除子范围,可以从清除缓冲区中清除重叠清除子范围。此外,对于清除缓冲区中与清除缓冲区中的媒体子范围相关联的位置处的已播放标志设置为假的每个事件,在满足以下条件时从清除缓冲区中移除该事件:在清除缓冲区中、处于与清除缓冲区中的媒体子范围相关联的位置之外的事件不具有与被移除事件相同的EAI;或者,在清除缓冲区中、处于与清除缓冲区中的媒体子范围相关联的位置内的事件不具有与被移除事件相同的EAI且已播放标志设置为真。

可使用计算机可读指令将上述技术实现为计算机软件且物理地存储在一个或多个计算机可读介质或中,或者通过特定配置的一个或更多个硬件处理器来实现。例如,图10示出了适合于实施各种实施例的计算机系统1000。

可使用任何合适的机器代码或计算机语言对计算机软件进行编码,任何合适的机器代码或计算机语言可经受汇编、编译、链接或类似的机制以创建包括指令的代码,该指令可由计算机中央处理单元(Central Processing Unit,CPU)、图形处理单元(GraphicsProcessing Unit,GPU)等直接执行或通过解释、微代码执行等执行。

指令可在各种类型的计算机或其组件上执行,例如包括个人计算机、平板计算机、服务器、智能电话、游戏装置、物联网装置等。

图10所示的计算机系统1000的组件本质上是示例性的,并不旨在对实施本公开的实施例的计算机软件的使用范围或功能提出任何限制。组件的配置也不应被解释为具有与计算机系统1000的示例性实施例中所示的组件中的任何一个组件或组件的组合相关的任何依赖或要求。

计算机系统1000可包括某些人机接口输入装置。此类人机接口输入装置可响应于一个或多个人类用户通过例如下述的输入:触觉输入(例如:击键、划动,数据手套移动)、音频输入(例如:语音、拍手)、视觉输入(例如:手势)、嗅觉输入。人机接口装置还可用于捕获不一定与人的意识输入直接相关的某些媒介,例如音频(例如:语音、音乐、环境声音)、图像(例如:扫描的图像、从静止图像相机获取摄影图像)、视频(例如二维视频、包括立体视频的三维视频)。

输入人机接口装置可包括下述中的一项或多项(每种中仅示出一个):键盘1001、鼠标1002、触控板1003、触摸屏1010、操纵杆1005、麦克风1006、扫描仪1008、相机1007。

计算机系统1000还可包括某些人机接口输出装置。这样的人机接口输出装置可例如通过触觉输出、声音、光和气味/味道来刺激一个或多个人类用户的感官。此类人机接口输出装置可包括触觉输出装置(例如触摸屏1010的触觉反馈、或操纵杆1005,但也可以是不作为输入装置的触觉反馈装置)、音频输出装置(例如:扬声器1009、耳机)、视觉输出装置(例如包括CRT屏幕、LCD屏幕、等离子屏幕、OLED屏幕的屏幕1010,每种屏幕都有或没有触摸屏输入功能,每种屏幕都有或没有触觉反馈功能-这些屏幕中的一些屏幕能够通过诸如立体图像输出、虚拟现实眼镜、全息显示器和烟箱之类的装置来输出二维视觉输出或超过三维的输出)以及打印机。

计算机系统1000还可包括人机可访问存储装置及其关联介质,例如,包括具有CD/DVD等介质1011的CD/DVD ROM/RW 1020的光学介质、指状驱动器1022、可拆卸硬盘驱动器或固态驱动器1023、诸如磁带和软盘之类的传统磁性介质、诸如安全软件狗之类的基于专用ROM/ASIC/PLD的装置等。

本领域技术人员还应该理解,结合当前公开的主题使用的术语“计算机可读介质”不涵盖传输介质、载波或其它暂时性信号。

计算机系统1000还可包括连接一个或多个通信网络1098的接口1099。网络1098例如可以是无线的、有线的、光学的。网络1098可进一步是本地网络、广域网络、城域网络、车辆和工业网络、实时网络、延迟容忍网络等。网络1098的示例包括诸如以太网之类的局域网、无线LAN、包括GSM、3G、4G、5G、LTE等的蜂窝网络、包括有线电视、卫星电视和地面广播电视的电视有线或无线广域数字网络、包括CANBus的车辆和工业网络等等。某些网络1098通常需要连接到某些通用数据端口或外围总线(1050和1051)的外部网络接口适配器(例如,计算机系统1000的USB端口);如下所述,其它网络接口通常通过连接到系统总线而集成到计算机系统1000的内核中(例如,PC计算机系统中的以太网接口或智能手机计算机系统中的蜂窝网络接口)。计算机系统1000可使用这些网络1098中的任何一个网络与其它实体通信。此类通信可以是仅单向接收的(例如,广播电视)、仅单向发送的(例如,连接到某些CANbus装置的CANbus)或双向的,例如,使用局域或广域数字网络连接到其它计算机系统。如上所述,可在这些网络和网络接口中的每一个上使用某些协议和协议栈。

上述人机接口装置、人机可访问存储装置和网络接口可附接到计算机系统1000的内核1040。

内核1040可包括一个或多个中央处理单元(CPU)1041、图形处理单元(GPU)1042、图像适配器1017、现场可编程门区(Field Programmable Gate Area,FPGA)形式的专用可编程处理单元1043、用于某些任务的硬件加速器1044等。这些装置以及只读存储器(ROM)1045、随机存取存储器1046、诸如内部非用户可访问的硬盘驱动器、SSD等之类的内部大容量存储器1047可通过系统总线1048连接。在一些计算机系统中,可以以一个或多个物理插头的形式访问系统总线1048,以能够通过附加的CPU、GPU等进行扩展。外围装置可直接连接到内核的系统总线1048或通过外围总线1051连接到内核的系统总线1048。外围总线的体系结构包括PCI、USB等。

CPU 1041、GPU 1042、FPGA 1043和加速器1044可执行某些指令,这些指令可以组合来构成上述计算机代码。该计算机代码可存储在ROM 1045或RAM 1046中。过渡数据也可存储在RAM 1046中,而永久数据可例如存储在内部大容量存储器1047中。可通过使用高速缓存来进行到任何存储装置的快速存储及检索,该高速缓存可与下述紧密关联:一个或多个CPU 1041、GPU 1042、大容量存储器1047、ROM 1045、RAM 1046等。

计算机可读介质可在其上具有用于执行各种由计算机实现的操作的计算机代码。介质和计算机代码可以是出于本公开的目的而专门设计和构建的介质和计算机代码,或者介质和计算机代码可以是计算机软件领域的技术人员公知且可用的类型。

作为示例而非用于限制,可由一个或多个处理器(包括CPU、GPU、FPGA、加速器等)执行包含在一种或多种有形的计算机可读介质中的软件而使得具有架构,特别是内核1040的计算机系统1000提供功能。此类计算机可读介质可以是与如上所述的用户可访问的大容量存储相关联的介质,以及内核1040的某些非暂时性的存储器,例如内核内部大容量存储器1047或ROM 1045。可将实施本公开的各实施例的软件存储在此类装置中并由内核1040执行。根据特定需要,计算机可读介质可包括一个或多个存储装置或芯片。软件可使得内核1040,特别是其中的处理器(包括CPU、GPU、FPGA等)执行本文所描述的特定过程或特定过程的特定部分,包括定义存储在RAM 1046中的数据结构以及根据由软件定义的过程来修改此类数据结构。附加地或替换地,可由硬连线或以其它方式体现在电路(例如,加速器1044)中的逻辑而使得计算机系统提供功能,该逻辑可替换软件或与软件一起运行以执行本文描述的特定过程或特定过程的特定部分。在适当的情况下,提及软件的部分可包含逻辑,反之亦然。在适当的情况下,提及计算机可读介质的部分可包括存储用于执行的软件的电路(例如集成电路(IC))、体现用于执行的逻辑的电路或包括两者。本公开包括硬件和软件的任何合适的组合。

尽管本公开已经描述了若干个示例性实施例,但存在落入本公开范围内的改变、替代和各种替代的等效实施例。因此,需要理解的是本领域的技术人员将能够设计许多系统和方法,尽管本文中未明确示出或描述,但这些系统和方法体现了本公开的原理,因此在其精神和范围内。

相关技术
  • 用于处理DASH和CMAF带内事件的扩展的W3C媒体扩展
  • 用于将多媒体源和多媒体接收器从操作模式切换到待机模式以及从待机模式切换到操作模式的方法
技术分类

06120115602005