相关申请的交叉引用
本申请要求于2019年1月9日提交的美国临时申请no.16/244,033的权益,其通过引用合并于本文中。
本发明的实施例一般涉及编码技术,并且更具体地涉及在生成媒体字幕(title)的缓冲区约束版本时优化编码操作。
背景技术:
典型的媒体流传输服务提供对可在一系列不同端点设备上查看的媒体字幕库的访问。每个端点设备均可以不同连接条件(其影响带宽和延迟)下连接到媒体流传输服务。此外,每个不同的端点设备均可以包括用于向终端用户输出媒体字幕的不同硬件。例如,给定的端点设备可以包括显示屏,该显示屏具有特定屏幕尺寸和特定屏幕分辨率。
在许多实施方案中,连接到媒体流传输服务的端点设备执行端点应用,该端点应用基于端点设备的连接条件和属性来为给定的媒体字幕确定媒体字幕的适当编码版本,以流式传输到端点设备。更具体地,端点应用尝试选择媒体字幕的特定编码版本,该特定编码版本在端点设备上回放媒体字幕期间提供最佳可能的视觉质量,同时避免由于缓冲或重新缓冲导致的回放中断。
在一些实施方案中,端点应用基于比特率阶梯选择媒体字幕的特定编码版本。比特率阶梯被设计用于基于可用带宽在媒体字幕回放期间实现目标视觉质量。比特率阶梯中的每个梯级均指定不同的比特率-分辨率对,该不同的比特率-分辨率对对应于媒体字幕的不同的预先生成的编码版本。为了生成对应于给定比特率-分辨率对的媒体字幕的编码版本,以该分辨率对与媒体字幕相关联的媒体内容进行采样,以生成采样的媒体内容。基于比特率选择速率控制值,然后使用编码器对采样的媒体内容进行编码。
上述“单片”编码技术的一个缺点是,与给定媒体字幕相关联的媒体内容的复杂性经常随着媒体字幕而变化;而用于编码媒体内容的分辨率和速率控制值不变。结果,对媒体字幕的相对简单部分进行编码可能比满足目标视觉质量所必需的消耗更多的计算资源和存储资源。例如,媒体字幕的相对简单部分均可以具有相同的视觉质量,无论媒体内容的该部分是使用560千位每秒(kbps)的比特率还是使用3000kbps的比特率进行编码。除其他外,此类编码效率低下会浪费计算资源和存储资源,并增加将媒体字幕的编码版本流式传输到端点设备所需的带宽。
在其他实施方案中,为了减少这些类型的编码效率低下,媒体流传输服务供应商随着媒体字幕改变分辨率和速率控制值。通常,基于子序列的编码应用将媒体字幕划分为不同子序列或帧集,子序列或帧集由相似属性来表征。然后,基于子序列的编码应用以各种不同的分辨率和速率控制值对每个子序列进行多次编码,以生成编码的子序列。随后,基于子序列的编码应用执行优化操作,以生成媒体字幕的不同优化编码版本。媒体字幕的每个优化编码版本包括跨越媒体字幕长度的编码子序列的不同组合,并且分辨率和/或速率控制值可以在组成编码子序列之间变化。
上述“基于子序列”编码技术的一个缺点是媒体字幕的优化编码版本不一定符合传输缓冲区约束,该传输缓冲区约束通常与向端点设备的传输以及在端点设备处进行缓冲相关联。通常,如果媒体字幕的编码版本符合相关的传输缓冲区约束,则端点设备将更能够尤其是在恒定比特率传输信道上正确地缓冲和回放媒体字幕。然而,如果媒体字幕的编码版本不符合相关的传输缓冲区约束,则端点设备将不太能够正确地缓冲和回放媒体字幕。在后一种情况下,当将媒体字幕流式传输到端点设备时,可能会发生回放中断,该回放中断降低观看体验的总体质量。
例如,通过恒定带宽信道(例如广播电视中使用的那些)传输的媒体字幕的编码版本通常需要遵守恒定比特率比特率(cbr)视频缓冲区(vbv)约束。在恒定带宽信道中,编码比特(bit)以固定速率到达与端点设备相关联的解码器,并存储在具有固定尺寸的传输缓冲区中。作为显示媒体字幕的特定帧的一部分,解码器从传输缓冲区中移除相关的编码比特。因为用于对每个帧进行编码的比特数随着媒体字幕可能会有所不同,因此传输缓冲区存储的编码比特数在媒体字幕的回放期间也可能会有所不同。如果媒体字幕的编码版本与cbrvbv约束兼容,则用于对每个帧进行编码的比特数将受到限制,以确保在媒体字幕回放期间传输缓冲区不会上溢或下溢。但是,如果传输缓冲区上溢,则传输缓冲区可能没有空间来存储传入的编码比特。因此,可能会发生丢帧。此外,如果传输缓冲区下溢,则无法从传输缓冲区中检索编码比特,并且可能发生帧冻结。
如上所述,本领域需要更有效的媒体字幕编码技术。
技术实现要素:
本发明的一个实施例提出了一种用于编码媒体字幕的计算机实现的方法。该方法包括:基于与媒体字幕相关联的第一子序列和第一组编码点而生成子序列编码点的第一凸包;基于传输缓冲区约束、第一凸包和媒体编码点的第二全局凸包来生成媒体编码点的第一全局凸包,该媒体编码点的第二全局凸包与媒体字幕的一部分相关联,该部分按照媒体字幕的回放顺序出现在第一子序列前;基于媒体度量来选择在第一全局凸包中包含的第一媒体编码点;以及基于第一媒体编码点来确定第一编码媒体序列,其中第一编码媒体序列随后在媒体字幕的回放期间流式传输到端点设备。
所公开的技术相对于现有技术的至少一个技术优点是编码媒体序列是基于多组单独编码的子序列和传输缓冲区约束而生成的。值得注意的是,包括在每个编码媒体序列中的单独编码子序列可以与不同的编码点相关联。因此,减少了通常与现有技术单片编码技术相关联的编码低效率。此外,通过确保优化的编码媒体序列与传输缓冲区约束兼容,减少了当将媒体字幕流式传输到端点设备时由于传输限制和缓冲限制而降级的观看体验。这些技术优势提供了优于现有技术方法的一项或多项技术进步。
附图说明
为了能够详细理解各个实施例的上述特征,可以通过参考各个实施例对上面简要概括的本发明构思进行更具体的描述,其中一些实施例在附图中示出。然而,应当注意,附图仅示出了本发明构思的典型实施例,并且因此不应被视为以任何方式限制范围,并且存在其他等效的实施例。
图1是被配置为实现本发明的一个或多个方面的系统的概念图示;
图2是根据本发明的各种实施例的图1的基于缓冲区的编码应用的更详细图示;
图3是根据本发明的各种实施例的图2的编码点列表的更详细图示;
图4是根据本发明的各种实施例的图2的子序列编码组中一个子序列编码组的更详细图示;
图5图示了根据本发明的各种实施例的由图2的凸包生成器生成的示例性凸包;
图6是根据本发明的各种实施例的图2的媒体编码点中的一个媒体编码点的更详细图示;
图7是根据本发明的各种实施例的图2的子序列迭代器的更详细图示;
图8图示了根据本发明的各种实施例的由图2的基于缓冲区的编码应用生成的示例性全局凸包和示例性优化的编码媒体序列;以及
图9a-图9b阐述了根据本发明的各种实施例的用于编码源媒体字幕的方法步骤的流程图。
具体实施方式
在以下描述中,阐述了许多具体细节以提供对各种实施例的更透彻的理解。然而,对于本领域技术人员来说显而易见的是,可以在没有一个或多个这些特定细节的情况下实践本发明构思。
为了优化流传输媒体服务向观众提供的总体视觉体验,流传输媒体服务供应商通常会为每个媒体字幕生成比特率阶梯。给定媒体字幕的比特率阶梯允许客户端端点设备在基于可用带宽的媒体字幕回放期间实现目标视觉质量。比特率阶梯中的每个梯级指定不同的比特率-分辨率对,该不同的比特率-分辨率对对应于媒体字幕的不同的预先生成的编码版本。
一些媒体流传输服务供应商使用单片编码技术来生成媒体字幕的不同编码版本,其中媒体字幕的每个编码版本与不同的比特率相关联。即,用于对与给定媒体字幕相关联的媒体内容进行编码的分辨率和速率控制值随着媒体字幕不变化。然而,因为与给定媒体字幕相关联的媒体内容的复杂性通常随着媒体字幕变化,因此媒体字幕的结果编码版本通常与编码效率低下相关联。更具体地,编码媒体字幕的相对简单的部分可能消耗比满足目标视觉质量所必需的更多的计算资源和存储资源。此外,流式传输媒体字幕的编码版本所需的带宽可能不必要地大。
例如,一部电影可能包括相对复杂的动作部分和相对简单的独白。无论独白是使用3000千位每秒(kbps)的比特率进行编码还是使用560kbps的比特率进行编码,独白均可以具有相同的视觉质量。相比之下,与使用3000kbps比特率对独白进行编码相关联的所需资源(例如,计算资源、存储资源、带宽等)超过了与使用560kbps比特率对独白进行编码相关联的所需资源。因此,使用3000kbps的比特率对整个电影进行编码会不必要地浪费计算资源和存储资源,并且不必要地增加将电影的编码版本流式传输到端点设备所需的带宽。
为了减少通常与单片编码技术相关的编码效率低下,一些媒体流传输服务供应商使用传统的基于子序列的编码应用来生成给定媒体字幕的不同编码版本。传统的基于子序列的应用基于目标度量值(例如目标视觉质量或目标比特率)来随着媒体字幕改变分辨率和速率控制值。以这种方式,媒体字幕的每个编码版本均与不同的目标度量值相关联。
通常,传统的基于子序列的编码应用将媒体字幕划分为不同的子序列,其中每个子序列均是包括从给定相机或其他捕获点连续捕获的媒体内容的场景(shot)。传统的基于子序列的编码应用然后在各种不同的编码点多次编码每个子序列,以生成编码的子序列。每个编码点指定分辨率和速率控制值的不同组合。随后,传统的基于子序列的编码应用执行优化操作,以生成媒体字幕的不同编码版本。
最后,传统的基于子序列的编码应用基于目标度量值来选择媒体字幕的编码版本之一作为媒体字幕的优化编码版本。媒体字幕的优化编码版本包括跨越媒体字幕长度的编码子序列的不同组合,并且分辨率和速率控制值可以在组成编码子序列之间变化。结果,传统的基于子序列的编码应用减少了通常与上述单片编码技术相关联的编码低效率。
这种类型的基于子序列的编码技术的一个缺点是媒体序列的优化编码版本不一定符合传输缓冲区约束,该传输缓冲区约束通常与向端点设备进行传输和在端点设备处进行缓冲相关联。如果媒体序列的编码版本符合相关的传输缓冲区约束,则关联的端点设备将更能够适当地缓冲和播放媒体字幕。然而,如果媒体序列的编码版本不符合相关的传输缓冲区约束,则端点设备将不太能够以不间断的方式适当地缓冲和回放媒体字幕。
常见传输缓冲区约束的一个实施例是恒定比特率(cbr)视频缓冲区验证器(vbv)约束。cbrvbv约束指定与恒定带宽信道相关联的传输速率和与端点设备相关联的缓冲区尺寸。编码比特以传输速率经由恒定带宽信道流式传输到端点设备。当编码比特到达与端点设备相关联的解码器时,编码比特被存储在具有缓冲区尺寸的传输缓冲区中。作为显示媒体字幕的特定帧的一部分,解码器从传输缓冲区中移除相关的编码比特。
因为用于对每个帧进行编码的比特数随着媒体字幕可能会有所不同,因此传输缓冲区存储的编码比特数在媒体字幕的回放期间也可能会有所不同。如果优化的编码媒体序列与cbrvbv约束兼容,则用于编码每个帧的比特数的变化受到限制,从而端点设备将更能够适当地缓冲并回放媒体字幕。
然而,如果优化的编码媒体序列与cbrvbv约束不兼容,则用于编码每个帧的比特数的变化可能导致传输缓冲区在媒体字幕回放期间下溢和/或上溢。结果,可能发生不利影响相关观看体验的回放中断。例如,在回放媒体字幕期间的不同时间点,对传输缓冲区重新填充快于传输缓冲区被耗尽,因此传输缓冲区可能会上溢。如果传输缓冲区上溢,则后续帧可能会被丢弃,中断媒体字幕的回放。
然而,利用在此公开的技术,媒体流传输服务供应商可以对受传输缓冲区约束的给定媒体字幕执行基于子序列的编码。优化的编码媒体序列中包含的每个编码子序列在受传输缓冲区约束的潜在不同优化的编码点处单独编码。因此,相对于现有技术的基于子序列的编码技术,所公开的技术可以减少与单片编码技术相关联的编码低效率同时减少回放中断的可能性。
在一些实施例中,基于缓冲区的编码应用基于多个编码点为每个子序列生成多个编码子序列。然后,基于缓冲区的编码应用根据媒体字幕的回放顺序中的编码子序列和传输缓冲区约束来递增地生成编码媒体序列。更准确地说,在第n次迭代期间,基于缓冲区的编码应用将从第0个子序列到第(n-1)个子序列的先前生成的编码媒体序列与和第n个子序列相关联的编码子序列进行组合。得到的编码媒体序列从第0个子序列到第n个子序列。
当基于缓冲区的编码应用生成每个编码媒体序列时,基于缓冲区的编码应用会跟踪传输缓冲区的缓冲区占用率。如果基于缓冲区的编码应用确定特定编码媒体序列的缓冲区占用率变化超过传输缓冲区的尺寸,则基于缓冲区的编码应用则丢弃该编码媒体序列。基于缓冲区的编码应用也丢弃任何编码媒体序列,该任何编码媒体序列和平均比特率与总体视觉质量之间的次优权衡相关联。在生成每个均跨越媒体字幕长度的编码媒体序列之后,基于缓冲区的编码应用选择具有最高总体视觉质量的编码媒体序列作为优化的编码媒体序列。
在此公开的技术相对于现有技术的一个优点和技术进步是优化的编码媒体序列是基于多组单独编码的子序列和传输缓冲区约束以回放顺序递增地生成的。因为每个组成编码子序列可以与不同的编码点相关联,因此媒体字幕的优化编码版本的总体视觉质量水平通常相对于与相同平均比特率相关联的该媒体字幕的单片编码版本增加。此外,丢弃不符合传输缓冲区约束的编码媒体序列有效地确保优化的编码媒体序列符合传输缓冲区约束。结果,相对于现有技术的基于子序列的编码技术,降低了当将媒体字幕流式传输到端点设备时由于传输缓冲区限制而降级的观看体验的可能性。
系统概览
图1是被配置为实现本发明的一个或多个方面的系统100的概念图。如图所示,系统100包括但不限于任何数量的计算实例110和云160。通常,云160包含封装的共享资源、软件、数据等。为了说明的目的,类似对象的多个实例在需要时用标识对象的参考编号和标识实例的括号里的编号来表示。
任何数量的计算实例110可以位于云160之外,而其他计算实例110可以位于云160内。在各种实施例中,系统100的任何数量的组件均可以分布在多个地理位置上。此外,系统100的任何数量的组件可以以任何组合包含在一个或多个独立设备、分布式计算环境或云160中或分布在这些设备、分布式计算环境或云160上。
如图所示,每个计算实例110包括但不限于处理器112和存储器116。处理器112可以是能够执行指令的任何指令执行系统、装置或设备。例如,处理器112可以包括中央处理单元(cpu)、图形处理单元(gpu)、控制器、微控制器、状态机或其任意组合。在替代实施方式中,每个计算实例110均可以包括任意数量的处理器112。
存储器116存储供计算实例110的处理器112使用的内容,例如软件应用和数据。存储器116可以是容易获得的存储器中的一个或多个,例如随机存取存储器(ram)、只读存储器(rom)、软盘、硬盘或任何其他形式的本地或远程数字存储器。在一些实施方式中,存储装置(未示出)可以补充或替换存储器116。存储装置可以包括任何数量和类型的外部存储装置,该外部存储装置可由处理器112访问。例如,存储装置可以包括,但不限于,安全数字卡、外部闪存、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述的任何合适的组合。
一般而言,计算实例110被配置为实现一个或多个应用。仅出于解释的目的,每个应用均被描绘为位于在单个计算实例110的存储器116中,并且在单个计算实例110的处理器112上执行。然而,如本领域技术人员将认识到的,每个应用的功能可以分布在任意数量的其他应用上,该任意数量的其他应用位于在任意数量的计算实例110的存储器116中,并且以任意组合在任意数量的计算实例的处理器112上执行的。此外,可以将任意数量的应用的功能合并到单个应用或子系统中。
尽管未显示,但媒体流传输服务提供对媒体字幕库的访问,该媒体字幕库可在一系列不同端点设备上查看。媒体字幕库包括但不限于与源媒体序列122相关联的媒体字幕。每个端点设备可在不同连接条件下连接到媒体流传输服务,该不同连接条件影响带宽和时延,但不限于此。此外,每个不同的端点设备可以包括用于向终端用户输出媒体字幕的不同硬件。例如,给定的端点设备可以包括显示屏,该显示屏具有特定屏幕尺寸和特定屏幕分辨率。
如本文上述描述的那样,在许多实施例中,连接到媒体流传输服务的端点设备执行端点应用,该端点应用为给定的媒体字幕确定该媒体字幕的适当编码版本,以基于端点设备的连接条件和属性来流式传输到端点设备。更具体地,端点应用尝试选择媒体字幕的特定编码版本,该特定编码版本与在端点设备上进行媒体字幕的回放期间的最佳视觉质量相关联,同时避免由于缓冲或重新缓冲而导致的回放中断。
计算实例110被配置为生成媒体字幕的编码版本,用于流传输。更准确地说,计算实例110被配置为基于源媒体序列122来生成优化的编码媒体序列180。源媒体序列122包括但不限于与媒体字幕相关联的任何数量和类型的媒体内容。媒体内容的实施例包括但不限于长篇电影、电视节目的剧集和音乐视频的任何部分(包括全部),仅举几例。优化的编码媒体序列180是该媒体字幕的预先生成的编码版本,并且包括但不限于从源媒体序列122中包含的媒体内容导出的编码媒体内容。
如在此前详细描述的,与给定媒体字幕相关联的媒体内容的复杂性和类型经常随着媒体字幕变化。通过使用传统的单片编码技术,用于编码媒体内容的分辨率和速率控制值不会随着媒体字幕而变化。如本文所称,“速率控制值”是用于速率控制参数的值,该速率控制参数用于指定编码器在以相关联的速率控制模式对媒体内容执行编码操作时如何分配比特。速率控制参数的一个实施例是量化参数(qp)。结果,对媒体字幕的相对简单部分进行编码可能比满足目标视觉质量所必需的消耗更多的计算资源和存储资源。除其他外,此类编码效率低下会浪费计算资源和存储资源,并增加将媒体字幕的编码版本流式传输到端点设备所需的带宽。
为了减少这些类型的编码效率低下,传统的基于子序列的编码技术生成媒体字幕的编码版本,其中分辨率和速率控制值随媒体字幕而变化。然而,传统的基于子序列的编码技术的一个限制是媒体字幕的编码版本不一定符合传输缓冲区约束,该传输缓冲区约束通常与向端点设备进行传输和在端点设备处进行缓存相关联。因此,当这些编码的媒体字幕流式传输到端点设备进行回放时,可能会发生会破坏观看体验的回放中断,例如冻结帧和冻结丢失。
更准确地说,在媒体字幕的编码版本的流式传输期间,随着编码比特到达与端点设备相关联的解码器,编码比特被存储在传输缓冲区中。作为显示媒体字幕的特定帧的一部分,解码器从传输缓冲区中移除相关的编码比特。因为用于对每个帧进行编码的比特数随着媒体字幕可能会有所不同,因此传输缓冲区存储的编码比特数在媒体字幕的回放期间也可能会有所不同。如果媒体字幕的编码版本与相关的有关传输缓冲区约束兼容,则用于编码每个帧的比特数的变化是有限的,从而端点设备将更能够适当地缓冲和播放媒体字幕。
然而,如果媒体字幕的编码版本与相关的传输缓冲区约束不兼容,则用于编码每一帧的编码比特数的变化可能导致传输缓冲区上溢或下溢。传输缓冲区的上溢和下溢会导致回放中断,例如冻结帧和冻结丢失,当这些编码的媒体字幕被流式传输到端点设备进行回放时,该回放中断会破坏观看体验。
编码单个子序列
为了相对于现有技术在将媒体字幕流式传输到端点设备期间全面提高观看体验的质量,系统100包括但不限于基于子序列的编码子系统120。基于子序列的编码子系统120位于计算实例110(0)的存储器116中,并且在计算实例110(0)的处理器112上执行。
基于子序列的编码子系统120基于传输缓冲区约束170来生成优化的编码媒体序列180。传输缓冲区约束170包括但不限于传输速率172、缓冲区尺寸174和约束类型176。传输速率172指定编码比特被传输到端点设备的速率。缓冲区尺寸174指定与端点设备相关联的传输缓冲区的最小尺寸。约束类型176指定在流式传输期间如何传输和/或存储编码比特。在替代实施例中,系统100可以包括以任何技术上可行的方式指定的任何数量和类型的传输缓冲区约束170。在一些此类实施方式中,基于缓冲区的编码应用140基于所有传输缓冲区约束170来生成编码媒体序列180。
一种常见的约束类型176是恒定比特率(cbr)视频缓冲区验证器(vbv)约束。cbrvbv约束指定以传输速率172将编码比特连续传输到最小缓冲区尺寸174的传输缓冲区。因此,如果传输缓冲区变满,则端点设备无法存储某些传输的编码比特。正如本领域技术人员将认识到的,cbrvbv约束通常是通过恒定带宽信道(例如广播电视中使用的信道)待流式传输的媒体字幕的编码版本的要求。
另一种常见的约束类型176是可变比特率(vbr)vbv约束。vbrvbv约束指定以传输速率172将编码比特有条件地传输到最小缓冲区尺寸174的传输缓冲区。如果传输缓冲区未满,则编码比特的传输继续进行。然而,如果传输缓冲区是满的,则编码比特的传输将暂停,直到传输缓冲区不再满为止。一些包含光盘存储器的端点设备(例如,蓝光播放器)要求媒体字幕的编码版本与vbrvbv约束兼容,以确保媒体字幕的无缝回放。
值得注意的是,由于传输缓冲区的预缓冲能力级别的限制,自适应流传输中使用的一些基于硬件的端点设备要求媒体字幕的编码版本符合vbv约束。在自适应流传输中,端点设备可以在媒体字幕的回放期间在媒体字幕的不同编码版本之间切换。为了促进自适应流式传输,可以基于不同的传输缓冲区约束170多次执行本文描述的任何数量的技术,以生成多个优化的编码媒体序列160。在替代实施例中,可以修改基于子序列的编码子系统120,以基于一组传输缓冲区约束170生成一组优化的编码媒体序列180。在此类实施例中,每个优化的编码媒体序列180(x)与不同的传输缓冲区约束170(x)兼容。
如图所示,基于子序列的编码子系统120包括但不限于子序列分析器130和基于缓冲区的编码应用140。子序列分析器130将源媒体序列122划分为任意数量的子序列132(0)-132(s)。子序列132是不重叠的、连续的帧集,它们一起跨越源媒体序列122。每组帧可以表示各种不同的构造,包括一组图片(gop)、帧序列、多个帧序列等等。例如,在一些实施例中,每个子序列132是包括在源媒体序列122中的不同场景。如本文所指,“场景”是通常具有相似时空特性并且持续一段不间断的时间段的帧序列。
在接收到源媒体序列122后,子序列分析器130对源媒体序列122执行任意数量的分析操作,以基于任意数量和类型的标准来确定子序列132。例如,在各种实施例中,子序列分析器130可以被配置为识别一致性度量位于指定范围内的帧集。在其他实施例中,并且如图1所示,子序列分析器130基于任意数量的场景变化134来确定子序列132。
更具体地,子序列分析器130将源媒体序列122传输到位于云160中的场景检测器124。场景检测器124基于源媒体序列122执行任意数量的场景检测算法,以识别场景变化134。场景检测算法的一些实施例包括但不限于多尺度绝对差和算法、运动补偿剩余能量算法、差值直方图算法、直方图差值算法等。每个场景的变化134指定不同场景对之间的边界。场景检测器124然后将场景变化134传送到子序列分析器130。随后,子序列分析器130基于场景变化134来对源媒体序列122执行分区操作,以确定子序列132。
在一些实施例中,子序列分析器130和/或基于子序列的编码子系统120可以执行任何数量类型的附加操作而作为生成子序列134的一部分。例如,在各种实施例中,子序列分析器130从源媒体序列122中去除无关像素。例如,子序列分析器130可以沿着源媒体序列122的边界部分去除包括在黑条中的像素。
在各种实施例中,基于子序列的编码子系统120确保每个子序列132的初始帧在编码操作期间被编码为关键帧。作为一般事项,“关键帧”和来自相同子序列132的包括在编码媒体序列中的所有后续帧均独立于包括在编码媒体序列中的任何在前帧而被解码。
基于子序列的编码子系统120可以确保以任何技术上可行的方式将不同子序列132的不同初始帧编码为关键帧。例如,在一些实施方式中,基于缓冲区的编码应用140将编码应用162配置为在编码媒体内容时基于关键帧位置列表(未示出)将帧编码为关键帧。在其他实施例中,基于缓冲区的编码应用140和/或编码应用162可以执行任意数量的编码操作,以在编码媒体内容时将不同子序列132的不同初始帧编码为关键帧。
如本领域技术人员将认识到的,在回放期间,与源媒体序列122相关联的媒体字幕可在对齐的关键帧处在不同优化的编码媒体序列180的解码版本之间切换,以基于任意数量的相关标准优化观看体验。相关标准的实施例包括当前连接带宽、当前连接时延、即将到来的子序列132的内容等。
如图所示,基于缓冲区的编码应用140基于子序列132和传输缓冲区约束170来生成优化的编码媒体序列180。优化的编码媒体序列180包括但不限于分别与子序列132(0)-132(s)相关联的s+1个编码子序列(图1中未示出)。每个编码子序列均包括从包含在相关子序列132中的媒体内容导出的编码媒体内容。
如结合图2更详细地描述的,对于每个子序列132,基于缓冲区的编码应用140基于编码点列表来生成多个编码子序列。编码点列表可以包括任意数量的编码点。每个编码点均包括但不限于分辨率和速率控制值。基于缓冲区的编码应用140可以以任何技术上可行的方式生成编码子序列。此外,作为一般情况,基于缓冲区的编码应用140可以以任何技术上可行的方式基于给定分辨率和给定速率控制值来生成从视频内容导出的编码视频内容。
例如,在一些实施例中,为了生成对应于给定子序列132和给定编码点的编码子序列,基于缓冲区的编码应用140基于分辨率对子序列执行采样操作,以生成采样子序列。基于缓冲区的编码应用140然后配置编码应用162,以便以速率控制值来对该采样子序列,以生成编码子序列。
如图所示,编码应用162位于云160中并且被配置为经由一个或多个并行编码器164有效地执行编码操作。每个并行编码器164可以包括任何数量的计算实例110。在替代实施例中,基于缓冲区的编码应用140可以执行编码操作,并且系统100可以省略编码应用162。在相同或其他实施例中,系统100可以包括采样应用,并且基于缓冲区的编码应用140可以配置采样应用以执行采样操作。
在各种实施例中,基于缓冲区的编码应用140可以以任何组合和以任何技术可行的方式以任何粒度级别(例如,每帧、每子序列132、每源媒体序列122等)执行采样操作和编码操作。例如,在一些实施例中,基于缓冲区的编码应用140可以基于给定的分辨率对源媒体序列122执行采样操作,以生成采样的媒体序列。随后,对于与分辨率相关联的每个编码点,基于缓冲区的编码应用140可以配置编码应用162,以便以相关联的速率控制值来对与相关联的子序列132相对应的采样媒体内容进行编码。
对于每个编码子序列,基于缓冲区的编码应用140计算比特率、质量得分和失真水平。基于缓冲区的编码应用140可以以任何技术上可行的方式计算给定编码子序列的比特率、质量得分和失真水平。对于每个编码子序列,基于缓冲区的编码应用140然后生成子序列编码点(图1中未示出)。如结合图4更详细地描述的,每个子序列编码点包括但不限于编码子序列、相关联的编码点、编码子序列的比特率、编码子序列的质量得分和编码子序列的失真水平。
对于每个子序列132(x),基于缓冲区的编码应用140基于与子序列132(x)相关联的子序列编码点来生成不同的凸包(convexhull)。以此方式,与给定子序列132(x)相关联的凸包包括与子序列132(x)相关联的任何数量的子序列编码点。通常,对于给定的子序列132,包含在相关凸包中的子序列编码点使不同失真级别的比特率最小化。
如结合图2和图7更详细地描述的,基于缓冲区的编码应用140以时间回放顺序迭代地处理每个凸包,以生成不同且关联的媒体编码点的全局凸包。仅出于说明性目的,“回放顺序”对应于端点设备回放子序列132—从子序列132(0)到子序列132(s)的顺序。
第i个全局凸包中的每个媒体编码点与媒体字幕的从第0个子序列到第i个子序列的字幕部分相关联。特别地,每个媒体编码点与不同的编码媒体序列相关联。每个编码媒体序列包括但不限于(i+1)个编码子序列,其中每个编码子序列包含在与子序列132(0)-132(i)相关联的凸包的一个不同凸包中。重要的是,包含在第i个全局凸包中的每个媒体编码点使受制于传输缓冲区约束170的不同总体失真级别的平均比特率最小化。
基于缓冲区的编码应用140基于与在回放顺序中最后出现的子序列132(s)相关联的全局凸包来确定优化的编码媒体序列180。与子序列132(s)相关联的全局凸包在本文中也被称为“最终”凸包。基于缓冲区的编码应用140将与最终全局凸包相关联的编码媒体序列的平均比特率进行比较,并且将优化的编码媒体序列180设置为等于具有最高平均比特率的编码媒体序列。
本领域技术人员将认识到,优化的编码媒体序列180具有比与最终全局凸包相关联的任何其他编码媒体序列更高的总体质量水平。因此,优化的媒体序列180是媒体字幕的一种编码版本,该编码版本符合传输缓冲区约束170,并且在端点设备上的媒体字幕回放期间优化总体视觉质量。在替代实施例中,基于缓冲区的编码应用140可以以任何技术上可行的方式基于最终全局凸包以及与任何数量和类型的媒体度量相关联的任何数量和类型的标准来选择优化的编码媒体序列180。
如本文所指,媒体度量可以是对应于编码视频内容、视频内容、音频内容和/或编码音频内容的一个或多个属性的任何测量。媒体度量的一些示例包括但不限于比特率、失真度量、音频质量度量、视觉质量度量等。视觉质量度量的实施例包括但不限于峰值信噪比(psnr)、线性视频多方法评估融合((vmaf)度量和谐波vmaf(vmafh),仅举几例。
如结合图2更详细地描述的,基于缓冲区的编码应用140可选地基于优化的编码媒体序列180和传输缓冲区约束170来计算优化的预缓冲时间182。通常,在流式传输期间,预缓冲时间指定端点设备在媒体字幕的流式传输开始之后在开始回放媒体字幕前等待的总时间。在预缓冲时间期间,传输缓冲区存储编码比特,因此,当端点设备开始回放媒体字幕时,传输缓冲区具有由预缓冲时间确定的初始占用率。
最后,基于缓冲区的编码应用140将优化的编码媒体序列180和可选的优化的预缓冲时间182传送到cdn190,用于分发到端点设备。在替代实施例中,基于缓冲区的编码应用140可以以任何技术上可行的方式使优化的预缓冲时间182、优化的编码媒体序列180和/或任何数量的编码子序列传送到端点设备。在相同或其他实施例中,与基于子序列的编码应用相关联的任何数量和类型的功能可以以任何技术上可行的方式在任何数量的计算实例110和/或任何数量的端点设备中实现或在任何数量的计算实例110和/或任何数量的端点设备上分布。
仅出于说明的目的,本文描述的技术在视频编码的上下文中被描述。然而,如本领域技术人员将认识到的,可以修改本文描述的技术,以优化音频编码而不是视频编码或除了视频编码之外还优化音频编码。例如,在一些实施例中,音轨可以被划分为“音频场景”。音频场景可以通过音频渲染硬件进行采样。采样的音频场景可以通过音频编码器进行编码,该音频编码器经由量化参数和/或比特率设置进行配置。编码音频场景的质量得分可以经由感知音频质量度量(例如音频质量感知评估(peaq)算法)来计算。值得注意的是,音频编码器、任何数量的关联配置参数、分辨率和/或速率控制值可以基于本文描述的任何技术以任何组合被优化,用于每个音频场景。
此外,尽管本文描述的技术是在媒体流传输的上下文中描述的,但是可以修改本文描述的技术以优化对任何类型的媒体消费的编码。例如,可以改变技术以优化对在线视频游戏、屏幕内容共享、双向视频会议、电子通信等的编码。
注意这里描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下改变。由基于子序列的编码子系统120、子序列分析器130、基于缓冲区的编码应用140、场景检测器124、编码应用162和内容递送网络190提供的功能的许多修改和变化对于本领域普通技术人员是显而易见的,而不脱离所描述实施方式的范围和精神。一般而言,本文概述的技术适用于以任何技术上可行的方式基于单独编码的子序列和任何数量和类型的传输缓冲区约束来生成编码媒体序列。
应当理解,本文所述的系统100是说明性的并且变化和修改是可能的。例如,由基于子序列的编码子系统120、子序列分析器130、基于缓冲区的编码应用140、场景检测器124、编码应用162和内容递送网络190提供的功能性可以被集成到或分布在任何数量的软件应用程序(包括一个)、硬件设备(例如,基于硬件的编码器)和系统100的任何数量的组件上。此外,可以根据需要修改图1中各个单元之间的连接拓扑。
图2是根据本发明的各种实施例的图1的基于缓冲区的编码应用140的更详细的图示。如图所示,基于缓冲区的编码应用140包括但不限于编码点列表210、子序列编码集220、凸包生成器230、凸包240、子序列迭代器250、全局凸包260和选择引擎290。子序列编码集220的数量等于子序列132的数量。类似地,凸包240的数量等于子序列132的数量。通常,子序列132(x)与子序列编码集220(x)和凸包240(x)相关联。
如图所示,编码点列表210包括任意数量的编码点212(0)-212(p)。如结合图3更详细地描述的,每个编码点212包括但不限于分辨率和速率控制值。在替代实施例中,每个编码点212可以以任何技术上可行的方式指定影响编码操作的任何数量和类型的参数。例如,在一些实施例中,每个编码点212可以指定与编码应用162相关联的“速度”配置参数的值。
在操作中,基于缓冲区的编码应用140基于子序列132(0)-132(s)和编码点列表210来生成子序列编码集220(0)-220(s)。子序列编码集220(0)-220(s)中的每个包括但不限于子序列编码点222(0)-222(p)。每个子序列编码集220中包含的子序列编码点222的数量等于编码点列表210中包含的编码点212的数量。如结合图4更详细地描述的,每个子序列编码点222(x)包括但不限于相关联的编码点212(x)、编码子序列、比特率、质量得分和失真水平.
对于子序列132(x)和编码点212(y)的每个组合,基于缓冲区的编码应用140生成对应的子序列编码点222(y),并将子序列编码点222(y)添加到子序列编码集220(x)。更具体地,基于缓冲区的编码应用140配置编码应用162,从而以编码点212(y)中包含的分辨率和速率控制值来编码子序列132(x)。然后,基于缓冲区的编码应用140计算编码子序列的比特率、编码子序列的质量得分和编码子序列的失真水平。结果,基于缓冲区的编码应用140产生(s+1)×(p+1)个不同的子序列编码点222。
在替代实施例中,每个子序列132(x)可以与不同的编码点列表210(x)相关联,并且编码点列表210(x)中的编码点212的数量可以不同于在任何其他编码点列表210中编码点212的数量。以互补方式,在子序列编码集220(x)中包含的子序列编码点222的数量可以不同于在任何其他子序列编码集220中包含的子序列编码点222的数量。
基于缓冲区的编码应用140可以以任何技术上可行的方式生成每个编码子序列,并确定相关联的比特率、相关联的质量得分和相关联的失真水平。例如,在一些实施例中,为了生成与子序列132(x)和编码点212(y)两者相关联的编码子序列,基于缓冲区的编码应用140首先执行采样操作,以生成采样子序列。更具体地,基于缓冲区的编码应用140基于在编码点212(y)中包含的分辨率对子序列132(x)进行采样,以生成采样子序列。随后,基于缓冲区的编码应用140使编码应用162使用在编码点212(y)中包含的速率控制值来对该采样子序列进行编码,以生成编码子序列。
在一些实施例中,为了确定编码子序列的质量得分,基于缓冲区的编码应用140对编码子序列进行解码,以生成解码子序列。然后,基于缓冲区的编码应用140将解码子序列重新采样(即,上采样或下采样)到目标分辨率,以生成重构子序列,该重构子序列与一类端点设备的显示特性相关。
在替代实施例中,基于缓冲区的编码应用140可以为任意数量的分辨率计算任意数量的质量得分。例如,某个视频可能以3840×2160的分辨率传送,但打算由大量1920×1080分辨率的显示器使用。另一类端点设备(例如膝上型计算机)预计将以1280×720的分辨率显示相同的视频。另一类端点设备,例如平板电脑或智能手机设备,预计将以960×540的分辨率显示相同的视频。当相应地考虑这些不同类别的端点设备之一时,基于缓冲区的编码应用140可以将解码子序列上采样到所有这些目标分辨率,以评估质量。
然后,基于缓冲区的编码应用140分析重构子序列,以生成质量度量(qm)的质量得分。例如,在一些实施例中,基于缓冲区的编码应用140实施vmaf(或谐波vmaf)算法,以基于相关联的重构子序列为每个编码子序列生成vmaf得分。尽管可以在不同的目标分辨率下计算多种视频质量指标,例如vmaf得分,但是应该清楚的是,在比较与不同分辨率相关的编码子序列之间的质量时,该应用需要在解码后使用相同的目标分辨率进行重新采样。例如,在一些实施例中,基于缓冲区的编码应用140将解码子序列重采样到1920×1080,以生成重构子序列。随后,基于缓冲区的编码应用140基于相关联的重构子序列来计算编码子序列的质量得分。
基于缓冲区的编码应用140可以以任何技术上可行的方式来生成比特率。例如,在一些实施例中,基于缓冲区的编码应用140可以将在编码子序列中包含的编码比特总数除以相关子序列132的长度。在相同或其他实施例中,基于缓冲区的编码应用140可以基于质量得分和任何技术上可行的技术来计算失真水平,用于将质量得分转换为失真水平。例如,基于缓冲区的编码应用140可以对质量得分求倒数,以确定失真水平。在另一实施例中,基于缓冲区的编码应用140可以从恒定值中减去质量得分,以确定失真水平。
对于每个子序列132(x),凸包生成器230基于子序列编码集220(x)生成凸包240(x)。每个凸包240(x)包括但不限于子序列编码集220(x)中包含的子序列编码点222,这些子序列编码点222使给定失真水平的比特率最小化。结合图5描述了凸包生成器230如何基于子序列编码集220(0)生成凸包240(0)的详细实施例。
子序列迭代器250按照媒体字幕的回放顺序依次处理凸包240。更具体地,对于从0开始并在s结束的索引i,子序列迭代器250(i)的实例处理与子序列132(i)相关联的凸包240(i)。如结合图7更详细地描述的,子序列迭代器250(i)基于全局凸包260(i-1)和凸包240(i)来生成全局凸包260(i)。全局凸包260(i)与子序列132(0)-132(i)相关联,并且包括但不限于任何数量的媒体编码点270。在全局凸包260(i)中包含的媒体编码点270的数量可以不同于任何其他全局凸包260中的媒体编码点270的数量。
如结合图6更详细地描述的,每个媒体编码点270包括但不限于子序列编码列表、编码媒体序列、平均比特率、总体失真水平、当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率。对于全局凸包260(i)中包含的每个媒体编码点270,子序列编码列表指定(i+1)个子序列编码点。更准确地说,子序列编码列表为子序列132(0)-132(i)中的每一个指定不同的子序列编码点。编码媒体序列包括但不限于子序列编码列表中指定的(i+1)个子序列编码点中包含的(i+1)个编码子序列。平均比特率和总体失真水平分别指定编码媒体序列的比特率和编码媒体序列的失真水平。
当根据传输缓冲区约束170将编码媒体序列流式传输到示例性端点设备时,当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率指定了示例性传输缓冲区的特性。,当前缓冲区占用率指定当编码媒体序列被解码以在示例性端点设备上回放时存储在示例性传输缓冲区中的比特数。最小缓冲区占用率和最大缓冲区占用率分别指定在将编码媒体序列流式传输到示例性端点设备期间存储在示例性传输缓冲区中的最小比特数和最大比特数。
尽管未示出,为了生成全局凸包260(0),基于缓冲区的编码应用140初始化子序列迭代器250(0)。更准确地说,基于缓冲区的编码应用140生成初始全局凸包260(-1),该初始全局凸包260(-1)包括单个初始化媒体编码点270。基于缓冲区的编码应用140将初始化媒体编码点270中包含的子序列编码列表设置为等于空集,并且将初始化媒体编码点270中包含的编码子序列设置为等于null(空)。基于缓冲区的编码应用140将初始化媒体编码点270中包含的当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率中的每一个均设置为等于缓冲区尺寸174。在替代实施例中,基于缓冲区的编码应用140可以以任何技术上可行的方式初始化子序列迭代器250(0)。例如,在一些实施例中,基于缓冲区的编码应用140可以基于指定的预缓冲时间来初始化子序列迭代器250(0)。
在操作中,为了生成全局凸包260(i),子序列迭代器250(i)将与全局凸包260(i-1)相关联的每个子序列编码列表与包含在凸包240(i)中的子序列编码点进行组合,以生成新的子序列编码列表。因此,如果全局凸包260(i-1)包括n个媒体编码点270,并且凸包240(i)包括m个子序列编码点,则子序列迭代器250(i)生成(n×m)个新的子序列编码列表。
对于每个新的子序列编码列表,子序列迭代器250(i)生成新的媒体编码点270。更准确地说,对于给定的新的子序列编码列表,子序列迭代器250(i)将在子序列编码列表中指定的子序列编码点中包含的不同编码子序列聚合,以生成编码媒体序列。子序列迭代器250(i)基于编码媒体序列来计算平均比特率和总体失真水平。子序列迭代器250(i)然后基于编码媒体序列和传输缓冲区约束170来计算当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率。随后,子序列迭代器250(i)生成新的媒体编码点270,该新的媒体编码点270包括新的子序列编码列表、相关联的编码媒体序列、平均比特率、总体失真水平、当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率。子序列迭代器250(i)将新的媒体编码点270添加到媒体编码集(图2中未示出)。
随后,子序列迭代器250(i)基于传输缓冲区约束170来对媒体编码集执行过滤操作,以生成兼容媒体编码集(图1中未示出)。作为过滤操作的一部分,子序列迭代器250(i)丢弃媒体编码集中包含的不符合传输缓冲区约束170的任何媒体编码点270。子序列迭代器250(i)然后丢弃兼容媒体编码集中包含的与平均比特率与总体视觉质量之间的次优权衡相关联的任何媒体编码点270,以生成全局凸包260(i)。
重要的是,对于媒体字幕中包括子序列132(0)-132(i)的部分,全局凸包260(i)中包含的每个媒体编码点270使受制于传输缓冲区约束170的不同总体失真水平的平均比特率最小化。此外,因为全局凸包260(i)通常包括比相关联的媒体编码集少得多的媒体编码点,因此减少了在每个后续子序列媒体编码集中包含的子序列编码点的数量。因此,优化了生成后续全局凸包260所需的时间。
例如,假设媒体编码集将包括100个媒体编码点270,并且子序列迭代器250(i)将基于传输缓冲区约束170丢弃媒体编码点270中的60个媒体编码点270。此外,假设子序列迭代器250(i)要确定40个剩余媒体编码点270中的30个剩余媒体编码点270与平均比特率与总体视觉质量之间的次优权衡相关联。所得全局凸包260(i)将包括10个媒体编码点270。随后,子序列迭代器250(i+1)将在全局凸包260(i)中包含的10个媒体编码点270与在凸包240(i+1)中包含的a个点进行组合,以生成将包括(10×a)个媒体编码点270的新的媒体编码集。
如图所示,选择引擎290基于全局凸包260(s)确定优化的编码媒体序列180。如前所述,全局凸包260(s)与所有子序列132(0)-132(s)相关联。为了确定优化的媒体序列180,选择引擎290比较全局凸包260(s)中包含的媒体编码点270的平均比特率,以确定具有最高平均比特率的优化的媒体编码点270。选择引擎290然后将优化的编码媒体序列180设置为等于优化的媒体编码点270中包含的编码媒体序列。
本领域技术人员将认识到,优化的编码媒体序列180比与全局凸包260(s)相关联的任何其他编码媒体序列具有更高的总体质量水平。因此,优化的媒体序列180是媒体字幕的一种编码版本,该编码版本符合传输缓冲区约束170,并且在端点设备上的媒体字幕回放期间优化总体视觉质量。在替代实施例中,选择引擎290可以以任何技术上可行的方式基于全局凸包260(s)以及与任何数量和类型的媒体度量相关联的任何数量和类型的标准来选择优化的编码媒体序列180。
在一些实施例中,子序列迭代器250不生成媒体编码点270中包含的编码媒体序列。对于每个媒体编码点270,子序列迭代器250基于相关联的子序列编码列表来确定相关联的编码媒体子序列的属性。特别地,子序列迭代器250基于子序列编码列表来计算平均比特率、总体失真水平、当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率。在选择优化的媒体编码点270之后,选择引擎290基于优化的媒体编码点270中包含的子序列编码列表来生成优化的编码媒体序列180。更准确地说,选择引擎290将优化媒体编码点270中包含的子序列编码列表中所指定的不同编码子序列进行聚合,以生成优化的编码媒体序列180。以这种方式,每个子序列编码列表均是“编码配方”,该“编码配方”指定如何生成相关联的编码媒体子序列。
在选择引擎290确定优化的编码媒体序列180之后,选择引擎290确定传输缓冲区约束170是否与可配置的预缓冲时间相关联。通常,预缓冲时间指定端点设备在开始回放媒体字幕前要存储的编码比特总数。选择引擎290可以以任何技术上可行的方式确定传输缓冲约束170是否与可配置的预缓冲时间相关联。
例如,在一些实施例中,如果约束类型176是crbvbv,则选择引擎290确定传输缓冲区约束170与可配置的预缓冲时间相关联。否则,选择引擎290确定传输缓冲约束170不与可配置的预缓冲时间相关联。在其他实施例中,选择引擎290基于经由图形用户接口(未示出)接收的用户输入来确定传输缓冲约束170是否与可配置的预缓冲时间相关联。
如果选择引擎290确定传输缓冲区约束170与可配置的预缓冲时间相关联,则选择引擎290基于优化的媒体编码点270来计算优化的预缓冲时间182。更准确地说,选择引擎290将初始缓冲区占用率设置为等于缓冲区尺寸174与优化的媒体编码点270中包含的最小缓冲区占用率之间的差值。选择引擎290然后将优化的预缓冲时间182设置为等于初始缓冲区占用率和传输速率172的商。在替代实施例中,基于缓冲区的编码应用140可以任何技术上可行的方式计算优化的预缓冲时间182和/或初始缓冲区占用率。选择引擎290然后将优化的预缓冲时间182联合优化编码媒体序列180传输到内容递送网络(cdn)190,以分发到端点设备。
不论传输缓冲区约束170是否与可配置的预缓冲时间相关联,选择引擎290将优化的编码媒体序列180传输到cdn190,以用于分发到端点设备。在各种实施例中,选择引擎290可以被配置为识别在优化的编码媒体序列180中包含的各个编码子序列中的每一个编码子序列。选择引擎290然后可以将识别的编码子序列传送到cdn190,以分发到端点设备。
在替代实施例中,选择引擎290可以以任何技术上可行的方式计算任何数量和类型的编码子序列、配置参数等,并将它们传输到cdn190或任何数量的端点设备。例如,在一些实施例中,选择引擎190可以向cdn190发送初始缓冲区占用率,而不是优化的预缓冲时间182。在其他实施例中,选择引擎290可以以任何技术上可行的方式将优化的编码媒体序列180和可选地优化的预缓冲时间182传输到任何数量的端点设备。例如,作为将优化的编码媒体序列180流式传输到端点设备的一部分,选择引擎290可以通过系统报头用信号通知预缓冲时间。
图3是根据本发明的各种实施例的图2的编码点列表210的更详细图示。如图所示,编码点列表210包括任意数量的编码点212(0)-212(p)。每个编码点212包括但不限于分辨率314和速率控制值316。速率控制值316可以是在编码期间指定比特率与失真水平或质量之间的平衡的任何参数的值。例如,在一些实施例中,速率控制值316是量化参数(qp)的值,该量化参数(qp)在编码视频内容时允许在比特率和失真水平方面的单调性能。“qp”越高,得到的比特率越低,这以较低质量为代价。
仅出于说明目的,用于编码点212(0)-212(3)、212(p-1)和212(p)的分辨率314和速率控制值316以斜体表示。如图所示,编码点212(0)包括640×360的分辨率314和速率控制值316qp=51。编码点212(1)包括960×540的分辨率314和速率控制值316qp=51。编码点212(2)包括1280×720的分辨率314和速率控制值316qp=51。编码点212(3)包括1920×1080的分辨率314和速率控制值316qp=51。编码点212(p-1)包括1280×720的分辨率314和速率控制值316qp=0。编码点212(p)包括1920×1080的分辨率314和速率控制值316qp=0。
如所描绘的示例性编码点212所示,分辨率314和速率控制值316的任何组合在任何两个编码点212之间可能不同。通常,基于缓冲区的编码应用140可以以任何技术上可行的方式获取或生成编码列表210。例如,在一些实施例中,基于缓冲区的编码应用140可以基于八个分辨率314和编码应用162允许的所有速率控制值316的排列来生成编码列表210。有利地,由于编码点212的种类繁多,因此基于缓冲区的编码应用140为每个子序列132生成种类繁多的不同编码子序列。
图4是根据本发明的各种实施例的图2的子序列编码集中一个子序列编码集的更详细图示。子序列编码集220(0)与子序列132(0)相关联。如图所示,子序列编码集220(0)包括但不限于子序列编码点222(0)-222(p)。一般而言,子序列编码集220中包含的子序列编码点222的数量等于编码点列表210中包含的编码点212的数量。此外,子序列编码点222(x)与编码点212(x)相关联。
每个子序列编码点212包括但不限于相关联的编码点212、编码子序列430、编码子序列430的比特率432、编码子序列430的质量得分434和编码子序列430的失真水平436。如本文先前结合图2所描述的,基于缓冲区的编码应用140可以基于相关联的编码点212和相关联的子序列132以任何技术上可行的方式生成编码子序列430。随后,基于缓冲区的编码应用140可以基于编码子序列430以任何技术上可行的方式确定比特率432、质量得分434和失真水平436。质量得分434可以是任何质量度量的值。
仅出于说明的目的,子序列编码点222(0)中包含的编码点212(0)和子序列编码点222(p)中包含的编码点212(p)的示例值以斜体表示。编码点212(0)包括但不限于640×360的分辨率314和速率控制值316qp=51。因此,基于缓冲区的编码应用140配置编码应用162,从而以640×360的分辨率314和速率控制值316qp=51编码子序列132(0),以生成编码子序列430(0)。相比之下,编码点212(p)包括但不限于1920×1080的分辨率314和速率控制值316qp=0。因此,基于缓冲区的编码应用140配置编码应用162,从而以1920×1080的分辨率314和速率控制值316qp=0编码子序列132(0),以生成编码子序列430(p)。
图5图示了根据本发明的各种实施例的由图2的凸包生成器230生成的示例性凸包240(0)。特别地,凸包生成器230基于子序列编码集220(0)来生成凸包240(0)。如图所示,曲线图500包括但不限于比特率轴510和失真轴520。
在操作中,对于在子序列编码集220(0)中包含的每个子序列编码点222,凸包生成器230在曲线图500中生成对应的绘制的子序列编码点222。凸包生成器230通过沿着比特率轴510定位比特率432并且沿着失真轴520定位失真水平436来绘制给定的子序列编码点222。凸包生成器230然后评估绘制的子序列编码点222,以确定凸包240(0)。
更具体地,凸包生成器230识别形成边界的绘制的子序列编码点222,该边界中所有绘制的子序列编码点222位于在该边界的一侧(在这种情况下,边界的右侧),并且还使得用直线连接任何两个连续所识别的绘制的子序列编码点222将所有剩余的绘制的子序列编码点222留在同一侧。凸包240(0)包括一组所识别的子序列编码点222。
仅出于解释的目的,在凸包240(0)中包含的子序列编码点222在曲线图500中被描绘为叉,而其余的子序列编码点222在曲线图500中被描绘为实心圆。特别地,子序列编码点222(p)包含在凸包240(0)中,而子序列编码点222(0)不包含在凸包240(0)中。
本领域技术人员将理解,用于生成凸包的许多技术在数学领域中是众所周知的,并且可以实施所有这些技术来生成凸包240。在一个实施例中,凸包生成器230应用机器学习技术来基于相关子序列132和/或源媒体序列122的各种参数评估在凸包240中包含的子序列编码点222。以这种方式,可以简化和/或完全避免目前为止讨论的一些计算。
组合不同的编码子序列
图6是根据本发明的各种实施例的图2的媒体编码点270中的一个媒体编码点的更详细图示;仅出于说明目的,图6中描绘的媒体编码点270(k)被包含在与子序列132(0)-132(i)相关联的全局凸包260(i)中。如图所示,媒体编码点270(k)包括但不限于子序列编码列表610、编码媒体序列630、平均比特率632、整体失真水平636、当前缓冲区占用率650、最小缓冲区占用率652和最大缓冲区占用率654。
子序列编码列表610包括但不限于编码选择620(0)-620(i),其中编码选择620的数量等于与全局凸包260(i)相关联的子序列132的数量。更具体地,子序列编码列表610包括不同编码选择620(x),该不同编码选择620(x)用于与全局凸包260(i)相关联的每个子序列132(x)。每个编码选择620指定不同的子序列编码点222。一般而言,编码选择620(x)指定在与子序列132(x)相关联的子序列编码集220(x)中所包含的子序列编码点222中的一个子序列编码点222。
仅出于说明的目的,编码选择620(0)、620(1)和620(i)的示例值以斜体表示。编码选择620(0)指定子序列编码集220(0)中的子序列编码点222(5)。编码选择620(1)指定子序列编码集220(1)中的子序列编码点222(0)。编码选择620(i)指定子序列编码集220(i)中的子序列编码点222(p)。
编码媒体序列630包括但不限于子序列编码列表610中指定的(i+1)个子序列编码点222中所包含的(i+1)个编码子序列430。平均比特率632和总体失真水平636分别指定编码媒体序列630的比特率和编码媒体序列630的失真水平。子序列迭代器250(i)和/或基于缓冲区的编码应用140可以任何技术上可行的方式确定编码媒体序列630、平均比特率632和总体失真水平636。
如结合图2所描述的,当前缓冲区占用率650、最小缓冲区占用率652和最大缓冲区占用率654指定尺寸等于缓冲区尺寸174的示例性传输缓冲区的特征。更准确地说,当前缓冲区占用率650指定当编码媒体序列630被解码以在示例性端点设备上回放时存储在示例性传输缓冲区中的比特数。最小缓冲区占用率652指定在将编码媒体序列630流式传输到示例性端点设备期间要存储在示例性传输缓冲区中的最小比特数。最大缓冲区占用率654指定在将编码媒体序列630流式传输到示例端点设备期间存储在示例传输缓冲区中的最大比特数。
图7是根据本发明的各种实施例的图2的子序列迭代器250(i)的更详细的图示。在操作中,子序列迭代器250(i)基于全局凸包260(i-1)、凸包240(i)和传输缓冲区约束170来生成全局凸包260(i)。仅出于说明目的,全局凸包260(i-1)包括但不限于v个媒体编码点270。如结合图6所描述的,每个媒体编码点270包括不同的子序列编码列表610。因此,全局凸包260(i-1)与v个子序列编码列表610相关联。凸包240(i)包括但不限于a个子序列编码点222。如图所示,子序列迭代器250(i)包括但不限于组合引擎710、过滤引擎730和全局凸包生成器750。
组合引擎710基于全局凸包260(i-1)、凸包240(i)和传输缓冲区约束170来生成媒体编码集720。首先,组合引擎710将与全局凸包260(i-1)相关联的v个子序列编码列表610中的每一个与在凸包240(i)中包含的a个子序列编码点222中的每一个进行组合,以生成(a×v)个新的子序列编码列表610。为了将子序列编码列表610(x)与子序列编码点222(y)组合,组合引擎710将子序列编码点222(y)添加到子序列编码列表610(x),以生成新的子序列编码列表610(z)。值得注意的是,与全局凸包260(i-1)相关联的每个子序列编码列表610与子序列132(0)-132(i-1)相关联,凸包240(i)中包含的每个子序列编码点222与子序列132(i)相关联。因此,每个新的子序列编码列表610与子序列132(0)-132(i+1)相关联。
对于每个新的子序列编码列表610,子序列迭代器250(i)基于子序列编码列表610来生成新的媒体编码点270,然后将新的媒体编码点270添加到媒体编码集720。更准确地说,对于新的子序列编码列表610(z),子序列迭代器250(i)将在子序列编码列表610(z)中指定的子序列编码点222中所包含的不同编码子序列430进行聚合,以生成编码媒体序列630(z)。随后,子序列迭代器250(i)基于编码媒体序列630(z)来计算平均比特率632(z)和总体失真水平636(z)。子序列迭代器250(i)可以任何技术上可行的方式计算平均比特率632(z)和总体失真水平636(z)。
例如,在一些实施例中,子序列迭代器250(i)通过相关联的持续时间对在编码媒体序列630(z)中包含的每个编码子序列430的比特率432进行加权重,以生成加权比特率。子序列迭代器250(i)对加权比特率求和,然后将所得加权和除以编码媒体序列的总持续时间630(z),以计算平均比特率632(z)。子序列迭代器250(i)以类似方式计算总体失真水平636(z)。
在替代实施例中,子序列迭代器250(i)基于子序列编码列表610(x)和从中导出子序列编码列表610(z)的子序列编码点222(y)来计算平均比特率632(z)。更准确地说,子序列迭代器250(i)通过编码媒体序列630(x)的持续时间来对与子序列编码列表610(x)相关联的平均比特率632(x)加权重,以生成加权媒体比特率。类似地,子序列迭代器250(i)通过编码子序列430(y)的持续时间来对在子序列编码点222(y)中包含的比特率432进行加权冲,以生成加权子序列比特率。子序列迭代器250(i)将加权媒体比特率和加权子序列比特率相加,然后将所得加权和除以编码媒体序列的总持续时间630(z),以计算平均比特率632(x)。子序列迭代器250(i)以类似方式计算总体失真水平636(z)。
子序列迭代器250(i)基于编码媒体序列630(z)和传输缓冲区约束170来计算当前缓冲区占用率650(z)、最小缓冲区占用率652(z)和最大缓冲区占用率654(z)。当前缓冲区占用率650(z)指定当编码媒体序列630(z)被解码以在示例性端点设备上回放时存储在示例性传输缓冲区中的比特数。最小缓冲区占用率652(z)和最大缓冲区占用率654(z)分别指定在根据传输缓冲区约束170将编码媒体序列630(z)流式传输到示例性端点设备期间存储在示例性传输缓冲区中的最小比特数和最大比特数。子序列迭代器250(i)可以以与传输缓冲区约束170一致的任何技术上可行的方式计算当前缓冲区占用率650(z)、最小缓冲区占用率652(z)和最大缓冲区占用率654(z)。
例如,在一些实施例中,子序列迭代器250(i)首先基于子序列编码列表610(x)和从中导出新的子序列编码列表610(z)的子序列编码点222(y)来计算当前缓冲区占用率650(z)。更准确地说,子序列迭代器250(i)将排出的比特数设置为等于在子序列编码点222(y)中包含的编码子序列430(y)中的编码比特数。子序列迭代器250(i)还将重新填充的比特数设置为等于传输速率172与编码子序列430(y)的回放持续时间的乘积。子序列迭代器250(i)然后从重新填充的比特数中减去排出的比特数,以确定子序列差量。
子序列迭代器250(i)将潜在缓冲区占用率设置为等于子序列差量和与子序列编码列表610(x)相关联的当前缓冲区占用率650(x)之和。如果约束类型176是cbrvbv,则子序列迭代器250(i)将当前缓冲区占用率650(z)设置为等于潜在缓冲区占用率。然而,如果约束类型176是vbrvbv,则子序列迭代器250(i)将当前缓冲区占用率650(z)设置为等于缓冲区尺寸174和潜在缓冲区占用率中的最小值。
随后,子序列迭代器250(i)将最小缓冲区占用率652(z)设置为等于当前缓冲区占用率650(z)和与子序列编码列表610(x)相关联的最小缓冲区占用率652(x)中的最小值。在互补方式中,子序列迭代器250(i)将最大缓冲区占用率654(z)设置为等于当前缓冲区占用率650(z)和与子序列编码列表610(x)相关联的最大缓冲区占用率654(x)的最大值。
在替代实施例中,子序列迭代器250可以以任何技术上可行的方式并且以任何粒度级别计算当前缓冲区占用率650、最小缓冲区占用率652和最大缓冲区占用率654。例如,在一些实施例中,子序列迭代器250(i)基于以下连续时间函数(1)以帧级粒度计算当前缓冲区占用率650:
在函数(1)中,o(t)为t时刻的缓冲区占用率,o0为0时刻的初始缓冲区占用率,t为时间;r是平均帧率,δt是连续显示时间之间的时间间隔(即帧率的倒数),si是第i帧的压缩帧尺寸。
如图所示,过滤引擎730基于媒体编码集720和传输缓冲区约束170来生成兼容媒体编码集740。更准确地说,过滤引擎730将兼容媒体编码集740初始化为空集。随后,对于媒体编码集720中包含的每个媒体编码点270(z),过滤引擎730确定相关联的编码媒体序列630(z)是否与传输缓冲区约束170兼容。如果过滤引擎730确定编码媒体序列630(z)与传输缓冲区约束170兼容,则过滤引擎730将媒体编码点270(z)添加到兼容媒体编码集740。相比之下,如果过滤引擎730确定编码媒体序列630(z)与传输缓冲区约束170不兼容,则过滤引擎730不将媒体编码点270(z)添加到兼容媒体编码集740。
过滤引擎730可以以任何技术上可行的方式确定编码媒体序列630(z)是否与传输缓冲区约束170兼容。例如,在一些实施例中,过滤引擎730计算最大缓冲区占用率654(z)和最小缓冲区占用率652(z)之间的缓冲区差。如果缓冲区差不超过缓冲区尺寸174,则过滤引擎730确定编码媒体序列630(z)与传输缓冲区约束170兼容。否则,过滤引擎确定编码媒体序列630(z)与传输缓冲区约束170不兼容。
全局凸包生成器750遍历兼容媒体编码集740中包含的媒体编码点270执行凸包操作,以生成全局凸包260(i)。一般而言,全局凸包260(i)中包含的每个媒体编码点270使不同总体失真水平636的平均比特率632最小化。全局凸包生成器750可以以任何技术上可行的方式执行任何数量和类型的凸包操作,以生成全局凸包260(i)。本领域技术人员将理解,用于生成凸包的许多技术在数学领域中是众所周知的,并且可以实施所有此类技术来生成全局凸包260(i)。
例如,在一些实施例中,对于在兼容媒体编码集740中包含的每个媒体编码点270,全局凸包生成器750在曲线图(未示出)中生成对应的绘制的媒体编码点270。全局凸包生成器750通过沿着比特率轴510定位平均比特率632并沿着失真轴520定位总体失真水平636来绘制给定媒体编码点270。全局凸包生成器750然后评估绘制的媒体编码点270,以确定全局凸包260(i)。
更具体地,全局凸包生成器750识别形成边界的绘制的媒体编码点270,在该边界中所有绘制的媒体编码点270位于边界的一侧,并且还使得用直线连接任何两个连续的所识别的绘制的媒体编码点270将所有剩余的绘制的媒体编码点270留在同一侧。值得注意的是,如果多个绘制的媒体编码点270相对于曲线图在彼此相对较小的距离内,则全局凸包生成器750选择具有最高当前缓冲区占用率650的媒体编码点270。凸包260(i)包括一组所识别的媒体编码点270。
图8图示了根据本发明的各种实施例的由图2的基于缓冲区的编码应用140生成的示例性全局凸包260(s)和示例性优化的编码媒体序列180。更具体地,子序列迭代器250(s)生成媒体编码点270的全局凸包260(s),其中每个媒体编码点与传输缓冲区约束170兼容,并且使不同总体失真水平636的平均比特率632最小化。出于解释的目的,图8描绘了作为包括但不限于比特率轴510和失真轴520的曲线图900的一部分而绘制的媒体编码点270。
如先前结合图2所述,选择引擎290基于与所有子序列132(0)-132(s)相关联的全局凸包260(s)来确定优化的编码媒体序列180。更具体地,选择引擎290对全局凸包260(s)中包含的媒体编码点270的平均比特率632进行比较,并且确定优化的媒体编码点270(w)具有最高的平均比特率632。选择引擎290然后将优化的编码媒体序列180设置为等于媒体编码点270(w)中包含的编码媒体序列630(w)。
本领域技术人员将认识到,优化的编码媒体序列180比与全局凸包260(s)相关联的任何其他编码媒体序列630具有更高的总体质量水平。因此,优化的媒体序列180是媒体字幕的一种编码版本,该编码版本符合传输缓冲区约束170,并且在端点设备上的媒体字幕回放期间优化总体视觉质量。在替代实施例中,选择引擎290可以以任何技术上可行的方式基于全局凸包260(s)以及与任何数量和类型的媒体度量相关联的任何数量和类型的标准来选择优化的编码媒体序列180。
如图所示,优化的编码媒体序列180包括但不限于以qp=40编码的子序列132(0)的960×540版本,接着是以qp=11编码的子序列132(1)的640×360版本,接着是以qp=47编码的子序列132(2)的1280×720版本,接着是以qp=26编码的子序列132(3)的960×540版本,并以qp=2编码的子序列132(4)的640×360版本结束。有利地,如图8所示,分辨率314和速率控制值316中的每一个可以随着优化的编码媒体序列180中包含的子序列132而变化。
仅出于说明的目的,与示例性全局凸包260(s)相关联的约束类型176是crbvbv。因此,在选择引擎290确定优化的编码媒体序列180之后,选择引擎290计算优化的预缓冲时间182。如图所示,选择引擎290将初始缓冲区占用率设置为等于缓冲区尺寸174与媒体编码点270(w)中包含的最小缓冲区占用率652(w)之间的差值。选择引擎290然后将优化的预缓冲时间182设置为等于初始缓冲区占用率和传输速率172的商。在替代实施例中,选择引擎190可以以任何技术上可行的方式计算优化的预缓冲时间182和/或初始缓冲区占用率。
图9a-图9b阐述了根据本发明的各种实施例的用于编码源媒体字幕的方法步骤的流程图。尽管参照图1-8的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任何顺序实施方法步骤的任何系统均落入本发明的范围内。
如图所示,方法900开始于步骤902,其中子序列分析器130将源媒体序列122划分为子序列132。在步骤904,基于缓冲区的编码应用140遍历编码点列表210中包含的每个编码点212对每个子序列132进行编码,以生成编码子序列430。在替代实施例中,每个子序列132(x)可以与不同的编码点列表210(x)相关联。为了生成与特定子序列132(x)和特定编码点212(y)相关联的编码子序列430,基于缓冲区的编码应用140以相关联的分辨率314和相关联的速率控制值316编码所选子序列132。
在步骤906,对于每个编码子序列430,基于缓冲区的编码应用140计算比特率432、质量得分434和失真水平436。作为步骤906的一部分,基于缓冲区的编码应用140生成新的子序列编码点222,该新的子序列编码点222包括但不限于编码点212、编码子序列430、比特率432、质量得分434和失真水平436.
在步骤908,对于每个子序列132(x),凸包生成器230基于相关联的子序列编码点222来生成不同的凸包240(x)。值得注意的是,分辨率314和速率控制值316可以在在凸包240(x)中所包含的子序列编码点222之间变化。在步骤910,基于缓冲区的编码应用140设置先前的全局凸包260以包括单个初始化媒体编码点270(-1),并选择凸包240(0)。初始化媒体编码点270(-1)包括但不限于空子序列编码列表610、null编码媒体序列630、缓冲区尺寸174的当前缓冲区占用率650、缓冲区尺寸174的最小缓冲区占用率652和缓冲区尺寸174的最大缓冲区占用率654。
在步骤912,组合引擎710基于先前的全局凸包260和选择的凸包240来生成媒体编码集720。首先,组合引擎710将当前媒体编码集720初始化为空集。随后,对于在先前全局凸包260中包含的每个媒体编码点270(x),组合引擎710将p个新媒体编码点270添加到媒体编码集720,其中p是选定的凸包240中包含的子序列编码点222的总数。
为了生成与子序列编码点222(y)和媒体编码点270(x)两者相关联的新媒体编码点270,组合引擎710将子序列编码点222(y)添加到在媒体编码点270(x)中包含的子序列编码列表610(x),以生成新子序列编码列表610。新子序列编码列表610包含在新媒体编码点1370中。组合引擎710然后基于新子序列编码列表610来生成在媒体编码点270中包含的新编码媒体序列630。最后,组合引擎710基于新编码媒体630和传输缓冲区约束170来计算在新媒体编码点270中包含的平均比特率632、总失真水平636、当前缓冲区占用率650、最小缓冲区占用率652和最大缓冲区占用率654。
在步骤914,过滤引擎730基于传输缓冲区约束170来对媒体编码集720执行过滤操作,以生成兼容媒体编码集740。更准确地说,过滤引擎730去除媒体编码集740中包含的媒体编码点270(对于这些媒体编码点,最大缓冲区占用率654与最小缓冲区占用率652之间的差大于缓冲区尺寸174)。在步骤916,全局凸包生成器750基于兼容媒体编码集740来生成当前全局凸包260。
在步骤918,子序列迭代器250确定所选择的凸包240是否是最终的凸包240(s)并且因此与源媒体序列122中包含的最终子序列132(s)相关联。如果在步骤918,子序列迭代器250确定所选择的凸包240不是最终的凸包240(s),则方法900进行到步骤920。在步骤920,子序列迭代器250选择下一个凸包240,并且将先前的全局凸包260设置为等于当前的全局凸包260。方法900然后返回到步骤912,其中子序列迭代器250基于先前的全局凸包260和选择的凸包240来生成新的当前全局凸包260。
然而,如果在步骤918,子序列迭代器250确定所选择的凸包240是最终的凸包240(s),则方法900直接进行到步骤922。在步骤922,选择引擎290选择在当前全局凸包260中包含的媒体编码点270中具有最高平均比特率632的媒体编码点270。在步骤924,选择引擎290将优化的编码媒体序列180设置为等于在所选媒体编码点270中包含的编码媒体序列630。
在步骤926,选择引擎290确定传输缓冲约束170是否与可配置的预缓冲时间相关联。如果在步骤926,选择引擎290确定传输缓冲约束170不与可配置的预缓冲时间相关联,则方法900进行到步骤928。在步骤928,选择引擎290将优化的编码媒体序列180传输到内容递送网络190,用于流式传输到端点设备。然后方法900终止。
然而,如果在步骤926,选择引擎290确定传输缓冲约束170与可配置的预缓冲时间相关联,则方法900直接进行到步骤930。在步骤930,选择引擎290基于选择的媒体编码点270和传输缓冲区约束170来计算优化的预缓冲时间182。在步骤932,选择引擎290将优化的编码媒体序列180和优化的预缓冲时间182传输到内容递送网络190,以流式传输到端点设备。然后方法900终止。
总之,在此公开的技术能够对源媒体序列进行高效和最佳编码,以生成与传输缓冲区约束兼容的优化的编码媒体序列。基于子序列的编码子系统包括但不限于子序列分析器和基于缓冲区的编码应用。最初,子序列分析器将源媒体序列划分为多个子序列。对于每个子序列,基于缓冲区的编码子系统根据编码列表来生成多个编码子序列。编码列表包括但不限于任意数量的编码点,其中每个编码点指定分辨率和速率控制值的不同组合。
对于每个编码子序列,基于缓冲区的编码应用生成不同的子序列编码点。每个子序列编码点包括但不限于关联的编码子序列、关联的编码点、编码子序列的比特率、编码子序列的质量得分和编码子序列的失真水平。随后,对于每个子序列,凸包生成器生成凸包,该凸包包括与该子序列相关联的子序列编码点的子集。通常,对于给定的子序列,在相关凸包中包含的子序列编码点使不同失真级别的比特率最小化。
子序列迭代器然后以时间回放顺序迭代地处理子序列,以针对每个子序列生成媒体编码点的不同全局凸包。对于第n个子序列,子序列迭代器基于传输缓冲区约束、媒体编码点的第(n-1)个全局凸包和与第n个子序列关联的子序列编码点的第n个凸包来计算媒体编码点的第n个全局凸包。传输缓冲区约束指定但不限于传输速率、缓冲区尺寸和约束类型。每个媒体编码点包括但不限于子序列编码列表、编码媒体序列、平均比特率、总体失真水平、当前缓冲区占用率、最小缓冲区占用率和最大缓冲区占用率。
第n个全局凸包中的每个媒体编码点均与媒体字幕的一部分相关联,该部分从第0个子序列到第n个子序列。为了生成第n个全局凸包,子序列迭代器将第(n-1)个全局凸包中包含的v个媒体编码点中的每个媒体编码点与第n个凸包中包含的a个子序列编码点中的每个子序列编码点进行组合,以生成包含(v×a)个媒体编码点的媒体编码集。子序列迭代器然后基于传输缓冲区约束、最小缓冲区占用率和最大缓冲区占用率来对媒体编码集执行过滤操作,以生成兼容媒体编码集。最后,子序列迭代器基于平均比特率和总体失真水平来生成第n个全局凸包,该第n个全局凸包是兼容媒体编码集的子集。通常,对于媒体字幕的从第0个子序列到第n个子序列的部分,在第n个全局凸包中包含的媒体编码点使不同的总体失真级别的平均比特率最小化。
在生成跨越整个媒体字幕的最终全局凸包后,在基于缓冲区的编码应用中包含的选择引擎选择在最终全局凸包中包含的媒体编码点中的一个媒体编码点作为优化的媒体编码。优化的媒体编码点的平均比特率高于包含在最终全局凸包中包含的所有其他媒体编码点的平均比特率。选择引擎然后将优化的编码媒体序列设置为等于在优化的媒体编码点中包含的编码媒体序列。如果约束类型与可配置的预缓冲时间相关联,则选择引擎基于缓冲区尺寸和优化的媒体编码点中包含的最小缓冲区占用率来计算优化的预缓冲时间。最后,选择引擎将优化的编码媒体序列和可选地优化的预缓冲时间传输到内容递送网络,用于分发到端点设备。
所公开的技术的至少一个优点和技术进步是基于多组单独编码的子序列和传输缓冲区约束而以回放顺序递增地生成编码媒体序列。聚合使用不同编码点编码的子序列以生成编码媒体序列减少了通常与现有技术单片编码技术相关联的编码低效率。此外,从全局凸包中排除与传输缓冲区约束不兼容的编码媒体序列有效地确保优化的编码媒体序列与传输缓冲区约束兼容。结果,优化的编码媒体序列的总体视觉质量得到提高,而不会增加在端点设备上回放媒体字幕期间由于传输缓冲区限制而导致回放中断的可能性。这些技术优势提供了优于现有技术的一项或多项技术进步。
1.在一些实施例中,一种计算机实现的方法包括:基于与媒体字幕相关联的第一子序列和第一组编码点来生成子序列编码点的第一凸包;基于传输缓冲区约束、第一凸包和媒体编码点的第二全局凸包来生成媒体编码点的第一全局凸包,该媒体编码点的第二全局凸与媒体字幕的一部分相关联,该部分按照媒体字幕的回放顺序出现在第一子序列前;基于媒体度量,选择在第一全局凸包中包含的第一媒体编码点;以及基于第一媒体编码点来确定第一编码媒体序列,其中第一编码媒体序列随后在媒体字幕的回放期间流式传输到端点设备。
2.根据条款1所述的计算机实现的方法,其中传输缓冲区约束包括恒定比特率视频缓冲区验证器(vbv)约束或可变比特率vbv约束。
3.根据条款1或2所述的计算机实现的方法,进一步包括:基于与第一编码媒体序列相关联的最小缓冲区占用率和与传输缓冲区约束相关联的缓冲区尺寸来计算预缓冲时间。
4.根据条款1-3中任一项所述的计算机实现的方法,其中生成第一全局凸包包括:对于在第二全局凸包中包含的媒体编码点和在第一凸包中包含的子序列编码点的每个组合,生成在一组媒体编码点中包含的不同的媒体编码点;基于传输缓冲区约束对该组媒体编码点执行一次或多次过滤操作,以生成一组兼容媒体编码点;以及在该组兼容媒体编码点上执行一次或多次凸包操作,以生成第一全局凸包。
5.根据条款1-4中任一项所述的计算机实现的方法,其中媒体度量包括比特率,选择第一媒体编码点包括:确定与第一媒体编码点相关联的第一平均比特率大于与在第一全局凸包中包含的所有其他媒体编码点相关联的平均比特率。
6.根据条款1-5中的任一项所述的计算机实现的方法,其中生成第一全局凸包包括:基于在第二全局凸包中包含的第二媒体编码点和在第一全局凸包中包含的第一子序列编码点来生成第二编码媒体序列;基于第二编码媒体序列和与传输缓冲区约束相关联的传输速率来计算最小缓冲区占用率和最大缓冲区占用率;确定最大缓冲区占用率与最小缓冲区占用率之间的差不超过与传输缓冲区约束相关联的缓冲区尺寸;以及响应于确定该差不超过缓冲区尺寸,将与第二编码媒体序列相关联的第二媒体编码点添加到第一全局凸包。
7.根据条款1-6中任一项所述的计算机实现的方法,其中生成第一凸包包括:基于第一组编码点和第一子序列生成第一组子序列编码点;确定包括第一组子序列编码点的区域;识别与该区域相关联的边界,其中在该边界的第一侧没有第一组子序列编码点中包含的子序列编码点;以及丢弃第一组子序列编码点中包含的不沿边界定位的所有子序列编码点。
8.根据条款1-7中任一项所述的计算机实现的方法,其中第一组编码点中包含的每个编码点指定分辨率和速率控制值的不同组合。
9.根据条款1-8中的任一项所述的计算机实现的方法,还包括:基于多个场景变化来将与媒体字幕相关联的源媒体序列划分为多个子序列,其中多个子序列包括第一子序列。
10.根据条款1-9中任一项所述的计算机实现的方法,其中媒体字幕包括视频内容和音频内容中的至少一者。
11.在一些实施例中,一种或多种非暂态计算机可读介质包括指令,所述指令在由一个或多个处理器执行时,使该一个或多个处理器执行以下步骤:遍历第一组编码点对与媒体字幕相关联的第一子序列进行编码,以生成第一组子序列编码点,其中每个子序列编码点与不同的编码子序列相关联;遍历第一组序列编码点执行一次或多次凸包操作,以基于至少两个媒体度量来计算子序列编码点的第一凸包;基于传输缓冲区约束、第一凸包和媒体编码点的第二全局凸包来生成媒体编码点的第一全局凸包,该媒体编码点的第二全局凸包与和媒体字幕相关联的一个或多个子序列相关联,该字幕该一个或多个子序列按照媒体字幕的第一回放顺序出现在第一子序列前;基于第一媒体度量来选择在第一全局凸包中包含的第一媒体编码点;以及基于第一媒体编码点来确定第一编码媒体序列,其中第一编码媒体序列随后在媒体字幕的回放期间流式传输到端点设备。
12.根据条款11所述的一种或多种非暂态计算机可读介质,其中传输缓冲区约束指定传输速率和缓冲区尺寸中的至少一者。
13.根据条款11或12所述的一种或多种非暂态计算机可读介质,进一步包括:基于与第一编码媒体序列相关联的最小缓冲区占用率和与传输缓冲区约束相关联的缓冲区尺寸来计算预缓冲时间。
14.根据条款11-13中任一项所述的一种或多种非暂态计算机可读介质,其中生成第一全局凸包包括:基于在第二全局凸包中包含的第三媒体编码点和第一凸包中包含的第一子序列编码点来生成第二媒体编码点;基于第三媒体编码点和第一凸包中包含的第二子序列编码点来生成第四媒体编码点;基于传输缓冲区约束来将第二媒体编码点而不是第四媒体编码点添加到一组兼容编码点中;并且遍历该组兼容媒体编码点执行一次或多次凸包操作,以生成第一全局凸包。
15.根据条款11-14中任一项所述的一种或多种非暂态计算机可读介质,其中第一媒体度量包括比特率,并且选择第一媒体编码点包括:确定与第一媒体编码点相关联的第一平均比特率大于与第一全局凸包中包含的所有其他媒体编码点相关联的平均比特率。
16.根据条款11-15中任一项所述的一种或多种非暂态计算机可读介质,其中生成第一全局凸包包括:基于第二全局凸包中包含的第二媒体编码点和在第一凸包中包含的第一子序列编码点来生成第二编码媒体序列;基于第二编码媒体序列和与传输缓冲区约束相关联的传输速率来计算最小缓冲区占用率和最大缓冲区占用率;确定最大缓冲区占用率与最小缓冲区占用率之间的差不超过与传输缓冲区约束相关联的缓冲区尺寸;并且响应于确定差不超过缓冲区尺寸,将与第二编码媒体序列相关联的第二媒体编码点添加到第一全局凸包。
17.根据条款11-16中任一项所述的一种或多种非暂态计算机可读介质,其中生成第一全局凸包包括:基于传输缓冲区约束、第一凸包和第二全局凸包来生成一组兼容媒体编码点;确定包括该组兼容媒体编码点的区域;识别与该区域相关联的边界,其中在该边界的第一侧没有该组兼容媒体编码点中包含的兼容媒体编码点;以及丢弃该组兼容媒体编码点中包含的不沿该边界定位的所有兼容媒体编码点。
18.根据条款11-17中任一项所述的一种或多种非暂态计算机可读介质,其中第一编码媒体序列包括第一编码子序列和第二编码子序列,并且其中第一编码子序列与在第一组编码点中包含的第一编码点相关联,第二编码子序列与第一组编码点中包含的第二编码点相关联,第二编码点不等于第一编码点。
19.根据条款11-18中任一项所述的一种或多种非暂态计算机可读介质,其中与媒体字幕相关联的第一子序列包括场景序列。
20.在一些实施例中,一种系统,包括:一个或多个存储指令的存储器以及一个或多个耦合到一个或多个存储器的处理器,在该处理器执行指令时,该处理器被配置为:基于多个场景变化来将与媒体字幕相关联的源媒体序列划分为多个子序列;基于第一组编码点和在多个子序列中包含的第一子序列来生成子序列编码点的第一凸包,其中每个子序列编码点与不同的编码子序列相关联;基于传输缓冲区约束、第一凸包和媒体编码点的第二全局凸包来生成媒体编码点的第一全局凸包,该媒体编码点的第二全局凸包与媒体字幕的一部分相关联,该部分按照媒体字幕的回放顺序出现在第一子序列前;基于媒体度量来选择在第一全局凸包中包含的第一媒体编码点;以及基于第一媒体编码点来确定第一编码媒体序列,其中第一编码媒体序列随后在媒体字幕的回放期间流式传输到端点设备。
任何权利要求中记载的任何权利要求要素和/或本申请中描述的任何要素的任何和所有组合以任何方式均落入本发明的预期范围和保护范围内。
已经出于图示的目的呈现了各种实施例的描述,但并不旨在穷举或限于所公开的实施例。在不脱离所描述实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员来说将是显而易见的。
本申请实施例的方面可以体现为系统、方法或计算机程序产品。因此,本公开的各方面可以采用完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,这些方面可以在本文中统称为“模块”或“系统”。此外,本公开中描述的任何硬件和/或软件技术、过程、功能、部件、引擎、模块或系统均可以实现为电路或电路组。此外,本公开的各方面可以采用包含在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有包含在其上的计算机可读程序代码。
可以利用一种或多种计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以,例如,但不限于,电子、磁、光、电磁、红外或半导体的系统、设备或装置或前述的任何合适的组合。计算机可读存储介质的更具体实施例(非详尽列表)将包括以下内容:具有一条或多条电线的电气连接件、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程存储器只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或前述的任何合适组合。在本文档的上下文中,计算机可读存储介质可以是可以包含或存储由指令执行系统、装置或设备使用或与其结合使用的程序的任何有形介质。
上面参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或方框图描述了本公开的各方面。应当理解,流程图说明和/或框图的每个块以及流程图说明和/或框图中的块的组合均可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,以生产机器。当经由计算机的处理器或其他可编程数据处理装置执行指令时,该指令能够实现流程图和/或框图块中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定应用程序处理器或现场可编程门阵列。
图中的流程图和框图图示了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实施例的架构、功能和操作。就这一点而言,流程图或框图中的每个块均可以表示模块、段或代码的一部分,该模块、段或代码的一部分包括用于实现指定逻辑功能的一个或多个可执行指令。还应当注意的是,在其他实施例中,框中标注的功能可能不按附图中指示的顺序发生。例如,根据所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者有时可以以相反的顺序执行这些框,取决于所涉及的功能。还将注意到,框图和/或流程图图示的每个块以及框图和/或流程图图示中的块的组合可以由执行指定功能或动作的基于硬件的专用系统或专用硬件和计算机指令的组合来实现。
虽然前面针对本公开的实施例,但是在不脱离其基本范围的情况下可以设计本公开的其他和进一步的实施例,并且其范围由随后的权利要求书确定。