一种媒体信息的处理方法及装置转让专利

申请号 : CN201810032638.1

文献号 : CN110035331A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 方华猛邸佩云范宇群

申请人 : 华为技术有限公司

摘要 :

本申请实施例提供一种媒体信息的处理方法及装置,涉及流媒体传输技术领域,用于节省传输带宽,同时降低流管理的复杂度。所述方法包括:获取子码流数据,所述子码流数据包括指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量,或所述指示信息用于指示所述子码流数据是否可用于拼接;根据所述指示信息处理所述子码流数据。

权利要求 :

1.一种媒体信息的处理方法,其特征在于,所述方法包括:

获取子码流数据,所述子码流数据包括指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量,或所述指示信息用于指示所述子码流数据是否可用于拼接;

根据所述指示信息处理所述子码流数据。

2.根据权利要求1所述的方法,其特征在于,所述指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。

3.根据权利要求1所述的方法,其特征在于,所述指示信息承载在轨迹(track)的一个盒(box)中。

4.根据权利要求1所述的方法,其特征在于,所述指示信息承载在轨迹(track)的样本入口类型中。

5.根据权利要求1所述的方法,其特征在于,所述指示信息承载在媒体展示描述(media presentation description,MPD)文件中。

6.根据权利要求1-5任一项所述的方法,其特征在于,所述子码流数据还包括视频参数集(video parameter set,VPS)信息,所述根据所述指示信息处理所述子码流数据,包括:根据所述指示信息和所述VPS信息,处理所述子码流数据。

7.根据权利要求1-5任一项所述的方法,其特征在于,所述子码流数据还包括序列参数集(sequence parameter set,SPS)信息,所述根据所述指示信息处理所述子码流数据,包括:根据所述指示信息和所述SPS信息,处理所述子码流数据。

8.根据权利要求1-7任一项所述的方法,其特征在于,所述子码流数据还包括图像参数集(picture parameter set,PPS)信息,所述根据所述指示信息处理所述子码流数据,包括:根据所述指示信息和所述PPS信息,处理所述子码流数据。

9.根据权利要求1-8任一项所述的方法,其特征在于,所述子码流数据还包括片段(slice segment,SS)信息,所述根据所述指示信息处理所述子码流数据,包括:根据所述指示信息和所述SS信息,处理所述子码流数据。

10.根据权利要求1-9任一项所述的方法,其特征在于,所述子码流数据还包括分辨率信息。

11.一种媒体信息的处理方法,其特征在于,所述方法包括:获取原始图像的子码流数据;

根据所述子码流数据中包括的tile数据的数量,确定所述子码流数据的指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量,或所述指示信息用于指示所述子码流数据是否可用于拼接;

向终端发送所述子码流数据,所述子码流数据包括所述指示信息。

12.根据权利要求11所述的方法,其特征在于,所述指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。

13.根据权利要求11所述的方法,其特征在于,所述指示信息承载在轨迹(track)的一个盒(box)中。

14.根据权利要求11所述的方法,其特征在于,所述指示信息承载在轨迹(track)的样本入口类型中。

15.根据权利要求11所述的方法,其特征在于,所述指示信息承载在媒体展示描述(media presentation description,MPD)文件中。

16.一种媒体信息的处理装置,其特征在于,所述装置包括:获取模块,用于获取子码流数据,所述子码流数据包括指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量,或所述指示信息用于指示所述子码流数据是否可用于拼接;

处理模块,用于根据所述指示信息处理所述子码流数据。

17.根据权利要求16所述的装置,其特征在于,所述指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。

18.根据权利要求16所述的装置,其特征在于,所述指示信息承载在轨迹(track)的一个盒(box)中。

19.根据权利要求16所述的装置,其特征在于,所述指示信息承载在轨迹(track)的样本入口类型中。

20.根据权利要求16所述的装置,其特征在于,所述指示信息承载在媒体展示描述(media presentation description,MPD)文件中。

21.根据权利要求16-20任一项所述的装置,其特征在于,所述子码流数据还包括视频参数集(video parameter set,VPS)信息,所述处理模块,还用于:根据所述指示信息和所述VPS信息,处理所述子码流数据。

22.根据权利要求16-20任一项所述的装置,其特征在于,所述子码流数据还包括序列参数集(sequence parameter set,SPS)信息,所述处理模块,还用于:根据所述指示信息和所述SPS信息,处理所述子码流数据。

23.根据权利要求16-20任一项所述的装置,其特征在于,所述子码流数据还包括图像参数集(picture parameter set,PPS)信息,所述处理模块,还用于:根据所述指示信息和所述PPS信息,处理所述子码流数据。

24.根据权利要求16-20任一项所述的装置,其特征在于,所述子码流数据还包括片段(slice segment,SS)信息,所述处理模块,还用于:根据所述指示信息和所述SS信息,处理所述子码流数据。

25.根据权利要求16-20任一项所述的装置,其特征在于,所述子码流数据还包括分辨率信息。

26.一种媒体信息的处理装置,其特征在于,所述装置包括:获取模块,用于获取原始图像的子码流数据;

处理模块,用于根据所述子码流数据中包括的tile数据的数量,确定所述子码流数据的指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量,或所述指示信息用于指示所述子码流数据是否可用于拼接;

发送模块,用于向终端发送所述子码流数据,所述子码流数据包括所述指示信息。

27.根据权利要求26所述的装置,其特征在于,所述指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。

28.根据权利要求26所述的装置,其特征在于,所述指示信息承载在轨迹(track)的一个盒(box)中。

29.根据权利要求26所述的装置,其特征在于,所述指示信息承载在轨迹(track)的样本入口类型中。

30.根据权利要求26所述的装置,其特征在于,所述指示信息承载在媒体展示描述(media presentation description,MPD)文件中。

说明书 :

一种媒体信息的处理方法及装置

技术领域

[0001] 本申请实施例涉及流媒体传输技术领域,尤其涉及一种媒体信息的处理方法及装置。

背景技术

[0002] 当前随着360度视频等虚拟现实(virtual reality,VR)视频的观看应用的日益普及,越来越多的用户加入到大视角的VR视频观看的体验队伍中。这种新的视频观看应用给用户带来了新的视频观看模式和视觉体验的同时,也带来了新的技术挑战。由于360度等大视角的视频观看过程中,VR视频的空间区域为360度的全景空间,超过了人眼正常的视觉范围,因此,用户在观看视频的过程中随时都会变换观看的角度(或视角)。用户观看的视角不同,看到的视频图像也将不同,故此视频呈现的内容需要随着用户的视角变化而变化。
[0003] 当前的视频应用场景中,特别是在当前360度全景视频应用以及多路视频应用中,有时用户仅对整幅图像的一部分图像感兴趣。这种情况下,客户端并不需要将所有图像区域都进行显示,只需要获取全图像中的一部分图像在客户端进行渲染呈现。在这种应用场景下,客户端可以将呈现所需要的子码流进行拼接,得到一个标准码流,且为了兼容已有标准编解码器,子码流需要满足一定的条件才可以拼接在一起。
[0004] 如图1所示,现有的全景媒体应用格式(omnidirectional media format,OMAF)标准中采用额外传输一个metadata track,该track中标记了可以进行拼接的子码流的track ID以及拼接方法,客户端利用该track的信息指导对应的子码流按照约定的排布完成拼接过程,最后由标准编解码器对拼接后的图像码流(即标准码流)进行解码,将解码后的图像进行渲染呈现。图1中以视频图像被划分8个子图像(即8个tile)、客户端请求的视角包括为例1、2、5和6(四个tile)为例进行说明,t0~tN表示不同时序。
[0005] 但是,上述方法中传输的metadata track会带来额外的带宽需求,而且在子图像码流的track数目较多时,可拼接为标准码流的子图像码流的track组合较多,从而需要构造不同的metadata track,使得流管理的复杂度较高。

发明内容

[0006] 本申请的实施例提供一种媒体信息的处理方法及装置,在子码流数据中添加了码流中包括的tile数据的数量信息或码流是否可用于拼接的信息的指示信息,从而根据指示信息确定码流是否可用于拼接,从而解决了现有技术中在码流拼接时需要额外的track信息的问题,节省了传输带宽,同时也降低了流管理的复杂度较高。
[0007] 为达到上述目的,本申请的实施例采用如下技术方案:
[0008] 第一方面,提供一种媒体信息的处理方法,该方法包括:获取子码流数据,子码流数据包括指示信息,该指示信息用于指示该子码流数据中包括的tile数据的数量,或该指示信息用于指示该子码流数据是否可用于拼接;根据该指示信息处理该子码流数据。
[0009] 本申请方法实施例的执行主体可以是可穿戴式设备(例如AR/VR头盔,AR/VR眼镜等),智能终端(例如手机,平板电脑等),电视,机顶盒等具有视频或图像解码功能的设备。
[0010] 在第一方面的一种可能的实现方式中,可以通过发送媒体数据获取请求,然后接收媒体数据,该媒体数据中包括子码流数据。例如终端可以通过媒体展示描述文件中的有关属性和地址信息构建统一资源定位符(uniform resource locator,URL),然后向该URL发送HTTP请求,然后接收相应的媒体数据。
[0011] 在第一方面的一种可能的实现方式中,可以通过推送的方式得到媒体数据,该媒体数据中包括子码流数据。本申请实施例中的媒体数据可以主要指的是对视频或图像进行编码封装后的数据,在一些可能的实现方式中,本申请实施例的媒体数据也可以是对音频进行编码封装后的数据。视频是由一系列的图像组成的。
[0012] 在第一方面的一种可能的实现方式中,媒体数据的有关示例可以参考ISO/IEC23090-2标准规范的媒体数据的有关规定。
[0013] ISO/IEC 23090-2标准规范又称为OMAF(omnidirectional media format,全向媒体格式)标准规范,该规范定义了一种媒体应用格式,可以在应用中实现全向媒体的呈现,全向媒体主要是指全向视频(360°视频)和相关音频。OMAF规范首先指定了可以用于将球面视频转换为二维视频的投影方法的列表,其次是如何使用ISO基本媒体文件格式(ISO base media file format,ISOBMFF)存储全向媒体和该媒体相关联的元数据,以及如何在流媒体系统中封装全向媒体的数据和传输全向媒体的数据,例如通过基于超文本传输协议(hypertext transfer protocol,HTTP)的动态自适应流传输(dynamic adaptive streaming over HTTP,DASH),ISO/IEC 23009-1标准中规定的动态自适应流传输。
[0014] 在第一方面的一种可能的实现方式中,本申请实施例所述的图像,可以是采集设备(如摄像头等)采集到的一个完整的图像,也可以是对一个完整的图像进行划分后得到的图像。例如采集设备采集的图像的分辨率为1024×1024。则本申请实施例的图像,可以是1024×1024,也可以是512×512的图像,也可以是1024×512的图像,或者是512×1024的图像等,本申请对此不做具体限定。
[0015] 在第一方面的一种可能的实现方式中,本申请实施例所述的图像数据(比如,视频码流,原码流等),是按照视频编码技术对图像进行编码后的数据,例如可以是采用ITUH.264对图像进行编码后得到的图像数据,或者是采用ITU H.265对图像进行编码后得到的图像数据,也可以是采用其它标准或者私有技术对图像进行编码后的数据。
[0016] 在第一方面的一种可能的实现方式中,子码流数据的指示信息可以被封装在补充增强信息(supplementary enhancement information,SEI)中。
[0017] 在第一方面的一种可能的实现方式中,子码流数据的指示信息可以被封装在轨迹(track)中的一个盒(box)中。
[0018] 在第一方面的一种可能的实现方式中,子码流数据的指示信息可以被封装在媒体展示描述(media presentation description,MPD)文件中。其中,媒体展示描述文件中包括了图像的一些元数据的文件。元数据指的是一些属性信息,例如时长,码率,帧率,在球面坐标系中的位置等。在一个示例中,媒体展示描述文件可以参考ISO/IEC 23009-1中的有关规定和示例。
[0019] 在第一方面的一种可能的实现方式中,子码流数据的指示信息可以承载在轨迹(track)的样本入口类型中。可选的,针对子码流包括的tile数据的数量信息,在track中添加sample entry type(样本入口类型):‘onti’。当sample entry name为‘onti’时,表示当前track中的子码流包括一个tile数据,从而指示该子码流可用于拼接。
[0020] 在第一方面的一种可能的实现方式中,指示信息包括至少一个的标识,所述标识用于指示子码流数据中包括的tile数据的数量。例如,指示信息可以是一个比特的flag,根据flag的值指示tile数据的数量是否为1,指示信息也可以是指示符;或者,指示信息可以是两个或者两个以上比特的flag,flag的值直接用于指示tile数据的数量。
[0021] 在第一方面的一种可能的实现方式中,子码流数据还包括视频参数集(video parameter set,VPS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和VPS信息,处理子码流数据。
[0022] 在第一方面的一种可能的实现方式中,子码流数据还包括序列参数集(sequence parameter set,SPS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和SPS信息,处理子码流数据。
[0023] 在第一方面的一种可能的实现方式中,子码流数据还包括图像参数集(picture parameter set,PPS)信息,则根据指示信息处理子码流数据,可以包括:根据指示信息和PPS信息,处理子码流数据。
[0024] 在第一方面的一种可能的实现方式中,子码流数据还包括片段(slice segment,SS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和SS信息,处理子码流数据。
[0025] 在第一方面的一种可能的实现方式中,子码流数据还包括分辨率信息,当存在不同分辨率的子码流时,可以用一个tile包含多个slice的形式对子码流进行拼接。可选的,可以将低分辨率的多个子码流作为slice,组合成一个tile数据,即拼接后的码流中的一个tile数据可以包括多个slice。比如,存在两种分辨率且内容相同的子码流,两种分辨率分别为1024×1024和512×512,则可以将两个512×512的子码流作为slice,组合成一个tile数据。
[0026] 在第一方面的一种可能的实现方式中,当确定子码流不能用于拼接时,可以直接对该子码流进行解码,并将解码后得到的图像与拼接码流解码后得到的图像进行图像拼接,得到最终的显示图像,从而与丢弃不能用于拼接的子码流相比,可以提高子码流的利用率。
[0027] 上述第一方面提供的媒体信息的处理方法中,通过在每个子码流中添加该子码流所包含的tile数据的数量的信息或用于指示该子码流数据是否可用于拼接的指示信息,则可以根据指示信息确定子码流是否可用于拼接,根据多个可用于拼接的子码流进行拼接。对所需码流进行拼接后解码,仅需要单个解码器就能实现多个子图像序列的解码,且无需传输额外的track信息,节省了带宽,同时也简化了流管理的复杂度。
[0028] 第二方面,提供了一种媒体信息的处理方法,该方法包括:获取原始图像的子码流数据;根据子码流数据中包括的tile数据的数量,确定子码流数据的指示信息,该指示信息用于指示该子码流数据中包括的tile数据的数量,或该指示信息用于指示该子码流数据是否可用于拼接;向终端发送子码流数据,子码流数据包括指示信息。
[0029] 在第二方面的一种可能的实现方式中,子码流的指示信息可以被封装在补充增强信息(supplementary enhancement information,SEI)中。
[0030] 在第二方面的一种可能的实现方式中,子码流的指示信息可以被封装在轨迹(track)的一个盒(box)中。
[0031] 在第二方面的一种可能的实现方式中,子码流的指示信息可以被封装在轨迹(track)的样本入口类型中。
[0032] 在第二方面的一种可能的实现方式中,子码流的指示信息可以被封装在媒体展示描述(media presentation description,MPD)文件中。
[0033] 在第二方面的一种可能的实现方式中,子码流数据还包括视频参数集(video parameter set,VPS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和VPS信息,处理子码流数据。
[0034] 在第二方面的一种可能的实现方式中,子码流数据还包括序列参数集(sequence parameter set,SPS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和SPS信息,处理子码流数据。
[0035] 在第二方面的一种可能的实现方式中,子码流数据还包括图像参数集(picture parameter set,PPS)信息,则根据指示信息处理子码流数据,可以包括:根据指示信息和PPS信息,处理子码流数据。
[0036] 在第二方面的一种可能的实现方式中,子码流数据还包括片段(slice segment,SS)信息,则根据指示信息处理子码流数据,包括:根据指示信息和SS信息,处理子码流数据。
[0037] 在第二方面的一种可能的实现方式中,子码流数据还包括分辨率信息。可选的,存在不同分辨率的子码流,比如,存在两种分辨率且内容相同的子码流,两种分辨率分别为1024×1024和512×512,则可以将两个512×512的子码流作为slice,组合成一个tile数据。
[0038] 第三方面,提供一种媒体信息的处理装置,该装置包括:获取模块,用于获取子码流数据,子码流数据包括指示信息,指示信息用于指示子码流数据中包括的tile数据的数量,或该指示信息用于指示该子码流数据是否可用于拼接;处理模块,用于根据指示信息处理子码流数据。
[0039] 在第三方面的一种可能的实现方式中,指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。
[0040] 在第三方面的一种可能的实现方式中,指示信息承载在轨迹(track)的一个盒(box)中。
[0041] 在第三方面的一种可能的实现方式中,指示信息承载在轨迹(track)的样本入口类型中。
[0042] 在第三方面的一种可能的实现方式中,指示信息承载在媒体展示描述(media presentation description,MPD)文件中。
[0043] 在第三方面的一种可能的实现方式中,子码流数据还包括视频参数集(videoparameter set,VPS)信息,处理模块还用于:根据指示信息和VPS信息,处理子码流数据。
[0044] 在第三方面的一种可能的实现方式中,子码流数据还包括序列参数集(sequence parameter set,SPS)信息,处理模块还用于:根据指示信息和SPS信息,处理子码流数据。
[0045] 在第三方面的一种可能的实现方式中,子码流数据还包括图像参数集(picture parameter set,PPS)信息,处理模块还用于:根据指示信息和PPS信息,处理子码流数据。
[0046] 在第三方面的一种可能的实现方式中,子码流数据还包括片段(slice segment,SS)信息,处理模块还用于:根据指示信息和SS信息,处理子码流数据。
[0047] 在第三方面的一种可能的实现方式中,子码流数据还包括分辨率信息。
[0048] 第四方面,提供一种媒体信息的处理装置,该装置包括:获取模块,用于获取原始图像的子码流数据;处理模块,用于根据子码流数据中包括的tile数据的数量,确定子码流数据的指示信息,该指示信息用于指示该子码流数据中包括的tile数据的数量,或该指示信息用于指示该子码流数据是否可用于拼接;发送模块,用于向终端发送子码流数据,子码流数据包括指示信息。
[0049] 在第四方面的一种可能的实现方式中,指示信息承载在补充增强信息(supplementary enhancement information,SEI)中。
[0050] 在第四方面的一种可能的实现方式中,指示信息承载在轨迹(track)的一个盒(box)中。
[0051] 在第四方面的一种可能的实现方式中,指示信息承载在轨迹(track)的样本入口类型中。
[0052] 在第四方面的一种可能的实现方式中,指示信息承载在媒体展示描述(media presentation description,MPD)文件中。
[0053] 在第四方面的一种可能的实现方式中,子码流数据还包括视频参数集(video parameter set,VPS)信息,处理模块还用于:根据指示信息和VPS信息,处理子码流数据。
[0054] 在第四方面的一种可能的实现方式中,子码流数据还包括序列参数集(sequence parameter set,SPS)信息,处理模块还用于:根据指示信息和SPS信息,处理子码流数据。
[0055] 在第四方面的一种可能的实现方式中,子码流数据还包括图像参数集(picture parameter set,PPS)信息,处理模块还用于:根据指示信息和PPS信息,处理子码流数据。
[0056] 在第四方面的一种可能的实现方式中,子码流数据还包括片段(slice segment,SS)信息,处理模块还用于:根据指示信息和SS信息,处理子码流数据。
[0057] 在第四方面的一种可能的实现方式中,子码流数据还包括分辨率信息。
[0058] 需要说明的是,本申请第二方面至第四方面的方法或装置实施例的具体示例和实现方式可以参考第一方面方法实施例中的相关举例,在此不再赘述。
[0059] 第五方面,提供了一种媒体信息的处理装置,该装置包括:一个或多个处理器、存储器。该存储器与一个或多个处理器耦合;存储器用于存储计算机程序代码,计算机程序代码包括指令,当一个或多个处理器执行指令时,处理装置执行如上述第一方面以及第一方面的任意一种可能的实现方式所提供的媒体信息的处理方法,或者执行上述第二方面以及第二方面的任意一种可能的实现方式所提供的媒体信息的处理方法。
[0060] 第六方面,提供了一种处理器,所述处理器用于执行如上述第一方面以及第一方面的任意一种可能的实现方式所述的媒体信息的处理方法,或执行如上述第二方面以及第二方面的任意一种可能的实现方式所述的媒体信息的处理方法。
[0061] 本申请的又一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在设备上运行时,使得设备执行如上述第一方面以及第一方面的任意一种可能的实现方式所述的媒体信息的处理方法。
[0062] 本申请的又一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在设备上运行时,使得设备执行如上述第二方面以及第二方面的任意一种可能的实现方式所提供的媒体信息的处理方法。
[0063] 本申请的又一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行如上述第一方面以及第一方面的任意一种可能的实现方式所述的媒体信息的处理方法。
[0064] 本申请的又一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行如上述第二方面以及第二方面的任意一种可能的实现方式所述的媒体信息的处理方法。

附图说明

[0065] 图1为一种子码流的视频编解码传输的示意图;
[0066] 图2为本申请实施例提供的一种视频编解码以及传输系统的结构示意图;
[0067] 图3为本申请实施例提供的一种媒体信息的处理方法的流程示意图;
[0068] 图4为本申请实施例提供的一种媒体信息的处理装置的结构示意图;
[0069] 图5为本申请实施例提供的另一种媒体信息的处理方法的流程示意图;
[0070] 图6为本申请实施例提供的另一种媒体信息的处理装置的结构示意图;
[0071] 图7为本申请实施例提供的第一种码流拼接的示意图;
[0072] 图8为本申请实施例提供的一种码流中slice的排布示意图;
[0073] 图9为本申请实施例提供的另一种码流中slice的排布示意图;
[0074] 图10为本申请实施例提供的第二种码流拼接的示意图;
[0075] 图11为本申请实施例提供的第三种码流拼接的示意图;
[0076] 图12为本申请实施例提供的第四种码流拼接的示意图;
[0077] 图13为本申请实施例提供的第五种码流拼接的示意图;
[0078] 图14为本申请实施例提供的第六种码流拼接的示意图;
[0079] 图15为本申请实施例提供的第七种码流拼接的示意图;
[0080] 图16为本申请实施例提供的第八种码流拼接的示意图;
[0081] 图17为本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

[0082] 在介绍本申请实施例之前,首先对本申请涉及的相关技术术语进行解释说明。
[0083] 视频解码(video decoding):是指将码流按照特定的语法规则和处理方法恢复成重建图像的处理过程。
[0084] 视频编码(video encoding):是指将图像序列压缩成码流的处理过程。
[0085] 视频编码(video coding):video encoding和video decoding的统称,中文译名和video encoding相同。
[0086] 全景视频:也可以称为虚拟现实(virtual reality,VR)全景视频,或者称为360度全景视频或360度视频,一种用多摄像机进行全方位360度进行拍摄的视频,用户在观看视频的时候,可以随意调节视频上下左右进行观看。
[0087] Tile:指的是视频编码标准HEVC中针对待编码图像进行划分所得到的方块形编码区域,一帧图像可划分为多个tile,这些tile共同组成该帧图像。每个tile可以独立编码。
[0088] 子图像(sub-picture):对图像进行划分,获得原图像的一部分称为该图像的子图像。在一些实施例中,子图像的形状为方形。子图像可以为一帧图像中的部分图像。
[0089] 运动受限的tile集合(motion-constrained tile sets,MCTS):指的是针对tile的一种编码技术,这种技术在编码时对tile内部的运动矢量加以限制,使得图像序列中相同位置的tile在时域上不会参考该tile区域位置以外的图像像素,因此时域上各个tile可以独立解码。
[0090] 图像子区域:为方便本申请的描述,以图像子区域来作为tile或者子图像的统称。可以理解的是,本申请中的子图像也可以包括按照tile编码方式划分的图像。
[0091] 轨迹(track):track在标准ISO/IEC 14496-12中的定义为“timed sequence of related samples(q.v.)in an ISO base media file.NOTE:For media data,a track corresponds to a sequence of images or sampled audio;for hint tracks,a track corresponds to a streaming channel.”翻译“ISO媒体文件中相关样本的时间属性序列。注:对于媒体数据,一个track就是个图像或者音频样本序列;对于提示轨迹,一个轨迹对应一个流频道”。解释:track是指一系列有时间属性的按照ISOBMFF的封装方式的样本,比如视频track,视频样本是视频编码器编码每一帧后产生的码流,按照ISOBMFF的规范对所有的视频样本进行封装产生样本。
[0092] 盒子(box):box在ISO/IEC 14496-12标准中的定义为“object-oriented building block defined by a unique type identifier and length.NOTE:Called‘atom’in some specifications,including the first definition of MP4.”翻译“面向对象的构建块,由唯一的类型标识符和长度定义。注:在某些规范中称为“原子”,包括MP4的第一个定义。”box是构成ISOBMFF文件的基本单元,box可以包含其他的box。
[0093] 补充增强信息(supplementary enhancement information,SEI):是视频编解码标准(h.264,h.265)中定义的一种网络接入单元(Network Abstract Layer Unit,NALU)的类型。
[0094] 媒体展示描述(Media presentation description,MPD)是标准ISO/IEC 23009-1中规定的一种文档,在该文档中包括了客户端构造HTTP-URL的元数据。在MPD中包括一个或者多个周期(period)元素,每个period元素包括有一个或者多个自适应集(adaptationset),每个adaptationset中包括一个或者多个表示(representation),每个representation中包括一个或者多个分段,客户端根据MPD中的信息,选择表达,并构建分段的http-URL。
[0095] 本申请实施例应用于视频编解码以及传输系统。在一个实施例中,基于子码流的视频编解码传输框图如图2所示。
[0096] 参见图2,在服务器侧,由视频捕获装置得到视频或图像。视频捕获装置可以是摄像头,照相机等视频或图像的采集装置,也可以是接收装置,从其它设备处接收视频或图像的数据。编码前处理器用于对视频或图像进行编码前的一些处理,其中,编码前处理器模块可以包括对视频或图像进行子区域分割(或划分),可以理解的是,编码前处理器也可以是视频编码器的一部分,或者是由视频编码器执行编码前处理器的上述功能。视频编码器用于按照一定的编码规则对视频或图像进行编码,例如可以采用H.264,H.265中规定的编码方式,也可以按照其它私有编码技术对视频或图像进行编码。对于编码后的码流,码流封装装置可以按照一定的封装格式对码流进行码流封装,例如可以是MPEG-2TS流的封装格式或其它封装方式。然后由发送传输装置将封装后的码流发送给终端。
[0097] 在终端侧,接收装置用于从服务器侧接收码流,然后由码流解封装装置对码流进行解封装后,可获得多个子码流,送入视频解码器。由视频解码器对子码流进行解码,生成解码后的视频或图像,最后由显示装置进行显示。
[0098] 可以理解的是,图2中示出的服务器和终端是相对于码流的发送方和接收方的一种表示,在实际的产品实现中,服务器可以是智能手机或平板电脑等设备,终端也可以是智能手机或平板电脑等设备,本申请实施例对此不做具体限定。
[0099] 可以理解的是,本申请实施例的子码流,是相对于拼接后的码流而言的。获取的子码流可以是单独传输的码流。本申请实施例中的子码流也可以称为子码流数据,子码流和子码流数据可以互相替换。
[0100] 如图3所示,本申请一方面的实施例提供了一种媒体信息的处理方法S30,该方法S30包括:
[0101] S301:终端获取子码流数据,所述子码流数据包括指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量。
[0102] S302:终端根据所述指示信息处理所述子码流数据。
[0103] 如图4所示,本申请的一方面的实施例提供了一种媒体信息的处理装置40,该装置40包括:获取模块401和处理模块402。其中,获取模块401用于获取子码流数据,所述子码流数据包括指示信息,所述指示信息用于指示所述子码流数据中包括的tile数据的数量;处理模块402用于根据所述指示信息处理所述子码流数据。
[0104] 如图5所示,本申请的一方面的实施例提供了另一种媒体信息的处理方法S50,该方法S50包括:
[0105] S501:服务器获取原始图像的子码流数据。
[0106] S502:服务器根据所述子码流数据中包括的tile数据的数量,确定所述子码流数据的指示信息。
[0107] S503:服务器向终端发送所述子码流数据,所述子码流数据包括所述指示信息。
[0108] 如图6所示,本申请的一方面的实施例提供了一种媒体信息的处理装置S60,该装置S60包括:获取模块601、处理模块602和发送模块603。其中,获取模块601用于获取原始图像的子码流数据;处理模块602用于根据所述子码流数据中包括的tile数据的数量,确定所述子码流数据的指示信息;发送模块603用于向终端发送所述子码流数据,所述子码流数据包括所述指示信息。
[0109] 在本申请一种可能的实现方式中,本申请实施例给出一种基于子码流拼接处理的方法,以及相对应的编码传输和解码呈现方式。本申请实施例的整个系统处理过程如图7所示,其实施步骤详细介绍如下:
[0110] 服务器侧:
[0111] 将输入视频图像(可以称为原始图像)进行区域(每个区域可以称为一个tile)划分,并采用MCTS形式编码,生成一个符合标准的视频码流。其中,MCTS是指限制时域和空域上的帧间帧内预测运动矢量,而且预测像素不超过图像边界,服务器采用MCTS形式编码时的设置可以包括:关闭跨tile去方滤波和SAO滤波,以保证tile数据之间的解码独立。之后,服务器对该视频码流进行拆分,获取多个子码流。其中,一个子码流中可能包括一个tile的编码数据,也可能包括多个tile的编码数据。tile的编码数据是指对原始图像中的tile区域进行编码后得到的编码数据,本申请实施例中将tile的编码数据也可以称为tile数据。
[0112] 具体的,服务器对该视频码流进行拆分,获取多个子码流的过程可以包括:服务器检测该视频码流中的NALU起始码,划分出不同的NALU,每个NALU中包含一个tile数据、或者多个tile数据;服务器确定不同NALU中包含的一个或者多个tile数据对应的编码参数集(即确定一个子码流的编码参数集),并从视频码流中拷贝每个NALU所包括的tile数据,为拷贝的tile数据和编码参数集添加NALU起始码,从而形成一个子码流。
[0113] 其中,每个NALU头(Header)中的类型可以用于指示该视频码流的编码参数集信息和该NLAU中所包括的tile数据。该编码参数集可以包括视频参数集(video parameter set,VPS)信息、序列参数集(sequence parameter set,SPS)信息、图像参数集(picture parameter set,PPS)信息和片段(slice segment,SS)信息等。
[0114] 为便于理解,这里假设原始图像的分辨率为3840×1920,划分的每个tile的大小为640×640,且以该视频码流中的一个NALU(即一个子码流)为例进行详细说明。当服务器确定该子码流的编码参数集时,服务器可以沿用该视频码流中的编码参数集,仅对该编码参数集中的部分参数进行修改,具体如下所述。
[0115] 对于VPS信息:可选的,由于子码流的分辨率下降,服务器可以对VPS信息中的编码规格level set进行修改,比如,将level从5.1修改为4.1。
[0116] 对于SPS信息:服务器可以修改SPS信息中包括表示图像宽和高的参数,即pic_width_in_luma_samples和pic_height_in_luma_sample。比如,当该子码流所包含的tile数据的数量为1(即该子码流对应的子图像包括一个tile),则pic_width_in_luma_samples和pic_height_in_luma_samples分别为640和640;当该子码流所包含的tile数据的数量为2(即该子码流对应的子图像包括两个tile)时,如果两个tile左右相邻,则pic_width_in_luma_samples和pic_height_in_luma_samples分别为1280和640,如果两个tile上下相邻时,则pic_width_in_luma_samples和pic_height_in_luma_samples分别为640和1280。
[0117] 对于PPS信息:服务器可以根据该子码流中所包含的tile数据的数量(即该子码流对应的子图像所包括tile的数量)设置PPS信息中的tiles_enabled_flag(tile使能标识)、num_tile_columns_minus1(tile列数标识)、num_tile_rows_minus1(tile行数标识)、uniform_spacing_flag(平均分配标识)等与tile划分相关的参数。比如,当该子码流对应的子图像包括一个tile时,则tiles_enabled_flag设置为0;当子码流对应的子图像包括两个相同分辨率左右相邻的tile时,则tiles_enabled_flag设置为1,可将num_tile_columns_minus1设置为1,num_tile_rows_minus1设置为0,uniform_spacing_flag设置为1。
[0118] 对于SS信息:服务器可以将该子码流所包含的每一个tile数据作为一个slice的划分方式进行构建,则服务器可以对SS的头(header)信息first_slice_segment_in_pic_flag(第一个片段标识)、slice_segment_address(片段地址)等参数进行设定。比如,当该子码流中含有一个tile数据时,则可以将first_slice_segment_in_pic_flag设置为1、slice_segment_address设置为0;当该子码流中含有两个tile数据,每一帧的第一个tile作为第一个slice时,则对应的first_slice_segment_in_pic_flag设置为1、slice_segment_address设置为0,每一帧的第二个tile作为第二个slice,对应的first_slice_segment_in_pic_flag设置为1、slice_segment_address设置为10(如图8所示,将图像按照CTU划分(64x64),按照全图Z字形扫描,当前slice的第一个CTU标号即为当前slice的slice_segment_address值)。
[0119] 需要说明的是,服务器也可以将每两个tile数据或者两个以上的tile数据作为一个slice的划分方式进行构建,本申请实施例仅以一个tile数据作为一个slice的划分方式进行举例说明,其并不对本申请实施例构成限定。
[0120] 在本申请实施例中,服务器可以将子码流中所包含的tile数据的数量信息写入到码流的SEI消息中。其中,tile数据的数量信息可以用于指示该子码流是否可用于拼接,当tile数据的数量为1时,可用于指示该子码流可用于拼接,当tile数据的数量大于1时,可用于指示该子码流不能用于拼接。具体的,SEI消息可以使用如下的语法元素表示:
[0121] 表1.1SEI语法
[0122]sei_payload(payloadType,payloadSize){ Descriptor
if(nal_unit_type==PREFIX_SEI_NUT)  
if(payloadType==0)  
buffering_period(payloadSize)  
…  
else if(payloadType==156)  
sub_picture_info_aggregate(payloadSize)  
…  
else if(payloadType==160)  
layers_not_present(payloadSize)/*specified in Annex F*/  
}  
}  
[0123] 表1.2子码流拼接SEI消息语法
[0124]sub_picture_info_aggregate(payloadSize){ Descriptor
sub_pic_str_only_one_tile u(1)
}  
[0125] 表1.1中,针对SEI类型加入新类型156,用于表示当前子码流是否能用于拼接,并加入信息sub_picture_info_aggregate(payloadSize)。sub_picture_stream_aggregate中包含的语法元素含义如下:
[0126] sub_pic_str_only_one_tile该值为1表示该子码流包括不超过一个的tile数据(即该子码流对应的子图像包括不超过一个Tile),该值为0表示该子码流包括两个或两个以上的tile数据(即该子码流对应的子图像包括两个或两个以上的Tile)。
[0127] 表1.3子码流中包括的tile数据的数量SEI消息语法
[0128]sub_picture_info_aggregate(payloadSize){ Descriptor
Tile_num_subpicture ue(v)
}  
[0129] 其中,也可以是表1.3类型,Tile_num_subpicture值表示该子码流中含有的tile数据的数量。
[0130] 获取多个子码流的一种具体方法如下,但不局限于该方法:
[0131] 1、对原始图像进行tile区域划分,并对划分后的tile进行编码,得到视频码流;
[0132] 2、获取视频码流中的每个NALU,并解析视频码流的编码参数集(包括VPS信息,SPS信息,PPS信息和SS信息);根据每个NALU中包括的Tile数据和视频码流的编码参数集,制作多个子码流的编码参数集;
[0133] 3、从视频码流中拷贝多个子码流中每个子码流的编码数据,并根据多个子码流的编码参数集,形成该多个子码流。
[0134] 4、为每个子码流设置sub_picture_info_aggregate的SEI消息。
[0135] 然后,可以将每个子码流进行封装,并存储在服务器上。
[0136] 终端侧:
[0137] 根据用户行为,终端向服务器请求需要的码流,并对接收到的码流进行解封装。
[0138] 解析每个子码流的SEI消息sub_picture_info_aggregate(payloadSize),根据上述表1.1和表1.2中语法元素的值,判断每个子码流是否可用于码流拼接。当sub_pic_str_only_one_tile为1时表示子码流可用于拼接;当sub_pic_str_only_one_tile不为1时表示子码流不能用于拼接,则丢弃该子码流,不参与后续处理。对于sub_pic_str_only_one_tile为1的子码流进行拼接。可选的,如果请求下载的子码流不足以拼接成为完整的矩形,可以取其中一个子码流进行复制填充,复制的子码流可以不参与解码和渲染显示。
[0139] 比如,图7中sub0~sub15为视频图像的16个tile,str0是sub0、sub1、sub4和sub5四个tile编码后对应的子码流,str1~str16分别是sub0~sub15(即每个子码流包含一个tile)编码后对应的子码流。相应的,子码流str0对应的only_one_tile_flag等于0,子码流str1、str2、str3、str5、str6和str7对应的only_one_tile_flag均等于1,则表示str0不能用于拼接(图7中用×表示不能用于拼接),str1、str2、str3、str5、str6和str7可用于拼接(图7中用√表示不能用于拼接)。对终端拼接子码流的过程进行详细说明。
[0140] 终端检测子码流str1、str2、str3、str5、str6和str7中NALU起始码,划分出不同的NALU;通过NALU头中的类型可以确定每个子码流的编码参数集和编码数据。其中,终端可以从子码流str1、str2、str3、str5、str6和str7中选择一个作为编码参数集构造基准,比如,选择str1作为编码参数集构造基准,根据str1的编码参数集信息,确定新码流(即子码流拼接的标准码流)的编码参数集。之后,分别从子码流str1、str2、str3、str5、str6和str7中拷贝对应tile的编码数据作为新码流的tile对应位置的编码数据,为新码流的编码参数集和新码流的编码数据添加NALU起始码,并按照一定的顺序拼接成一个标准的码流。
[0141] 为便于理解,这里假设原始图像的分辨率为3840×1920,划分的每个tile的大小为640×640,当终端确定新码流的编码参数集(比如,包括VPS信息、SPS信息、PPS信息和SS信息)时,终端可以沿用str1的编码参数集,仅对该编码参数集中的部分参数进行修改,具体如下所述。
[0142] 对于VPS信息:可选的,由于新码流的分辨率提高,终端可以对VPS信息中的编码规格level set进行修改,比如,将level从4.1修改为5.1。
[0143] 对于SPS信息:终端可以修改SPS信息中包括表示图像宽和高的参数,即pic_width_in_luma_samples和pic_height_in_luma_sample。比如图7中,终端请求的子图像包括3×2个tile(即sub0~sub2和sub4~sub6),则pic_width_in_luma_samples和pic_height_in_luma_samples分别为1920(即640×3)和1280(即640×2)。
[0144] 对于PPS信息:终端可以根据子图像中包含的tile的数量设置PPS信息中的tiles_enabled_flag(tile使能标识)、num_tile_columns_minus1(tile列数标识)、num_tile_rows_minus1(tile行数标识)、uniform_spacing_flag(平均分配标识)等与tile划分相关的参数。比如图7中,终端请求的子图像包括3×2个tile,则终端可以设置tiles_enabled_flag为1,设置num_tile_columns_minus1为2(子图像包括三列,从0开始表示),设置num_tile_rows_minus1为1(子图像包括两行,从0开始表示),设置uniform_spacing_flag为1(即tile是平均分配的)。
[0145] 对于SS信息:终端可以将每个子码流所包含的每一个tile数据作为一个slice的划分方式进行构建,则终端可以对SS参数的头(header)信息first_slice_segment_in_pic_flag(第一个片段标识)、slice_segment_address(片段地址)等参数进行设定。比如图7中的排列形式,则每一帧的str1的SS参数的头信息中first_slice_segment_in_pic_flag设置为1,其余的first_slice_segment_in_pic_flag设置为0;每一帧的SS参数头信息中的str1、str2、str3、str5、str6和str7的编码数据对应的slice_segment_address的值通过计算可以确定,图7中的slice_segment_address值分别设置为0、10、20、300、310、320(如图9所示,将图像按照CTU划分(64x64),按照全图Z字形扫描,当前slice的第一个CTU标号即为当前slice的slice_segment_address值)。
[0146] 示例性的,如图10所示,假设第一个子码流为A,第二个子码流为B,子码流A包括4帧(frame)的数据(即A0~A3)且被封装在track1中,子码流B也包括4帧的数据(B0~B3)且被封装在track2中,则子码流A和子码流B拼接后的码流结构可以如图10中的码流C所示。SSH表示SS参数中的头(header)信息。
[0147] 将多个子码流进行拼接的一种具体方法如下,但不局限于该方法:
[0148] 1、解析每个子码流的sub_picture_info_aggregate的SEI消息,获取每个子码流中包括的tile数据的数量,将tile数据的数量为1的子码流确定可用于拼接的子码流;
[0149] 2、解析各个子码流的参数集(包括VPS信息,SPS信息,PPS信息和SS信息),并融合解码后图像的宽高等信息,制作一个新的编码参数集,作为新码流(拼接后码流)的编码参数集;
[0150] 3、根据解码后图像中tile的位置拷贝每个可用于拼接的子码流中对应tile的编码数据,为拷贝的编码数据和新的编码参数集添加NALU起始码,并按照一定顺序拼接成一个标准码流,即得到拼接后的码流。
[0151] 最后,终端将拼接后的码流进行解码,并在显示设备上渲染呈现。
[0152] 需要说明的是,服务器也可以在每个子码流中添加该子码流是否可用于拼接的信息的指示信息;相应的,终端在获取子码流后,可以根据指示信息直接确定该子码流是否可用于拼接。其中,当指示信息用于指示子码流是否可用于拼接,或者指示信息用于指示子码流中包括的tile数据的数量时,服务器侧和终端侧的具体实现过程中,仅是添加和获取的指示信息的内容不同,其他对应的操作过程是一致的,本申请实施例在此不再赘述。
[0153] 本申请实施例中,对原始图像进行tile编码得到视频码流,并从视频码流中获取多个子码流,通过在每个子码流中添加该子码流所包含的tile数据的数量或者是否可用于拼接的信息,使得终端可以确定可用于拼接的子码流,根据多个可用于拼接的子码流进行拼接。对所需码流进行拼接后解码,仅需要单个解码器就能实现多个子图像序列的解码,且无需传输额外的track信息,节省了带宽,同时也简化了系统层流管理的复杂度。
[0154] 在本申请的一种可能的实现方式中,本申请实施例给出另一种基于子码流拼接处理的方法,以及相对应的编码传输和解码呈现方式。本申请实施例的整个系统处理过程如图11所示,其实施步骤详细介绍如下:
[0155] 服务器侧:
[0156] 将输入视频图像进行子图像划分,并将各个子图像进行编码,生成多个子码流。例如,可以按照相同的宽高(这里指的是划分后的不同子图像的宽高相同,而不是指同一个子图像的宽和高要相同,同一个子图像的宽和高可以相同也可以不相同)对原图像进行划分,获得多个方形子图像。对子图像编码时,针对子图像可以进行预测运动矢量限制,使得该子图像的预测像素不会超过该子图像四个边界的某个或某些边界。对每个子图像码流,可以按照上述实施例中的方式,将子码流中包括的tile数据的数量信息写入到子码流的SEI消息中。语法元素与上述实施例相同,具体参见上述实施例中的语法元素的描述,本申请在此不再赘述。
[0157] 因此,对于每个子码流,sub_pic_str_only_one_tile该值为1表示该子码流包括不超过一个的tile数据(即该子码流对应的子图像包括不超过一个Tile),该值为0表示该子码流包括两个或两个以上的tile数据(即该子码流对应的子图像包括两个或两个以上的Tile)。
[0158] 比如,图11中的sub0~sub15为视频图像的16个tile,str0是对包含sub0、sub1、sub4和sub5四个tile的子图像编码后得到的子码流,str1~str16分别是对子图像sub0~sub15(即每个子图像包含一个tile)编码后得到的子码流。相应的,str0对应的only_one_tile_flag等于0,str1~str16对应的only_one_tile_flag均等于1。图11中的×用于表示不能用于拼接,√用于表示可用于拼接。
[0159] 然后,将每个子码流进行封装,并存储在服务器上。
[0160] 需要说明的是,本实施例与上述实施例的区别在于:上述实施例服务器侧是对原始图像进行tile编码,仅需要一个编码器即可,编码后得到一个视频码流,需要从视频码流中重新获取多个子码流,而本实施例服务器侧是对原图像进行子图像划分,每个子图像由单独的一个编码器进行编码,编码后的码流即为多个子码流。
[0161] 另外,终端侧向服务器请求需要码流,对码流进行解封装,以及将多个子码流进行拼接的方法与上述实施例中的过程一致,具体参见上述实施例中的描述,本申请实施例在此不再赘述。
[0162] 本申请实施例中,对原始图像进行子图像划分,并对每个子图像进行编码得到多个子码流,通过在每个子码流中添加该子码流所包含的tile数据的数量的信息,使得终端可以确定可用于拼接的子码流,根据多个可用于拼接的子码流进行拼接。对所需码流进行拼接后解码,仅需要单个解码器就能实现多个子图像序列的解码,且无需传输额外的track信息,节省了带宽,同时也简化了流管理的复杂度。
[0163] 在本申请的一种可能的实现方式中,当服务器中存在不同分辨率的子码流时,还可以用一个tile包含多个slice的形式,对子码流进行拼接。其中,服务器侧的实现过程与上述实施例的过程一致,终端侧在获取可用于拼接的子码流,进行子码流拼接时,可以将低分辨率的多个子码流作为slice,组合成一个tile数据,即拼接后的码流中的一个tile数据可以包括多个slice。比如,服务器包括两种分辨率且内容相同的子码流,两种分辨率分别为1024×1024和512×512,则终端可以将两个512×512的子码流作为slice,组合成一个tile数据。
[0164] 比如,如图12所示,分辨率1024×1024的子码流包括b1~b8,分辨率512×512的子码流包括m1~m8,以子码流b2、m3和m4为例,对终端拼接子码流的过程进行详细说明。终端检测子码流b2、m3和m4中NALU起始码,划分出不同的NALU;通过NALU头中的类型可以确定每个子码流的编码参数集和编码数据。其中,终端可以从子码流b2、m3和m4中选择一个作为编码参数集构造基准,比如,选择b2作为编码参数集构造基准,根据b2的编码参数集信息,确定新码流(即子码流拼接的标准码流)的编码参数集。之后,分别从子码流b2、m3和m4中拷贝对应tile的编码数据作为新码流的tile对应位置的编码数据,为新码流的编码参数集和新码流的编码数据添加NALU起始码,并按照一定的顺序拼接成一个标准的码流。
[0165] 当终端确定新码流的编码参数集(比如,包括VPS信息、SPS信息、PPS信息和SS信息)时,终端可以沿用b2的编码参数集,仅对该编码参数集中的部分参数进行修改,具体如下所述。
[0166] 对于VPS信息:可选的,由于新码流的分辨率提高,终端可以对VPS信息中的编码规格level set进行修改,比如,将level从4.1修改为5.1。
[0167] 对于SPS信息:终端可以修改SPS信息中包括表示图像宽和高的参数,即pic_width_in_luma_samples和pic_height_in_luma_sample。比如图12中解码后图像的宽高信息,则可以设置pic_width_in_luma_samples和pic_height_in_luma_samples分别为1536(即1024+512)和1024。
[0168] 对于PPS信息:终端可以根据解码后图像中包含的tile的数量设置PPS信息中的tiles_enabled_flag(tile使能标识)、num_tile_columns_minus1(tile列数标识)、num_tile_rows_minus1(tile行数标识)、uniform_spacing_flag(平均分配标识)、以及column_width_minus1[i](列序数标识,i为0~(num_tile_columns_minus1)-1,当num_tile_columns_minus1为0时,则column_width_minus1[i]不存在)等与tile划分相关的参数。比如图12中,终端可以设置tiles_enabled_flag为1,设置num_tile_columns_minus1为1,设置num_tile_rows_minus1为0,设置uniform_spacing_flag为0(即tile是不平均分配的),设置column_width_minus1[0]为16。
[0169] 对于SS信息:终端可以将低分辨率的多个子码流作为slice,组合成一个tile数据,和高分辨率的tile数据进行拼接,每一个tile数据以slice的划分方式进行构建。终端对SS参数的头(header)信息first_slice_segment_in_pic_flag(第一个片段标识)、slice_segment_address(片段地址)等参数进行设定。比如图12中的排列形式,则每一帧的b2的SS参数的头信息中first_slice_segment_in_pic_flag设置为1,其余的first_slice_segment_in_pic_flag设置为0;每一帧的SS参数头信息中的b2、m3和m4的编码数据对应的slice_segment_address的值通过计算可以确定,图12中的slice_segment_address值分别设置为0、16、208。
[0170] 示例性的,如图13所示,假设1024×1024的子码流为b2,512×512的两个子码流分别为m3和m4,子码流b2包括4帧(frame)的数据(即A0~A3)且被封装在track b2中,子码流m3和m4也包括4帧的数据(B0~B3)且被封装在track m3和track m4中,则子码流b2、m3和m4拼接后的码流结构可以如图13中的码流C所示。SSH表示SS参数中的头(header)信息。
[0171] 本申请实施例中,通过在子码流中添加该子码流所包含的tile数据的数量的信息,使得终端可以确定可用于拼接的子码流,且当可用于拼接的子码流包括多个不同的分辨率时,可以通过将低分辨率的多个子码流作为slice,组合成一个tile数据,和高分辨率的tile数据进行拼接,从而可以实现不同分辨率的多个子码流之间的拼接。
[0172] 可选的,终端侧也可以向服务器侧请求,下载所有的码流,在终端侧根据用户行为,选择需要的码流,并进行解封装。然后,按照上述实施例所提供的码流拼接的方法,进行子码流拼接,以得到标准码流。
[0173] 在本申请的另一种可能的实现方式中,本实施例是针对上述实施例中关于子码流中包括的tile数据的数量信息添加在SEI消息中进行的扩展,针对不能用于拼接的子码流的处理方式作出一些改动。
[0174] 终端侧:
[0175] 根据用户行为,终端向服务器请求需要的码流,并对接收到的码流进行解封装。
[0176] 解析每个子码流的SEI消息sub_picture_info_aggregate(payloadSize),根据上述表1.1和表1.2中语法元素的值,判断每个子码流是否可用于码流拼接。当sub_pic_str_only_one_tile为1时表示子码流可用于拼接;当sub_pic_str_only_one_tile不为1时表示子码流不能用于拼接时,将该子码流直接解码,解码后的图像和拼接后的码流解码后的图像进行图像拼接,得到最后的显示图像。
[0177] 比如,如图14所示,str0是不能用于拼接的子码流,终端对子码流str0解码得到的图像包括sub0、sub1、sub4和sub5,拼接后的码流解码后的图像包括sub2和sub6,将二者进行图像拼接后得到的显示图像包括sub0~sub2和sub4~sub6。
[0178] 本申请实施例中,当确定子码流不能用于拼接时,可以直接对该子码流进行解码,并将解码后得到的图像与拼接码流解码后得到的图像进行图像拼接,得到最终的显示图像,从而与丢弃不能用于拼接的子码流相比,可以提高子码流的利用率。
[0179] 在本申请实施例的一种可选的方式中,本实施例中给出了OMAF文件格式中用于指示子码流中包括的tile数据的数量信息的语法元素和语义。具体地,改动的地方包括服务器侧对指示子码流中包括的tile数据的数量信息的生成和终端对子码流中包括的tile数据的数量信息的解析。
[0180] 服务器侧:
[0181] 将每个子码流进行封装,每个子码流可以独立地封装在一个track中,比如sub-picturetrack。可以在sub-picture track中加入所述子码流包括的tile数据的数量的语法描述信息,样例如下:
[0182] 在spco box中添加如下语法:
[0183]
[0184] 语义如下:
[0185] only_one_tile_presence_flag该值为1时表示当前track的码流可以参与拼接;该值为0时表示当前track的码流不能参与拼接。
[0186] 或者,在spco box中添加另一种表示方式,如下语法:
[0187]
[0188]
[0189] 语义如下:
[0190] tile_num_subpicture该值表示track的码流中的tile数量。
[0191] 终端侧:
[0192] 根据用户行为,终端向服务器请求需要的码流,并进行解封装。解封装的过程中,将针对spco box中的SubPictureCompositionBox进行解析,获得子码流中包括的tile数据的数量的语法信息,从而获得每个子码流能否用于拼接的信息,选择only_one_tile_presence_flag等于1的track进行后续处理。
[0193] 在本申请实施例的一种可能的实现方式中,本实施例添加了在ISOBMFF规定的文件格式中描述子码流包括的tile数据的数量信息。在文件格式中,针对子码流包括的tile数据的数量信息,在track中添加sample entry type(样本入口类型):‘onti’。当sample entry name为‘onti’时,表示当前track中的子码流包括一个tile数据,从而指示该子码流可用于拼接。
[0194] 在本申请实施例的一种可选的方式中,本实施例给出了在MPD中描述子码流中包括的tile数据的数量信息。
[0195] 服务器侧,在MPD文件中进行子码流中包括的tile数据的数量信息的描述示例如下:
[0196]
[0197] 本例中指定新的EssentialProperty属性onti@value,针对子码流中包括的tile数据的数量信息表述。onti@value属性描述如表4。当终端侧进行视频内容请求时,通过解析该元素获得该子码流包括的tile数据的数量信息,当数量大于1时可以参与拼接,否则不可以参与拼接。
[0198] 表4在"urn:mpeg:dash:mcsp:2014"中onti@value属性描述
[0199]Mcsp@value Description
Tile_num_subpicture specifies the number of tiles
[0200] 语法元素语义如下:
[0201] Tile_num_subpicture表示该track中含有的tile数目。
[0202] 此外,在MPD文件的representation字段中,也可添加子码流中包括的tile数据的数量信息。
[0203] 另外,一种替换方式是,也可以采用flag信息标识,针对子码流能否参与码流拼接的信息进行标识。onti@value属性描述如表5。当终端侧进行视频内容请求时,通过解析该元素获知该子码流能否参与码流拼接的信息。
[0204] 表5在"urn:mpeg:dash:mcsp:2014"中onti@value属性描述
[0205]
[0206] 语法元素语义如下:
[0207] only_one_tile_flag该值为1表示该track可以用于码流拼接;该值为0时,表示该track不能参与码流拼接。
[0208] 可选的,本申请实施例中的only_one_tile_flag也可以替换为merge_enable_flag,merge_enable_flag用于表示子码流是否可用于拼接的指示信息,本申请实施例中仅以only_one_tile_flag为例进行说明。
[0209] 此外,在MPD文件的representation字段中,也可添加子码流中包括的tile数据的数量信息。本实施例中,添加codecs字段值为”mcc”,当终端侧获取到这个信息后,表示当前子码流的预测运动矢量是受限的,预测像素不会越过子图像的某个或某些边界进行参考。
[0210] 在本申请的另一实施例中:
[0211] Figure 15show an example of how MCTS-based sub-picture tracks of the same resolution can be reconstructed to form a HEVC conforming bitstream.A 2x2tile grid has been used in the tile sets and each motion-constrained tile set sequence is included in one sub-picture track.Each tile set originated from sub-picture bitstream is treated as a slice in the reconstructed bitstream and slice segment header of each slice in the reconstructed bitstream should be modified accordingly.
[0212] To initialize HEVC decoder correctly,corresponding initialization data such as sequence parameter set and picture parameter set should be regenerated.
[0213] Details of slice segment header paramters and initialization paramters involved are as follows:
[0214] 1、In the slice segment header of each slice in reconstructed bitstream,first_slice_segment_in_pic_flag and slice_segment_address should be set accordingly.
[0215]slice_segment_header(){ Descriptor
first_slice_segment_in_pic_flag u(1)
…  
if(!first_slice_segment_in_pic_flag){  
…  
slice_segment_address u(v)
}  
…  
}  
[0216] 2、In video parameter set(VPS),profile_tier_level should be set accordingly
[0217]video_parameter_set_rbsp(){ Descriptor
…  
profile_tier_level(1,vps_max_sub_layers_minus1)  
…  
}  
profile_tier_level(profilePresentFlag,maxNumSubLayersMinus1){ Descriptor…  
general_level_idc u(8)
…  
for(i=0;iif(sub_layer_level_present_flag[i])  
sub_layer_level_idc[i] u(8)
}  
}  
[0218] 3、In sequence parameter set(SPS),pic_width_in_luma_samples and pic_height_in_luma_samples should be recalculated and set accordingly.[0219]seq_parameter_set_rbsp(){ Descriptor
…  
pic_width_in_luma_samples ue(v)
pic_height_in_luma_samples ue(v)
…  
}  
[0220] 4、In picture parameter set(PPS),parameters involved are as follows:
[0221]
[0222]
[0223] As the example show in figure 15,tiles_enabled_flag should be set to 1,num_tile_columns_minus1and num_tile_rows_minus1shoud be set to 1,uniform_spacing_flag should be set to 1,loop_filter_across_tiles_enabled_flag and pps_loop_filter_across_slices_enabled_flag should be set to 0.
[0224] 翻译如下:
[0225] 图15中示出了基于MCTS编码的相同分辨率的子图像轨迹如何重构为一个HEVC标准码流的例子。在tile集合中使用了2x2的tile网格,每个运动受限的tile集序列被包含在一个子图像轨迹中。在重构码流时,来自子图像码流中的每个tile集被作为一个片,每个片段的头部需要相应的进行修改。其中,在一种可能的实现方式中,图15中的tile边界线和slice边界线相同。
[0226] 为了正确地初始化HEVC解码器,相应的需要重新生成初始化数据,比如序列参数集和图像参数集。
[0227] 所涉及到的片段的头部的参数和初始参数的详细信息如上述4个表所示。
[0228] 如图15所示的示例中,tiles_enabled_flag应该被设置为1,num_tile_columns_minus1和num_tile_rows_minus1应该被设置为1,uniform_spacing_flag应该被设置为1,loop_filter_across_tiles_enabled_flag和pps_loop_filter_across_slices_enabled_flag应该被设置为0。
[0229] 在本申请的另一实施例中:
[0230] For sub-picture tracks with several resolutions,the reconstructed bitstream should comply with HEVC tile and slice syntax.Figure 16give an example of how to reconstruct from tracks with different resolutions.[0231] Notice that bitstreams from sub-picture track 3and 4are reconstructed to form one tile with two slices.
[0232] In some cases,bitstreams from different resolutions might not be able to form HEVC conforming bitstream in anyway,then in such cases,OMAF player may choose to do reconstruction from same resolution and enable two HEVC decoders for different resolutions.
[0233] 翻译如下:
[0234] 对于不同分辨率的子图像轨迹,重构的码流应该符合HEVC tile和slice语法。图16示出了如何使用不同分辨率的子图像轨迹重构码流。
[0235] 值得注意的是,来自track3和track4的码流被重构形成一个包括两个slice的tile。
[0236] 在某些情况下,来自不同分辨率的码流可能无法形成HEVC标准码流,在这种情况下,OMAF播放器可以选择相同的分辨率进行重构,并使用两个HEVC解码器对不同的分辨率的码流进行解码。
[0237] 在本申请实施例的另一种可能的实现方式中,本实施例提供了一种服务器装置,这种服务器是生成本文中所述的指示子码流中包括的tile数据的数量、或者用于指示子码流是否可用于拼接的信息的服务器,将信息写入码流的SEI,或者将信息以文中所述的方式写入文件等。该服务器可以不负责原始码流编码,比如可以是转码服务器,或只是生成这些信息的服务器等,用于保存带有本文所述信息的码流或文件。
[0238] 本申请实施例的方案通过在码流的SEI消息或者OMAF文件格式中加入关于码流中包括的tile数据的数量的信息,使得根据tile数据的数量确定可用于拼接的子码流可能。码流拼接处理,使得多个子码流在拼接后能够使用单个解码器在一次解码操作中将所有子码流进行解码,且无需传输额外的track信息,从而节省了带宽,同时也降低了系统层管理流的复杂度。
[0239] 图17是本申请实施例提供的计算机设备的硬件结构示意图。如图17所示,计算机设备可以作为媒体信息的处理装置的一种实现方式,也可以作为媒体信息的处理方法的一种实现方式,计算机设备包括处理器171、存储器172、输入/输出接口173和总线175,还可以包括通信接口174。其中,处理器171、存储器172、输入/输出接口173和通信接口174通过总线175实现彼此之间的通信连接。
[0240] 处理器171可以采用通用的中央处理器(central processing unit,CPU),微处理器,应用专用集成电路(application specific integrated circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的流媒体的信息的处理装置中的模块所需执行的功能,或者执行本发明方法实施例对应的流媒体的信息的处理方法。处理器171可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器171中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器171可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器172,处理器171读取存储器172中的信息,结合其硬件完成本申请实施例所提供的媒体信息的处理装置中包括的模块所需执行的功能,或者执行本申请方法实施例提供的流体信息的处理方法。
[0241] 存储器172可以是只读存储器(read only memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(random access memory,RAM)。存储器172可以存储操作系统以及其他应用程序。在通过软件或者固件来实现本申请实施例提供的媒体信息的处理装置中包括的模块所需执行的功能,或者执行本申请方法实施例提供的媒体信息的处理方法时,用于实现本申请实施例提供的技术方案的程序代码保存在存储器172中,并由处理器171来执行媒体信息的处理装置中包括的模块所需执行的操作,或者执行本申请方法实施例提供的媒体信息的处理方法。
[0242] 输入/输出接口173用于接收输入的数据和信息,输出操作结果等数据。
[0243] 通信接口174使用例如但不限于收发器一类的收发装置,来实现计算机设备与其他设备或通信网络之间的通信。可以作为处理装置中的获取模块或者发送模块。
[0244] 总线175可包括在计算机设备各个部件(例如处理器171、存储器172、输入/输出接口173和通信接口174)之间传送信息的通路。
[0245] 应注意,尽管图17所示的计算机设备仅仅示出了处理器171、存储器172、输入/输出接口173、通信接口174以及总线175,但是在具体实现过程中,本领域的技术人员应当明白,计算机设备还包括实现正常运行所必须的其他器件,例如还可以包括显示器,用于显示要播放的视频数据。同时,根据具体需要,本领域的技术人员应当明白,计算机设备还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,计算机设备也可仅仅包括实现本申请实施例所必须的器件,而不必包括图17中所示的全部器件。
[0246] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
[0247] 在本申请的另一实施例中,还提供一种可读存储介质,可读存储介质中存储有计算机执行指令,当一个设备(可以是单片机,芯片等)或者处理器执行上述方法实施例所提供的媒体信息的处理方法中的部分或者全部步骤。前述的可读存储介质可以包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
[0248] 在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备实施上述方法实施例所提供的媒体信息的处理方法中的部分或者全部步骤。
[0249] 最后应说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。