CN115589506A - 一种mp4格式音视频文件生成方法、系统及计算机储存介质 - Google Patents
一种mp4格式音视频文件生成方法、系统及计算机储存介质 Download PDFInfo
- Publication number
- CN115589506A CN115589506A CN202211177888.7A CN202211177888A CN115589506A CN 115589506 A CN115589506 A CN 115589506A CN 202211177888 A CN202211177888 A CN 202211177888A CN 115589506 A CN115589506 A CN 115589506A
- Authority
- CN
- China
- Prior art keywords
- data block
- video
- audio
- frame
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/84—Generation or processing of descriptive data, e.g. content descriptors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/845—Structuring of content, e.g. decomposing content into time segments
- H04N21/8455—Structuring of content, e.g. decomposing content into time segments involving pointers to the content, e.g. pointers to the I-frames of the video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/76—Television signal recording
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明涉及一种MP4格式音视频文件生成方法、系统及计算机储存介质,方法包括:获取音视频数据流;音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应音视频帧数据信息每一帧的帧索引信息;分别创建ftyp数据块、mdat数据块、Smoovbox数据块及moov box数据块,Smoov box数据块用以储存音视频帧数据信息对应的媒体信息及关键帧索引信息;判断当前写入moov box数据块的对应帧的索引信息是否为关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并使当前对应帧的索引信息生效;监测音视频数据流的传输状态,若传输结束,生效moov box数据块以生成MP4格式文件。保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。
Description
技术领域
本发明涉及音视频领域,特别是涉及一种MP4格式音视频文件生成方法、系统及计算机储存介质。
背景技术
MP4格式文件是当前最为通用的音视频录像格式之一。每个格式MP4文件包含了若干个box数据块,MP4里的所有数据,都是以一个个box组装在一起的。一个完整的能被通用播放器正常播放的MP4文件至少包含了三个box数据块,分别是ftyp数据块,mdat box数据块及moov box数据块。其中,ftyp数据块用以储存MP4文件开头的标识信息,mdat box数据块里储存了实际的音视频媒体数据信息,moov box数据块里则存放了音视频流的媒体信息和音视频流数据中每一帧数据的时域空域索引信息,包括时间戳、数据大小和在文件中的索引地址信息。三个box数据块中任何一个缺失或不完整,将倒致整个MP4录像文件无法正常播放。
监控摄像头、摄像机、手机、机顶盒、计算机桌面、游戏机、医疗手术录像等硬件设备实时录像生成MP4格式文件通常是在音视频流数据写入完成后即录像结束时生成音视频媒体信息和时域空域索引信息并写入文件末尾位置。当设备意外断电、死机、软件崩溃或存储设备意外断开等异常状况时,导致录像过程异常终止,视频文件录制出错,moov box数据块媒体信息和索引信息未能写入文件,因而无法从mdat box数据块中读取媒体数据和索引信息,导致该录像MP4格式文件无法正常播放。
发明内容
基于此,有必要针对录像异常终止,moov box数据块信息缺失MP4录像文件无法正常播放的问题,提供一种MP4格式音视频文件生成方法、系统及计算机储存介质。
一种MP4格式文件生成方法,所述方法包括:
创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息;
创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件;
创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息;
创建Smoov box数据块,判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoov box数据块内的所述关键帧索引信息生效;
监测所述音视频数据流的传输状态,若传输结束,生效moov box数据块以生成所述MP4格式文件。
本发明上述实施方式通过引入精简的moov box数据块用以在录像过程中写入关键帧的索引数据,在录像结束时再写入完整moov box,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。
在其中一个优选实施方式中,所述将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件的步骤,包括:
在当前所述mdat数据块预留储存空间;
在所述储存空间写入Smoov box数据块,并更新当前所述mdat数据块,以使储存至Smoov box数据块的关键帧索引信息生效。
在其中一个优选实施方式中,所述在当前所述mdat数据块预留储存空间,包括:
判断当前mdat数据块的预留空间与Smoov box数据块的大小关系,若Smoov box数据块空间值大于所述当前mdat数据块的预留空间值,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值;
将mdat数据块的预留空间值加入至所述mdat数据块原有的空间值,以更新所述mdat数据块的空间值。
本发明上述实施方式中可防止因moov box大小不断增长导致moov box更新频率下降带来的抗录像异常终止能力的降低和写moov box数据卡顿对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box索引信息空间导致的存储空间浪费。
在其中一个优选实施方式中,所述当前mdat数据块的预留空间的大小初始设定和更新方法包括:
所述mdat box数据块的预留空间大小取当前最大媒体数据帧大小的整数倍或当前Smoov box数据块空间大小两者中的较大值。
具体地,在其中一个优选实施方式中,设定mdat box数据块预留空间大小值为N倍(为节省预留存储空间,N可选择一个较小的值,例如N=2)当前最大音视频帧数据大小,特殊的,首次设置时,最大音视频帧数据大小即为第一帧音视频数据大小,并由此预设mdatbox数据块的初始空间值,并在录像文件中为mdat数据块预留存储空间。
接着,随着音视频数据流的持续写入,将mdat数据块预留空间大小更新为当前最大媒体数据帧大小的N倍,并判断当前mdat数据块当前的预留空间与Smoov box数据块所占空间的大小关系,若Smoov box数据块空间值大于所述当前mdat数据块的预留空间,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值。将mdat数据块的预留空间值加入至所述mdat数据块原有的空间值,以更新所述mdat数据块的空间值。
在其中一个优选实施方式中,所述方法还包括:
获取音视频数据流对应的第一帧数据信息;
将所述的第一帧数据信息写入mdat数据块,将第一帧数据信息对应的媒体信息及索引信息写入Smoov box数据块及moov box数据块。
在其中一个优选实施方式中,所述获取音视频数据流,还包括:
对所述音视频数据流进行解码。
在其中一个优选实施方式中,所述判断当前写入moov box数据块的对应帧的索引信息是否为关键帧索引信息,包括:
根据音视频编码器的类型及音视频关键帧标志识别判断当前媒体数据帧是否为关键帧索引信息。
在其中一个优选实施方式中,所述媒体信息包括:所述音视频数据流的分辨率、采样率、时长、编码器类型;所述索引信息包括:数据帧对应的时间戳、数据帧大小和数据帧在文件中的数据索引地址。
本发明上述实施方式通过引入精简的Smoov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整Smoov box数据块,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。本发明上述实施方式中可防止因moov box数据块大小不断增长导致moov box数据块更新频率下降带来的抗录像异常终止能力的降低和写moov box数据块卡顿对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box数据块索引信息空间导致的存储空间浪费。
一种MP4格式文件名生成系统,包括:
数据流获取模块,用以创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息;
mdat数据块创建模块,用以创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件;
创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息;
创建Smoov box数据块,判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoov box数据块内的所述关键帧索引信息生效;
文件生成模块,用以监测所述音视频数据流的传输状态,若传输结束,生效moovbox数据块以生成所述MP4格式文件。
本发明上述实施方式通过引入精简的Smoov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整Smoov box,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。
一种计算机储存介质,所述计算机可执行指令在由计算机处理器执行时实现以上所述的任一项所述的MP4格式文件生成方法。
本发明上述实施方式通过上述计算机储存介质执行上述MP4格式文件生成方法,引入精简的Smoov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整Smoov box,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。
附图说明
图1为本发明第一优选实施方式中的一种MP4格式音视频文件生成方法的流程图;
图2为本发明第一优选实施方式中的一种MP4格式音视频文件生成方法的步骤S40的细分步骤流程图;
图3为本发明第二优选实施方式中的一种MP4格式音视频文件生成系统的模块示意图;
图4为本发明第二优选实施方式中的一种MP4格式音视频文件生成系统的Smoovbox数据块创建模块的模块示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明的是,当元件被称为“设置于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的,并不表示是唯一的实施方式。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
如图1所示,本发明第一优选实施方式公开了一种MP4格式文件生成方法,所述方法包括:
S10:创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息。
本实施方式中,上述创建录像文件是为了获取上述音视频数据流,上述获取音视频数据流中,本步骤还可以包括对所述音视频数据流进行解码。具体地,在视频录制开始,设置录像音视频编码器类型,通过录像音视频编码器获取上述音视频数据流对应的上述视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息等。
本步骤中,当视频开始录制,上述步骤S10便可以获取该视频的音视频数据流,该音视频数据流可以包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息等。
进一步地,本实施方式中,上述音视频标识信息用以标识所要生成的MP4格式文件的文件头信息,换言之,音视频标识信息是上述音视频数据流的ftyp字段,该ftyp字段用于记录该MP4格式的编码相关信息,例如所需储存的文件所要遵循何种音视频数据存储规范(文件格式),以及该规范的版本号、兼容性等信息。
上述音视频媒体信息包括音视频数据流的分辨率、帧率、采样率、时长、编码器类型等信息。上述帧索引信息包括上述视频数据流对应帧的时间戳、数据帧大小及对应数据帧在所要生成的MP4文件中的数据索引地址。
S20:创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件。
本步骤中,创建ftyp数据块并将其写入录像文件,所述ftyp数据块用以储存所述音视频标识信息,ftyp数据块用以存储该mp4文件遵循何种音视频数据存储规范(文件格式),以及该规范的版本号、兼容性等信息。
创建mdat数据块,上述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件,该音视频帧数据信息主要是指若干视频帧或音频帧的的集合信息。
S30:创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息
创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息,本实施方式中,上述媒体信息可以包括所要创建的MP4文件的分辨率、帧率、采样率、时长、编码器类型、以及文件中每一帧音频或视频帧的时间戳、时长、帧大小等信息,以及每一个音视频帧在文件中的数据索引地址。
S40:创建Smoov box数据块,判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoovbox数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoovbox数据块内的所述关键帧索引信息生效;
本步骤中,所创建的Smoov box数据块格式与moov box数据块相同,该Smoov box数据块用以储存所述音视频帧数据信息对应的媒体信息及关键帧索引信息,与上述moovbox数据块同样的,本实施方式中,上述媒体信息可以包括文件的分辨率、采样率、时长、编码器类型、以及文件中每一关键帧音频或视频帧的时间戳、时长、帧大小等信息,以及每一个音视频帧在文件中的数据索引地址。
具体地,本实施方式中可以根据视频编码器的类型及视频关键帧标志识别判断当前媒体数据帧是否为关键帧索引信息。若当前媒体数据帧判断为视频关键帧时,将该帧时间戳、数据大小和对应在文件中的索引信息更新到Smoov box数据块中以获得新的Smoovbox索引信息。以H.246视频编码器编码的视频录像为例,首先找到3字节或4字节的视频帧起始码0000 01或00 00 00 01,接着判断紧接下来的一个字节值是否等于0x65,若是,该视频数据帧为关键帧索引信息,否则,为非关键帧索引信息。
更详细地说,本步骤中,上述判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息中,所述方法还包括:
获取音视频数据流对应的第一帧数据信息;
将所述的第一帧数据信息写入mdat数据块,并将第一帧数据信息对应的媒体信息及索引信息写入Smoov box数据块及moov box数据块。
本实施方式中默认上述音视频数据流的第一帧数据为关键帧数据,将音视频数据流的第一帧音视频帧数据信息储存至上述mdat数据块内,且将上述第一帧音视频帧数据信息对应的媒体信息及索引信息储存至上述moov box数据块及Smoov box数据块内。接着在后续对音视频数据流判断中引用上述根据视频编码器的类型及视频关键帧标志识别判断当前媒体数据帧是否为关键帧索引信息的判断步骤。
结合图2所示,上述将当前对应帧的索引信息写入至Smoov box数据块并将Smoovbox数据块写入录像文件使之前所有关键帧的索引信息生效的步骤中,具体可以包括以下细分步骤:
S41:在当前所述mdat数据块预留储存空间;
本细分步骤中,在开始接收音视频数据流时,设定mdat box数据块预留空间大小值为N倍当前最大音视频帧数据大小,特殊的,首次设置时,最大音视频帧数据大小即为第一帧音视频数据大小,并由此预设mdat box数据块的初始空间值,并在录像文件中为mdat数据块预留存储空间。
具体地,在其中一个优选实施方式中,设定mdat box数据块预留空间大小值为N倍(为节省预留存储空间,N可选择一个较小的值,例如N=2)当前最大音视频帧数据大小,特殊的,首次设置时,最大音视频帧数据大小即为第一帧音视频数据大小,并由此预设mdatbox数据块的初始空间值,并在录像文件中为mdat数据块预留存储空间。
接着,随着音视频数据流的持续写入,将mdat数据块预留空间大小更新为当前最大媒体数据帧大小,并判断当前mdat数据块当前的预留空间与Smoov box数据块所占空间的大小关系,若Smoov box数据块空间值大于所述当前mdat数据块的预留空间,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值。将mdat数据块的预留空间值加入至所述mdat数据块原有的空间值,以更新所述mdat数据块的空间值。
S42:在所述储存空间写入Smoov box数据块,并更新当前所述mdat数据块,以使储存至Smoov box数据块的关键帧索引信息生效。
本细分步骤中,在录像文件中上述已更新的mdat数据块的预留空间后写入当前Smoov box数据块的对应帧的索引信息,以使当前Smoov box数据块内的音视频流对应的媒体信息及索引信息生效。
接着,持续将输入流的当前媒体数据帧写入至mdat box数据块后的预留空间,为每帧数据更新moov box索引信息缓存,将关键帧对应的媒体信息包括时间戳、数据大小和写入在文件中的索引信息更新到Smoov box数据块,并更新写入录像文件中mdat box数据块预留存储空间后的Smoov box数据块,并获得新的当前Smoov box大小值。
每次写入当前媒体数据帧前,判断需写入的媒体数据帧大小与已写入数据大小之和是否大于等于当前mdat数据块大小,若大于当前mdat数据块,执行上述若Smoov box数据块空间值大于所述当前mdat数据块的预留空间,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值,并根据mdat数据块的预留空间值大小在录像文件中当前mdat数据块后预留新的存储空间,然后,在录像文件中新预留存储空间后重新写入当前Smoovbox数据块,并将mdat数据块新的预留空间值加入至所述mdat数据块原有的空间值,并用新的mdat数据块大小更新录像文件中所述当前mdat数据块大小字段,以使当前Smoov box数据块内的音视频流对应的媒体信息及索引信息生效;若小于等于当前mdat数据块,持续执行上述当前媒体数据帧写入至mdat box数据块后的预留空间,为每帧数据更新moov box索引信息缓存,将关键帧对应的媒体信息包括时间戳、数据大小和写入在文件中的索引信息更新到Smoov box数据块并更新写入录像文件中mdat box数据块预留存储空间后的Smoovbox数据块,并获得新的当前Smoov box大小值;直至所述音视频数据流传输写入结束。
录像文件中为mdat数据块预留新的存储空间大小必须足够大以确保在新的mdat数据块预留存储空间之后写入新的moov box数据块时不会把旧的moov box数据块数据覆盖(溢出),以保证在成功写入新的moov box块前当前存在有效的moov box数据块,进而保证在这段时间内若录像异常终止仍能正常播放。
一方面,较短时间的录像文件,由于索引信息量少moov box数据块较小,择选较小的mdat数据块预留存储空间既不会导致溢出,又节省了预留存储空间。例如,当选择较小的N=2,可控制mdat数据块预留储存空间大小在一个极小的范围。另一方面,长时间的录像文件,由于索引信息量巨大moov box数据块大小剧增,使用精简的Smoov box数据块,并将mdat数据块的预留空间值设为Smoov box数据块的空间值同样可最大化的减少预留存储空间。同时,精简的Smoov box数据块可极大的减少每次重写moov box数据块的耗时。
本步骤上述实施方式中的上述步骤可防止因moov box大小快速增长(存储所有帧索引而不是关键帧索引)导致moov box更新频率下降(更新的条件是写入Mdat的音视频数据大小大于moov box数据块大小)带来的抗录像异常终止能力的降低和写moov box数据块卡顿(因存储所有帧索引,录像过程中moov box数据块快速增大,重写moov box耗时增加)对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box(moov box数据块持续增大,且无法预估大小)索引信息空间导致的存储空间浪费。
S50:监测所述音视频数据流的传输状态,若传输结束,生效moov box数据块以生成所述MP4格式文件。
本步骤中,上述监测所述音视频数据流正常传输结束,在录像文件当前Smoov box数据块后写入moov box数据块(包含了音视频数据流的媒体信息及每一帧索引信息),并更新写入mdat box大小为当前mdat box大小值与最后一次写入的Smoov box大小值之和,最终完成生成所述MP4格式文件。
本发明上述实施方式通过引入精简的moov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整moov box数据块,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。本发明上述实施方式中可防止因moov box数据块大小不断增长导致moov box数据块更新频率下降带来的抗录像异常终止能力的降低和写moov box数据块卡顿对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box数据块索引信息空间导致的存储空间浪费。
如图3所示,本发明第二优选实施方式公开了一种MP4格式文件名生成系统100,该系统100包括数据流获取模块110、mdat数据块创建模块120、moov box数据块创建模块130、Smoov box数据块创建模块140及文件生成模块150。
上述数据流获取模块110用以创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息。
当视频开始录制,上述数据流获取模块110便可以获取该视频的音视频数据流,具体地,上述创建录像文件是为了获取上述音视频数据流,该音视频数据流可以包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息等。
进一步地,本实施方式中,上述音视频标识信息用以标识所要生成的MP4格式文件的文件头信息,换言之,音视频标识信息是上述音视频数据流的ftyp字段,该ftyp字段用于记录该MP4格式的编码相关信息,例如所需储存的文件所要遵循何种音视频数据存储规范(文件格式),以及该规范的版本号、兼容性等信息。
上述音视频媒体信息包括音视频数据流的分辨率、采样率、时长、编码器类型等;上述帧索引信息包括上述视频数据流对应帧的数据帧大小及对应数据帧在所要生成的MP4文件中的数据索引地址。
实施方式中,上述获取音视频数据流中,还可以包括对所述音视频数据流进行解码。具体地,在视频录制开始,设置录像音视频编码器类型,通过录像音视频编码器获取上述音视频数据流对应的上述视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息等。
上述mdat数据块创建模块120用以创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件。
上述mdat数据块创建模块120创建ftyp数据块并将其写入录像文件,所述ftyp数据块用以储存所述音视频标识信息,ftyp数据块用以存储该mp4文件遵循何种音视频数据存储规范(文件格式),以及该规范的版本号、兼容性等信息。
上述mdat数据块创建模块120创建mdat数据块,mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件,该音视频帧数据信息主要是指若干视频帧或音频帧的的集合信息。
上述moov box数据块创建模块130用以创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息。
所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息,本实施方式中,上述媒体信息可以包括所要创建的MP4文件的分辨率、帧率、采样率、时长、编码器类型、以及文件中每一帧音频或视频帧的时间戳、时长、帧大小等信息,以及每一个音视频帧在文件中的数据索引地址。
上述Smoov box数据块创建模块140用以创建Smoov box数据块,并判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoov box数据块内的所述关键帧索引信息生效。
此处,所创建的Smoov box数据块格式与moov box数据块相同,该Smoov box数据块用以储存所述音视频帧数据信息对应的媒体信息及关键帧索引信息,与上述moov box数据块同样的,本实施方式中,上述媒体信息可以包括文件的分辨率、采样率、时长、编码器类型、以及文件中每一关键帧音频或视频帧的时间戳、时长、帧大小等信息,以及每一个音视频帧在文件中的数据索引地址。
具体地,Smoov box数据块格式可以根据视频编码器的类型及视频关键帧标志识别判断当前媒体数据帧是否为关键帧索引信息。详细地,若当前媒体数据帧判断为视频关键帧时,将该帧时间戳、数据大小和对应在文件中的索引信息更新到Smoov box数据块中以获得新的Smoov box索引信息。本实施方式中,以H.246视频编码器编码的视频录像为例,首先找到3字节或4字节的视频帧起始码00 00 01或00 00 00 01,接着判断紧接下来的一个字节值是否等于0x65,若是,该视频数据帧为关键帧索引信息,否则,为非关键帧索引信息。
本实施方式中,Smoov box数据块格式创建模块140还包括第一帧数据获取单元,该第一帧数据获取单元用以获取音视频数据流对应的第一帧数据信息;并将所述的第一帧数据信息写入mdat数据块,并将第一帧数据信息对应的媒体信息及索引信息写入Smoovbox数据块及moov box数据块。
本实施方式中默认上述音视频数据流的第一帧数据为关键帧数据,将音视频数据流的第一帧音视频帧数据信息储存至上述mdat数据块内,且将上述第一帧音视频帧数据信息对应的媒体信息及索引信息储存至上述moov box数据块及Smoov box数据块内。
更详细地,结合图2所示,上述Smoov box数据块创建模块140包括mdat数据块空间预留单元141及关键帧索引信息生效单元142。
上述mdat数据块空间预留单元141用以在当前所述mdat数据块预留储存空间,具体地,上述mdat数据块空间预留单元141在接收音视频数据流开始时,设定mdat box数据块预留空间大小值为N倍当前最大音视频帧数据大小,特殊的,首次设置时,最大音视频帧数据大小即为第一帧音视频数据大小,并由此预设mdat box数据块的初始空间值,并在录像文件中为mdat数据块预留存储空间。
接着,随着音视频数据流的持续写入,将mdat数据块预留空间大小更新为当前最大媒体数据帧大小,并判断当前mdat数据块当前的预留空间与Smoov box数据块所占空间的大小关系,若Smoov box数据块空间值大于所述当前mdat数据块的预留空间,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值。将mdat数据块的预留空间值加入至所述mdat数据块原有的空间值,以更新所述mdat数据块的空间值。
上述关键帧索引信息生效单元142用以在上述mdat数据块的当前储存空间后写入所述当前帧的索引信息,并更新当前所述mdat数据块,以使之前所有关键帧的索引信息生效。
关键帧索引信息生效单元142在录像文件中上述已更新的mdat数据块的预留空间后写入当前Smoov box数据块的对应帧的索引信息,以使当前Smoov box数据块内的音视频流对应的媒体信息及索引信息生效。
接着,持续将输入流的当前媒体数据帧写入至mdat box数据块后的预留空间,为每帧数据更新moov box索引信息缓存,将关键帧对应的媒体信息包括时间戳、数据大小和写入在文件中的索引信息更新到Smoov box数据块,并更新写入录像文件中mdat box数据块预留存储空间后的Smoov box数据块,并获得新的当前Smoov box大小值。
每次写入当前媒体数据帧前,判断需写入的媒体数据帧大小与已写入数据大小之和是否大于等于当前mdat数据块大小,若大于当前mdat数据块,执行上述若Smoov box数据块空间值大于所述当前mdat数据块的预留空间,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值,并根据mdat数据块的预留空间值大小在录像文件中当前mdat数据块后预留新的存储空间,然后,在录像文件中新预留存储空间后重新写入当前Smoovbox数据块,并将mdat数据块新的预留空间值加入至所述mdat数据块原有的空间值,并用新的mdat数据块大小更新录像文件中所述当前mdat数据块大小字段,以使当前Smoov box数据块内的音视频流对应的媒体信息及索引信息生效;若小于等于当前mdat数据块,持续执行上述当前媒体数据帧写入至mdat box数据块后的预留空间,为每帧数据更新moov box索引信息缓存,将关键帧对应的媒体信息包括时间戳、数据大小和写入在文件中的索引信息更新到Smoov box数据块并更新写入录像文件中mdat box数据块预留存储空间后的Smoovbox数据块,并获得新的当前Smoov box大小值;直至所述音视频数据流传输写入结束。
录像文件中为mdat数据块预留新的存储空间大小必须足够大以确保在新的mdat数据块预留存储空间之后写入新的moov box数据块时不会把旧的moov box数据块数据覆盖(溢出),以保证在成功写入新的moov box块前当前存在有效的moov box数据块,进而保证在这段时间内若录像异常终止仍能正常播放。
一方面,较短时间的录像文件,由于索引信息量少moov box数据块较小,择选较小的mdat数据块预留存储空间既不会导致溢出,又节省了预留存储空间。例如,当选择较小的N=2,可控制mdat数据块预留储存空间大小在一个极小的范围。另一方面,长时间的录像文件,由于索引信息量巨大moov box数据块大小剧增,使用精简的Smoov box数据块,并将mdat数据块的预留空间值设为Smoov box数据块的空间值同样可最大化的减少预留存储空间。同时,精简的Smoov box数据块可极大的减少每次重写moov box数据块的耗时。
上述实施方式中的可防止因moov box大小快速增长(存储所有帧索引而不是关键帧索引)导致moov box更新频率下降(更新的条件是写入Mdat的音视频数据大小大于moovbox数据块大小)带来的抗录像异常终止能力的降低和写moov box数据块卡顿(因存储所有帧索引,录像过程中moov box数据块快速增大,重写moov box耗时增加)对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box(moov box数据块持续增大,且无法预估大小)索引信息空间导致的存储空间浪费。
文件生成模块150用以监测所述音视频数据流的传输状态,若传输结束,生效moovbox数据块以生成所述MP4格式文件。
文件生成模块150监测所述音视频数据流正常传输结束,在录像文件当前Smoovbox数据块后写入moov box数据块(包含了音视频数据流的媒体信息及每一帧索引信息),并更新写入mdat box大小为当前mdat box大小值与最后一次写入的Smoov box大小值之和,最终完成生成所述MP4格式文件。
本发明上述实施方式通过引入精简的moov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整moov box数据块,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。本发明上述实施方式中可防止因moov box数据块大小不断增长导致moov box数据块更新频率下降带来的抗录像异常终止能力的降低和写moov box数据块卡顿对录像实时性和流畅度的影响,同时,也可避免为防止溢出需预留大的moov box数据块索引信息空间导致的存储空间浪费。
一种计算机储存介质,所述计算机可执行指令在由计算机处理器执行时实现以上所述的任一项所述的MP4格式文件生成方法。
本发明上述实施方式通过上述计算机储存介质执行上述MP4格式文件生成方法,引入精简的Smoov box数据块用以在录像过程中定期写入关键帧的索引数据,在录像结束时再写入完整Smoov box,保证了录像异常终止状况下和正常结束时MP4文件能够正常播放。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(Hyper Text TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
以上上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上上述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准
以上上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种MP4格式音视频文件生成方法,其特征在于,所述方法包括:
创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息;
创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件;
创建moov box数据块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息;
创建Smoov box数据块,判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoov box数据块内的所述关键帧索引信息生效;-
监测所述音视频数据流的传输状态,若传输结束,生效moov box数据块以生成所述MP4格式文件。
2.根据权利要求1所述的MP4格式音视频文件生成方法,其特征在于,所述将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件的步骤,包括:
在当前所述mdat数据块预留储存空间;
在所述储存空间写入Smoov box数据块,并更新当前所述mdat数据块空间值,以使储存至Smoov box数据块的关键帧索引信息生效。
3.根据权利要求2所述的MP4格式音视频文件生成方法,其特征在于,所述在所述储存空间写入Smoov box数据块,并更新当前所述mdat数据块空间值,包括:
判断当前mdat数据块的预留空间与Smoov box数据块的大小关系,若Smoov box数据块空间值大于所述当前mdat数据块的预留空间值,将所述mdat数据块的预留空间值更新为Smoov box数据块的空间值;
将mdat数据块的预留空间值加入至所述mdat数据块原有的空间值,以更新所述mdat数据块的空间值。
4.根据权利要求3所述的MP4格式音视频文件生成方法,其特征在于,所述在当前所述mdat数据块预留储存空间包括:
所述mdat box数据块的预留空间大小取当前最大媒体数据帧大小的整数倍或当前Smoov box数据块空间大小两者中的较大值。
5.根据权利要求1所述的MP4格式音视频文件生成方法,其特征在于,所述方法还包括:
获取音视频数据流对应的第一帧数据信息;
将所述的第一帧数据信息写入mdat数据块,将第一帧数据信息对应的媒体信息及索引信息写入Smoov box数据块及moov box数据块。
6.根据权利要求1所述的MP4格式音视频文件生成方法,其特征在于,所述获取音视频数据流,还包括:
对所述音视频数据流进行解码。
7.根据权利要求6所述的MP4格式音视频文件生成方法,其特征在于,所述判断当前写入moov box数据块的对应帧的索引信息是否为关键帧索引信息,包括:
根据音视频编码器的类型及音视频关键帧标志识别判断当前媒体数据帧是否为关键帧索引信息。
8.根据权利要求1所述的MP4格式音视频文件生成方法,其特征在于,所述媒体信息包括:所述音视频数据流的分辨率、采样率、时长、编码器类型;所述索引信息包括:数据帧对应的时间戳、数据帧大小和数据帧在文件中的数据索引地址。
9.一种MP4格式音视频文件生成系统,其特征在于,包括:
数据流获取模块,用以创建录像文件,并获取音视频数据流,所述音视频数据流包括音视频标识信息、音视频媒体信息、音视频帧数据信息以及对应所述音视频帧数据信息每一帧的帧索引信息;
mdat数据块创建模块,用以创建ftyp数据块及mdat数据块,所述ftyp数据块用以储存所述音视频标识信息并写入至所述录像文件;所述mdat数据块用以持续接收音视频数据流的音视频帧数据信息并写入至录像文件;
moov box数据块创建模块,所述moov box数据块用以储存所述音视频帧数据信息对应的媒体信息及每一帧的索引信息;
Smoov box数据块创建模块,判断当前写入moov box数据块的对应帧的索引信息是否为所述关键帧索引信息,若是关键帧索引信息,将当前对应帧的索引信息写入至Smoov box数据块并将储存关键帧索引信息的Smoov box数据块写入所述录像文件,以使Smoov box数据块内的所述关键帧索引信息生效;
文件生成模块,用以监测所述音视频数据流的传输状态,若传输结束,生效moov box数据块以生成所述MP4格式音视频文件。
10.一种计算机储存介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时实现如权利要求1-8中任一项所述的MP4格式音视频文件生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211177888.7A CN115589506A (zh) | 2022-09-22 | 2022-09-22 | 一种mp4格式音视频文件生成方法、系统及计算机储存介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211177888.7A CN115589506A (zh) | 2022-09-22 | 2022-09-22 | 一种mp4格式音视频文件生成方法、系统及计算机储存介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115589506A true CN115589506A (zh) | 2023-01-10 |
Family
ID=84778764
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211177888.7A Pending CN115589506A (zh) | 2022-09-22 | 2022-09-22 | 一种mp4格式音视频文件生成方法、系统及计算机储存介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115589506A (zh) |
-
2022
- 2022-09-22 CN CN202211177888.7A patent/CN115589506A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107231563B (zh) | 视频处理方法和装置 | |
WO2018076952A1 (zh) | 一种视频文件的存储、定位播放方法及装置 | |
US8850054B2 (en) | Hypertext transfer protocol live streaming | |
US7337320B2 (en) | Streaming system for distributing encrypted data, and streaming method therefor | |
US20140325020A1 (en) | Content reproduction system, content reproduction apparatus, program, content reproduction method, and providing content server | |
US10951857B2 (en) | Method and system for video recording | |
US20110170687A1 (en) | Content decoding apparatus, content decoding method and integrated circuit | |
EP4087266A1 (en) | Playback mode determining method and apparatus | |
US20220284130A1 (en) | Content Playlist Integrity | |
CN106358047A (zh) | 一种播放流媒体视频的方法及装置 | |
CN111966632B (zh) | 一种流式数据存储方法、读取方法、设备及可读存储介质 | |
CN105141973A (zh) | 多分段的媒体文件拼接方法和系统 | |
CN104735463A (zh) | 流媒体传输方法及系统 | |
CN110784741A (zh) | 媒体数据的时移响应方法及装置 | |
CN110493324A (zh) | 下载方法、下载器及计算机可读存储介质 | |
CN113742518A (zh) | 存储和提供视频的方法、设备和计算机程序产品 | |
CN111787420B (zh) | 一种数据处理方法及装置、电子设备、可读存储介质 | |
CN115589506A (zh) | 一种mp4格式音视频文件生成方法、系统及计算机储存介质 | |
CN108737355A (zh) | 基于用户带宽的流媒体播放 | |
CN113132759A (zh) | 视频起播时延确定方法、装置、服务器、系统及存储介质 | |
CN103248912A (zh) | 网络电视时移播放方法、网络电视系统和装置 | |
JP2016136676A (ja) | 受信装置、バッファ管理方法、及びプログラム | |
KR20100029010A (ko) | 멀티미디어 데이터를 처리하기 위한 다중 프로세서 시스템들 및 그것의 방법들 | |
CN115250266B (zh) | 视频处理方法及装置、流媒体设备及存储点播系统 | |
CN111836071A (zh) | 一种基于云会议的多媒体处理方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |