一种将多流视频保存为单视频文件的方法与流程

文档序号:16901319发布日期:2019-02-19 18:01阅读:405来源:国知局
一种将多流视频保存为单视频文件的方法与流程

本发明涉及视频处理技术领域,具体涉及一种将多流视频保存为单视频文件的方法。



背景技术:

音视频录制场景非常多,在录制多个场景时可以在录制时通过场景切换录制成一路视频文件,由于多场景合成一路视频布局已经固定,对回放观看无法调整,而且对后期非线性编辑很难操作。另一种可以对每个场景分别录制生成多个视频文件导致分类复杂,回放观看不方便。

目前的单流单视频缺点在于对于后期非线性编辑实现非常复杂,而且单流单视频在录制多场景时是依靠场景切换,导致其他场景不会出现在文件中丢失场景。单流多文件可以录制多场景但对视频分类管理麻烦而且多个文件都独立没有关联导致不利于回放观看。

因此,提供一种解决上述问题的将多流视频保存为单视频文件的方法就很有必要。



技术实现要素:

本发明所要解决的技术问题是现有技术中存在的相互不关联、不适合回看的技术问题。提供一种新的将多流视频保存为单视频文件的方法,该将多流视频保存为单视频文件的方法具有实现单文件多流的基础上、利于回看的特点。

为解决上述技术问题,采用的技术方案如下:

一种将多流视频保存为单视频文件的方法,所述方法包括:

步骤1,根据每路媒体流的编码数据格式为每路媒体流对应的数据链路定义流编号id,各路媒体流的流编号id不重复;

步骤2,根据媒体流的类型定义媒体流编码后的数据格式;

步骤3,根据流编号id分别写入每路音频编码后的数据或视频的编码后的数据到数据存储中,保存为单视频文件。

本发明的工作原理:媒体流之间的依赖关系存储在文件头部分,由标头对象headerobjec,数据对象dataobject,索引对象indexobject三个部分组成。headerobject:在文件开始写入一个全局的guid,包含所有在dataobject中需要说明的信息。dataobject:由多个按照发送时间顺序排列的数据包构成,并且可以来自多个不同的流:其中包含64位的数据包总长字段,用于说明当前文件包含的数据包数目,通常是等长的,一个数据包中可以包含一个或多个有效负载/载荷payload。indexobjects:包含视频流的基于时间的索引序列,其中索引之间的间隔是固定的,把编码后的音视频数据通常按照这三个部分保存为文件。由于存储是每一个完整的媒体流,使得可以按每路流的编码数据格式为每个数据链路通过定义的不重复的流编号id进行关联,根据流编号id分别写入每路音视频的编码后的数据,

而且后期编辑也可以根据流编号id分别进行处理。

上述方案中,为优化,进一步地,所述步骤1包括:

步骤a1,定义标头对象headerobject包括一个文件属性对象、一个头扩展对象以及至少一个流属性对象;定义媒体流以及定义媒体流对应的属性为流属性对象;

步骤a2,定义媒体流属性对象类型的对象标识为自循环从读入的数据中查找流属性对象类型对应的128位id;

步骤a3,根据自媒体流中获取16字节的流属性对象类型字段,判断媒体流的数据类型;

步骤a4,根据媒体流的数据类型进行type-specificdata数据解析,同时解析流编号id。

进一步地,步骤a4中的根据媒体流的数据类型进行type-specificdata数据解析包括:

步骤b1,媒体流的数据类型是asf_video_media型时,则进行视频媒体类型的type-specificdata数据解析;采用bitmapinfoheader类型结构执行步骤2;

步骤b2,媒体流的数据类型是asf_audio_media类型上,则进行音频媒体类型的type-specificdata数据解析;采用waveformatex类型结构执行步骤2;

步骤b3,媒体流的数据类型是asf_command_media型时,则直接执行步骤2。

进一步地,所述步骤a4包括:

步骤c1,计算数据类型对应的type-specificdate的长度,使用的获取type-specificdate的长度来解析第三层的type-specificdata数据

步骤c2,跳过errorcorrectiondata的4字节长度字段;

步骤c3,定义errorcorrectiondata后依次排列的7位streamnumber,8位reserved,以及1位encryptedcontentflag;所述8位reserved均为0,1位encryptedcontentflag为0时解析当前媒体流内的date字段,1位encryptedcontentflag为1时不解析当前媒体流内的date字段;所述7位streamnumber与0x7f进行与运算计算出所述流编号id;

步骤c4,跳过4字节的reserved字段,解析第三层的type-specificdata。

进一步地,所述步骤2中包括:

步骤d1,根据媒体流的数据类型解析第三层的type-specificdata,同时记录第二层的type-specificdatalength参数;

步骤d2,根据第二层的type-specificdatalength参数设置位深,同时判断是否要解析第三层中的cbsize和额外信息;

如果type-specificdatalength=14,位深定义8,仅解析第三层中的cbsize;

如果type-specificdatalength≥18,需要获取cbsize(16bit);将额外信息添加在waveformatex结构的结尾;

如果type-specificdatalength不是以上2种值,将位深定义为解析ype-specificdatalength靠后的16bit的值得到的wbitspersample字段。

本发明的有益效果:本发明存储的是每一个完整的媒体流,使得可以按每路流的编码数据格式为每个数据链路通过定义的不重复的流编号id进行关联,根据流编号id分别写入每路音视频的编码后的数据。可伸缩的媒体类型为动态创建媒体类型,代理设置可以写入多流数据。可扩展的媒体类型非常有效的灵活定义媒体类型使得存储后的媒体流逻辑上都是相互独立的,各个媒体流之间的依赖关系存储在文件头部分,而且每路音视频流可以分别采用不同的编码压缩的方式。

多流单文件可以录制拍摄的每路场景可以形成单个文件,画面场景没有丢失为后期非线性编辑非常方便,容易分类,多场景在一个文件中回放观看只需要打开一个文件。多流数据组合形式灵活形成的文件体积小,节省带宽适合网络传输。

附图说明

下面结合附图和实施例对本发明进一步说明。

图1,实施例1中的方法示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

实施例1

本实施例提供一种将多流视频保存为单视频文件的方法,如图1,所述方法包括:

步骤1,根据每路媒体流的编码数据格式为每路媒体流对应的数据链路定义流编号id,各路媒体流的流编号id不重复;

步骤2,根据媒体流的类型定义媒体流编码后的数据格式;

步骤3,根据流编号id分别写入每路音频编码后的数据或视频的编码后的数据到数据存储中,保存为单视频文件。

具体地,所述步骤1包括:

步骤a1,定义标头对象headerobject包括一个文件属性对象、一个头扩展对象以及至少一个流属性对象;定义媒体流以及定义媒体流对应的属性为流属性对象;

步骤a2,定义媒体流属性对象类型的对象标识为自循环从读入的数据中查找流属性对象类型对应的128位id;

步骤a3,根据自媒体流中获取16字节的流属性对象类型字段,判断媒体流的数据类型;

步骤a4,根据媒体流的数据类型进行type-specificdata数据解析,同时解析流编号id。

具体地,步骤a4中的根据媒体流的数据类型进行type-specificdata数据解析包括:

步骤b1,媒体流的数据类型是asf_video_media型时,则进行视频媒体类型的type-specificdata数据解析;采用bitmapinfoheader类型结构执行步骤2;

步骤b2,媒体流的数据类型是asf_audio_media类型上,则进行音频媒体类型的type-specificdata数据解析;采用waveformatex类型结构执行步骤2;

步骤b3,媒体流的数据类型是asf_command_media型时,则直接执行步骤2。

具体地,所述步骤a4包括:

步骤c1,计算数据类型对应的type-specificdate的长度,使用的获取type-specificdate的长度来解析第三层的type-specificdata数据

步骤c2,跳过errorcorrectiondata的4字节长度字段;

步骤c3,定义errorcorrectiondata后依次排列的7位streamnumber,8位reserved,以及1位encryptedcontentflag;所述8位reserved均为0,1位encryptedcontentflag为0时解析当前媒体流内的date字段,1位encryptedcontentflag为1时不解析当前媒体流内的date字段;所述7位streamnumber与0x7f进行与运算计算出所述流编号id;

步骤c4,跳过4字节的reserved字段,解析第三层的type-specificdata。

具体地,所述步骤2中包括:

步骤d1,根据媒体流的数据类型解析第三层的type-specificdata,同时记录第二层的type-specificdatalength参数;

步骤d2,根据第二层的type-specificdatalength参数设置位深,同时判断是否要解析第三层中的cbsize和额外信息;

如果type-specificdatalength=14,位深定义8,仅解析第三层中的cbsize;

如果type-specificdatalength≥18,需要获取cbsize(16bit);将额外信息添加在waveformatex结构的结尾;

如果type-specificdatalength不是以上2种值,将位深定义为解析ype-specificdatalength靠后的16bit的值得到的wbitspersample字段。

尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员能够理解本发明,但是本发明不仅限于具体实施方式的范围,对本技术领域的普通技术人员而言,只要各种变化只要在所附的权利要求限定和确定的本发明精神和范围内,一切利用本发明构思的发明创造均在保护之列。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1