具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
参见图2,一种在重排分片中媒体数据的方法,该方法的执行主体包括内容准备模块、HTTP流媒体服务器或分发服务器等,本发明对此不做具体的限制,参见图2,具体步骤如下:
步骤101:将媒体内容进行切片,并将切片内容封装成符合要求的格式(如3GP格式),形成分片;
具体地,按照预定数据块大小将媒体内容进行切片;
参见图1,Segment(分片)中每个Movie Fragment(片段)由媒体数据的Moof(MovieFragment Box,描述结构)和Media Data(媒体数据)构成,媒体数据由Sample(样本)或Sub-sample(子样本)构成,在具体实现时,Sample(样本)或Sub-sample(子样本)存储在Track(存储单元)中。
其中,Moof中轨道片段的描述项Traf(Track Fragment Box)用于描述相应Track Fragment(轨道片段)中的媒体数据,具体地,Traf中的轨道片段运作描述项Trun(Track FragmentRun Box)用于描述Track Fragment中Sample的时间信息,如解码时间、合成时间,子样本信息描述项Subs(Sub-sample Information Box)用于描述Track Fragment中组成一个Sample的所有Sub-sample的存储字节大小。
下面,本实施例就以在Movie Fragment中的一个Track Fragment中重排媒体数据为例来进行相关说明,在Movie Fragment中其他Track Fragment中重排媒体数据的方法与此相同;
步骤102:Segment(分片)的Movie Fragment(片段)中满足重排属性的媒体数据进行物理重排序,使满足重排属性的媒体数据在物理上连续存储,构成与重排属性对应的level(子片段),其中,媒体数据由Sample或Sub-sample构成;
其中,重排属性为单一属性或任意属性的组合,具体地,属性包括视频视角、视频质量和帧率。
现举例说明如何将Track Fragment中满足重排属性的Sample进行物理重排序,如下所述:
原有Movie Fragment结构包括moof和Track Fragment,该Track Fragment存储了一路2D视频的样本;那么,按照单一属性,如按照2倍、4倍和8倍帧率,将该Track Fragment中存储的样本进行重排,具体地,将Track Fragment中存储的2倍帧率的I帧样本物理上连续存储,构成与2倍帧率对应的子片段,将Track Fragment中存储的4倍帧率I帧样本物理上连续存储,构成与4倍帧率对应的子片段,将Track Fragment中存储的8倍帧率的I帧样本在物理上连续存储,构成与8倍帧率对应的子片段,Track Fragment中存储的剩余的样本作为一个子片段。
现举例说明如何将Track Fragment中满足重排属性的Sub-sample进行物理重排序,使满足重排属性的Sub-sample在物理上连续存储,构成与重排属性对应的子片段,如下所述:
Segment中将多个视角的媒体数据存储为一个Track Fragment中,每个Sample包含了同一时刻多个视角视频帧,每个视角视频帧可构成一个Sub-sample;
该Track Fragment中的Sample按照解码顺序进行存储,其中,Sample由多个Sub-sample构成,则该Track Fragment中的Sample的存储结构如下:
{【sub-sample(0,0),sub-sample(0,1),…sub-sample(0,k)】,
【sub-sample(1,0),sub-sample(1,1),…sub-sample(1,m)】,
…
【sub-sample(N,0),sub-sample(N,1),…sub-sample(N,n)】}
其中,【sub-sample(0,0),sub-sample(0,1),…,sub-sample(0,k)】为Sample0,解码时间为第1s(秒);【sub-sample(1,0),sub-sample(1,1),…,sub-sample(1,m)】为Sample1,解码时间为第1.1s;、…、【sub-sample(N,0),sub-sample(N,1),…,sub-sample(N,n)】为SampleN,解码时间为第x秒;其中Sub-sample(i,j)表示第(i+1)个Sample的第(j+1)个Sub-sample,其中,k、m、n、可能相等也可能不等,本发明对此并不做具体的限制。
这里,该Track fragment对应的描述项Traf中的Trun按照解码顺序描述了该Trackfragment中Sample的解码时间,即描述了属于同一个Sample的所有Sub-sample的解码时间,Trun中对媒体数据Sample的描述顺序如:Trun[sample0,sample1,sample2,……,sampleN];Traf中的Subs则按照Sample的解码顺序描述了每个Sample中每个Sub-sample的存储字节大小,Subs的内容如下所示:
假定该Track Fragment中所有Sample的首个Sub-sample的重排属性相同,那么,将所有Sample中的首个Sub-sample进行物理重排序,使所有Sample中的首个Sub-sample在物理上连续存储构成一个子片段;
假定所有Sample中除去首个Sub-sample的其他Sub-sample的重排属性相同,将所有Sample中除去首个Sub-sample的其他Sub-sample进行物理重排序,使所有Sample中除去首个Sub-sample的其他Sub-sample在物理上连续存储就构成另外一个子片段;
这里需要说明的是,属于同一个Sample的Sub-sample具有相同的时间信息,如,Sample0的解码时间为第1s(秒),则Sample0中的子样本sub-sample(0,0),sub-sample(0,1),…,sub-sample(0,k)的解码时间皆为第1s,Sample1的时间信息为第1.1s,则Sample1中的子样本sub-sample(1,0),sub-sample(1,1),…sub-sample(1,m)的解码时间皆为第1.1s,……,SampleN中的子样本sub-sample(N,0),sub-sample(N,1),…sub-sample(N,n)的解码时间皆为第x秒;
那么,将相同重排属性的子样本进行物理上连续存储后构成子片段,该子片段中的子采样仍然按照原有样本的解码顺序进行存储,例如,由上述的说明可以知道,具有相同重排属性的sub-sample(0,0)属于Sample0,解码时间为第1秒;sub-sample(1,0)属于第1.1秒;……;sub-sample(N,0)属于SampleN,解码时间为第x秒;则,在该子片段中,具有相同重排属性的子样本的存储顺序为sub-sample(0,0),sub-sample(1,0),…sub-sample(N,0);
下面的示例则描述了上述两个子片段的存储结构:
{(sub-sample(0,0),sub-sample(1,0),…sub-sample(N,0)),
(sub-sample(0,1),…sub-sample(0,k),sub-sample(1,1),…sub-sample(1,m),sub-sample(N,1),…sub-sample(N,n))}
其中,一对()就表示了一个子片段;
具体地,当Track fragment中Sample包含多个Sub-sample时,本步骤还包括:
通过片段内的描述结构Moof中的第一描述项,如轨道片段运作描述项,按照子样本所属样本的解码顺序描述子样本的解码顺序;
具体地,由于物理重排后的Sub-sample在物理存储结构上有所变化,需要对Sub-sample添加相应的信息描述,如下:(一)、第一描述项Trun描述结构不变,仍然按照原有Sample的解码顺序描述Sample的时间信息,即属于该Sample的所有Sub-sample都具有相同的时间信息,重排后在一个子片段中的Sub-sample的存储顺序和排序前Sample的存储顺序仍然一致。且可通过Subs获得Sample和Sub-sample的对应关系,因此使用Sample时间信息描述所属的Sub-sample的时间信息;
并且Trun指向第一个Sample中第一个Sub-sample的物理位置。
通过片段内的描述结构Moof中的第二描述项,如子样本信息描述项,按照子样本所属样本的解码顺序描述子样本的存储字节大小;
具体地,第二描述项Subs描述结构不变,仍然按照原有Sample的解码顺序描述Sample中每个Sub-sample的字节存储大小。
通过片段内的描述结构Moof中新增的第三描述项标识子样本的物理存储结构;
具体地,由于重排后的Sub-sample的物理存储结构发生了变化,所以需要在Moof中添加第三描述项,该第三描述项用于标识Sub-sample的物理存储结构,定义如下:
class SampleOrderBox extends FullBox(‘sprd’,version=0,flags)
{ unsigned int(2)type;
}
其中,type为0表示按照某一重排属性对Sub-sample进行了物理重排;
通过片段内的描述结构Moof中新增的第四描述项按照子样本所属样本的解码顺序描述子样本与自身所属子片段的对应关系。
具体地,第四描述项用于描述Sub-sample与其所属子片段level的对应关系,第四描述项示例如下:
其中,第四描述项与Subs的结构类似,对sub-sample的描述顺序一致,仍然按照Sample中Sub-sample的存储顺序描述。结构参数level_identify定义了在每个Sub-sample所属level的标识,该标识可从预定数值开始(如1),且以所述预定数值递增,顺序和level的存储顺序一致。需要说明的是,当存在不属于任何level的Sub-sample时,所述不属于任何level的Sub-sample对应的level_identify标识为0。
例如,假定参数level_identify从1开始取值,下面结构则描述了上述划分后得到的两个level中的每个Sub-sample和level的对应关系,即每个Sample中的首个Sub-sample属于第一个level,其他的Sub-sample属于第二个level,那么,第四描述项的结构如下所示:
stlf[level1,level2,…level2,
level1,level2,…level2,
…
level1,level2,…level2,];
需要说明的是,上述第四描述项是一个可选项,当所有Sample中每个Sub-sample对应的level顺序一致时,可不定义;
例如,Sample0包含子样本Sub-sample(0,1)和Sub-sample(0,2),而这两个子样本分别对应子片段level1和level2,Sample1包含子样本Sub-sample(1,1)和Sub-sample(1,2),而这两个子样本分别对应子片段level1和level2,此时,由于所有Sample中只有两个Sub-sample,且该两个Sub-sample分别对应的两个level,Subs描述子样本的解码时间时,也就描述了子样本所属子片段的信息了,那么,此时,可不定义该第四描述项。
另外,需要重点说明的是,本发明实施例支持按照任意属性的组合对媒体数据进行重排的情况,现举例说明:
Segment中将多个视角的媒体数据存储在一个Track Fragment中,则每个Sample包含了同一时刻多个视角视频帧,每个视角视频帧可构成一个Sub-sample。
那么,为了满足2D终端快进快退的需要,将满足视角和帧率这两种属性要求的媒体数据进行物理重排,构成若干个子片段;例如,将表示视角1的2倍帧率的I帧的sub-sample物理上连续存储,构成一个子片段,将表示视角1的4倍帧率的I帧的sub-sample物理上连续存储,构成另一个子片段,等等。
步骤103:为子片段添加索引信息,该索引信息包括子片段的属性信息和位置信息;
需要知道的是,在一个Segment中,可按照某些重排属性对Movie Fragment的一些TrackFragment中的Sample进行物理重排序,物理重排序后连续存储的满足重排属性的Sample就构成若干个子片段level;也可按照某些重排属性对Movie Fragment的另一些Track Fragment中的Sub-sample进行物理重排序,物理重排序后连续存储的满足重排属性的Sub-Sample可构成若干个子片段level;
另外,一个分片内除包含若干个Movie Fragment外,还可包括分片索引项Sidx(SegmentIndexBox)、子分片索引项Ssix(SubsSubsegmentIndexBox)等索引项,用以描述分片内Movie Fragment的索引信息。例如,Ssix可用来描述level的位置信息及重排属性信息;而在具体操作时,这些索引项也可被单独抽取出来存储在一个索引文件中。
那么,为子片段添加索引信息具体地包括:
在分片内的索引项中添加子片段level的索引信息;或
在媒体展现描述MPD中添加子片段level的重排属性信息,在索引文件中添加子片段level的位置信息;或
在媒体展现描述MPD中添加子片段level的重排属性信息,在分片内的索引项中添加子片段level的位置信息;或
在索引文件中添加子片段level的索引信息。
其中,表1示例性的给出了在子分片索引项Ssix中描述level的位置信息,如下:
表1
分级 |
位置信息 |
level1 |
1000 |
Level2 |
1200 |
Level3 |
1400 |
Level4 |
1600 |
Level5 |
2000 |
…… |
…… |
相应的,在Ssix中添加level的重排属性,
表2示例性的给出了在分片内Ssix中描述了level的重排属性信息,如下:
表2
同样的,也可以在分片内的索引项Sidx中添加子片段level的位置信息及重排属性信息,添加方式与在Ssix中添加level的位置信息及重排属性信息相同,此处就不再赘述。
表3示例性的给出了在MPD中添加的level的属性信息,如下:
表3
重排属性 |
是否可选 |
说明 |
Representation |
|
|
…… |
|
|
SubRepresentation |
|
|
Level |
必选项 |
|
bandwidth |
必选项 |
level的带宽 |
trickModeAPR |
可选项 |
快捷操作时的帧率 |
ViewId |
可选项 |
Level对应的视角标识 |
qualitylevel |
可选项 |
Level对应的视频质量标识 |
…… |
…… |
…… |
由于Sidx、Ssix这些box描述的信息可被单独抽取出来存储在一个索引文件中。因此在索引文件中同样也可添加level的索引信息,添加方式与在Ssix中添加level的索引信息的方式类似,此处不再累述。
本发明实施例通过将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与所述重排属性对应的子片段;添加所述子片段的索引信息的技术方案的实现,将分片内的片段中的媒体数据按照不同重排属性进行排列构成与不同重排属性相对应的子片段,该子片段的重排属性为单一属性或属性组合,以便用户可以快速而准确的根据该不同重排属性的子片段的索引信息找到所需重排属性的子片段,并从中获取媒体数据。
实施例2
参见图3,一种服务端,该服务端可以是媒体数据准备模块、HTTP流媒体服务器或分发服务器等,本发明对此不做具体的限制,包括:切片模块200、重排模块201和添加模块202,下面详细介绍各个功能模块:
切片模块200,用于对媒体内容进行切片;
重排模块201,用于在切片过程中,将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与重排属性对应的子片段;
其中,媒体数据由样本或子样本构成;
其中,重排属性为单一属性或任一属性的组合,具体地一属性包括视频视角、视频质量和帧率。
添加模块202,用于添加子片段的索引信息,其中,索引信息包括子片段的重排属性信息和位置信息。
具体地,添加模块202包括:
第一添加单元2021,用于在分片内的索引项中添加子片段的索引信息;或
第二添加单元2022,用于在媒体展现描述MPD中添加子片段的重排属性信息,在索引文件中添加子片段的位置信息;或
第三添加单元2023,用于在媒体展现描述MPD中添加子片段的重排属性信息,在分片内的索引项中添加子片段的位置信息;或
第四添加单元2024,用于在索引文件中添加子片段的索引信息。
具体地,当重排模块201,用于将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与重排属性对应的子片段,媒体数据由子样本构成时,服务端还包括:
第一描述模块203,用于通过片段内的描述结构Moof中的第一描述项按照子样本所属样本的解码顺序描述子样本的解码顺序;
第二描述模块204,用于通过片段内的描述结构Moof中的第二描述项按照子样本所属样本的解码顺序描述子样本的存储字节大小;
第三描述模块205,用于通过片段内的描述结构Moof中新增的第三描述项标识子样本的物理存储结构。
第四描述单元206,用于通过片段内的描述结构Moof中新增的第四描述项按照子样本所属样本的解码顺序描述子样本与自身所属子片段的对应关系。
本发明实施例通过将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与所述重排属性对应的子片段;添加所述子片段的索引信息的技术方案的实现,将分片内的片段中的媒体数据制作成不同重排属性的子片段,该子片段的重排属性为单一属性或属性组合,以便用户可以快速而准确的根据该不同重排属性的子片段的索引信息找到所需重排属性的子片段,并从中获取媒体数据。
实施例3
参见图4,一种在抽取分片中媒体数据的方法,该方法的执行主体包括任何客户端,如手机、PC机等,本发明对此并不做具体限制,具体如下:
步骤301:获取子片段的索引信息,索引信息包括子片段的重排属性信息和位置信息;
步骤302:根据索引信息计算与预定重排属性对应的子片段的字节范围;
步骤303:根据字节范围请求与预定重排属性对应的子片段;
步骤304:接收与预定重排属性对应的子片段中的媒体数据。
其中,媒体数据由样本或子样本构成;
其中,重排属性为单一属性或任意属性的组合,具体地,属性包括视频视角、视频质量和帧率。
本发明实施例通过根据所述索引信息计算与预定重排属性对应的子片段的字节范围;根据所述字节范围请求得到所述与预定重排属性对应的子片段;接收所述与预定重排属性对应的子片段中的媒体数据的技术方案的实现,客户端可以快速而准确地在分片中抽取与预定重排属性对应的媒体数据。
实施例4
参见图5,一种抽取分片中媒体数据的方法,该方法的执行主体包括任何客户端,如手机、PC机等,本发明对此并不做具体限制,具体步骤如下:
步骤401:向服务器发送MPD请求;
具体地,客户端通过外带方式获得MPD(Media Presentation Description,媒体呈现描述)的URL(Uniform Resource Locator,统一资源定位符),通过该URL向分发服务器发送MPD请求;服务器在接收到该MPD请求后,将MPD信息发送给客户端;
步骤402:接收服务器发送的MPD信息,并从该MPD信息中获取分片(Segment)地址;
步骤403:获取分片中子片段level的索引信息,该索引信息包括level的重排属性信息和位置信息;
其中,重排属性为单一属性或任意属性的组合,具体地,属性包括视频视角、视频质量和帧率。
具体地,获取分片中level的索引信息包括:
根据获取的分片地址及预设字节范围向服务器发送分片请求以获取分片内的索引项,并从该索引项中获取level的索引信息,其中,本发明实施例中预设字节范围优选为0到1000的字节范围;
或者
从MPD中获取level的属性信息,根据获取的分片地址及预设字节范围向服务器发送分片请求以获取分片内的索引项,并获取索引项中描述的level的位置信息;或者
从MPD中获取level的属性信息,根据MPD中获取索引文件的地址,且根据该获取的索引文件的地址向服务器获取所述索引文件以得到所述索引文件中存储的level的位置信息,从而得到子片段的索引信息;或者
根据MPD中获取索引文件的地址,且根据该获取的索引文件的地址向服务器获取所述索引文件以得到所述索引文件中存储的level的索引信息。
步骤404:根据索引信息获得与预定重排属性对应的level的字节范围;
具体地,根据索引信息获得与预定重排属性对应的level的字节范围,包括:
在获取的子片段的重排属性信息中,查找得到与预定重排属性相匹配的子片段level的重排属性信息;
在获取的子片段的位置信息中,根据所述与预定重排属性相匹配的level的重排属性信息查找该level的位置信息;
根据所述与重排属性相匹配的level的位置信息计算得到所述与预定重排属性相匹配的level的字节范围。
步骤405:根据计算的字节范围向服务器请求与预定重排属性对应的level。
具体地,根据计算的字节范围及分片地址向服务器发送请求;服务器在接收到该请求后,将该分片地址对应的字节范围内的level发送给客户端。
步骤406:接收服务器返回的level并从中获取媒体数据。
本发明实施例通过根据所述索引信息计算与预定重排属性对应的子片段的字节范围;根据所述字节范围请求所述与预定重排属性对应的子片段;接收所述与预定重排属性对应的子片段中的媒体数据的技术方案的实现,可以快速而准确地在分片中获取与预定重排属性对应的媒体数据。
实施例5
参见图6,一种客户端,该客户端具体可以为手机、PC机等用户终端,本发明对此并不做具体限制,包括:获取模块501、计算模块502、请求模块503和接收模块504,下面详细介绍各个功能模块:
获取模块501,用于获取子片段的索引信息,索引信息包括子片段的重排属性信息和位置信息;
计算模块502,用于根据索引信息计算与预定重排属性对应的子片段的字节范围;
请求模块503,用于根据字节范围请求得到与预定重排属性对应的子片段;
接收模块504,用于接收与预定重排属性对应的子片段中的媒体数据。
其中,重排属性为单一属性或任意属性的组合,具体地,属性包括视频视角、视频质量和帧率。
具体地,获取模块501包括:
第一获取单元5011,用于获取分片内的索引项中存储的子片段的索引信息;或
第二获取单元5012,用于获取媒体展现描述MPD中存储的子片段的重排属性信息,并获取分片内索引项中存储的子片段的位置信息,从而得到子片段的索引信息;或
第三获取单元5013,用于获取媒体展现描述MPD中存储的子片段的重排属性信息,并获取索引文件中存储的子片段的位置信息,从而得到子片段的索引信息;或
第四获取单元5014,用于获取索引文件中存储的子片段的索引信息。
计算模块502包括:
第一查找单元5021,用于在子片段的重排属性信息中,查找与预定重排属性相匹配的子片段的重排属性信息;
第二查找单元5022,用于在子片段的位置信息中,根据与预定重排属性相匹配的子片段的重排属性信息查找与预定重排属性相匹配的子片段的位置信息;
计算单元5023,用于根据与预定重排属性相匹配的子片段的位置信息计算得到与预定重排属性相匹配的子片段的字节范围。
本发明实施例通过根据所述索引信息计算与预定重排属性对应的子片段的字节范围;根据所述字节范围请求所述与预定重排属性对应的子片段;接收所述与预定重排属性对应的子片段中的媒体数据的技术方案的实现,可以快速而准确地在分片中获取与预定重排属性对应的媒体数据。
实施例6
参见图7,本发明实施例提供了一种重排并抽取分片中媒体数据的系统,该系统包括服务端61和客户端62,其中,服务端61具体可以为媒体数据准备模块、HTTP流媒体服务器或分发服务器等服务端,客户端具体可以为手机、PC机等用户终端,下面详细介绍上述系统:
具体地,服务端61包括:
切片模块610,用于对媒体内容进行切片;
重排模块611,用于在切片的过程中,将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与重排属性对应的子片段,媒体数据由样本或子样本构成;
添加模块612,用于添加子片段的索引信息,索引信息包括子片段的重排属性信息和位置信息;
发送模块613,用于向客户端发送与预定重排属性对应的子片段中的媒体数据;
客户端62包括:
获取模块621,用于向服务端获取子片段的索引信息,索引信息包括子片段的重排属性信息和位置信息;
计算模块622,用于根据索引信息计算与预定重排属性对应的子片段的字节范围;
请求模块623,用于根据字节范围向服务端请求得到与预定重排属性对应的子片段;
接收模块624,用于接收服务端发送的与预定重排属性对应的子片段中媒体数据。
本发明实施例通过将分片内的片段中满足重排属性的媒体数据在物理上连续存储,构成与所述重排属性对应的子片段;添加所述子片段的索引信息的技术方案的实现,将分片内的片段中的媒体数据按照不同重排属性进行排列构成与不同重排属性相对应的子片段;获取子片段的索引信息;根据所述索引信息计算与预定重排属性对应的子片段的字节范围;根据所述字节范围请求所述与预定重排属性对应的子片段;接收所述与预定重排属性对应的子片段中的媒体数据的技术方案的实现,客户端可以快速而准确地在分片中获取与预定重排属性对应的媒体数据。
以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。