一种MP4文件流直播的方法、移动终端及存储介质转让专利

申请号 : CN201910979491.1

文献号 : CN110662084B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 毕新维

申请人 : 北京齐尔布莱特科技有限公司

摘要 :

本发明公开了一种MP4文件流直播的方法,该方法在移动终端中执行,移动终端与视频录制设备连接。本发明还公开了相应地移动终端和存储介质。该方法包括步骤:从视频录制设备获取第一MP4文件,第一MP4文件包括视频帧和视频帧描述信息;基于视频帧描述信息,从第一MP4文件获取视频帧字节数范围、视频帧头部字节以及视频帧解析参数;从视频录制设备获取以相同录制参数录制的、待直播的第二MP4文件,第二MP4文件不包括视频帧描述信息;根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间;根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧,得到视频帧的H264码流以便进行直播。

权利要求 :

1.一种MP4文件流直播的方法,所述方法在移动终端中执行,所述移动终端与视频录制设备连接,所述方法包括:

从所述视频录制设备获取已录制完成的第一MP4文件,所述第一MP4文件包括视频帧和视频帧描述信息;

基于所述视频帧描述信息,从第一MP4文件获取视频帧字节数范围、视频帧头部字节以及视频帧解析参数,所述视频帧字节数范围包括视频帧最大字节数和视频帧最小字节数;

从所述视频录制设备获取以相同录制参数录制的、待直播的第二MP4文件,所述第二MP4文件不包括视频帧描述信息;

根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间,所述视频帧字节区间用于区分一个视频帧的起始段和结束段;

根据所述视频帧字节区间和视频帧解析参数从未录制完成的第二MP4文件实时获取并解析视频帧,得到视频帧的H264码流,以便根据所述H264码流进行直播。

2.如权利要求1所述的方法,所述根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间的步骤,包括:判断第二MP4文件的帧字节数是否小于第一MP4文件的视频帧最大字节数,且大于第一MP4文件的视频帧最小字节数,若是,则将此第二MP4文件的帧确定为待定视频帧;

判断待定视频帧头部字节是否等于所述第一MP4文件的视频帧头部字节,若是,则将此待定视频帧确定为视频帧,若不是,则将此待定视频帧确定为非视频帧。

3.如权利要求2所述的方法,还包括:当待定视频帧头部字节等于所述第一MP4文件的视频帧头部字节时,对比待定视频帧的片头句法元素和第一MP4文件的视频帧的片头句法元素,若对比成功,则将此待定视频帧确定为视频帧,若对比未成功,则将此待定视频帧确定为非视频帧。

4.如权利要求3所述的方法,所述第一MP4文件的视频帧的片头句法元素由对第一MP4文件中视频帧进行片解析得到。

5.如权利要求3所述的方法,所述片头句法元素包括:当前帧序号、片中的第一个宏块地址、片的类型、当前片所依赖的图像参数集的序号、图像的解码顺序。

6.如权利要求1‑5中任一项所述的方法,所述视频帧头部字节为I帧和P帧的视频帧头部字节。

7.如权利要求1‑5中任一项所述的方法,所述第一MP4文件的视频帧描述信息由分离程序获得。

8.如权利要求7所述的方法,所述分离程序为FFmpeg。

9.如权利要求1‑5中任一项所述的方法,所述根据所述视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧后的步骤,包括:第二MP4文件录制完成后,定位解析错误的视频帧。

10.如权利要求9所述的方法,所述定位解析错误的视频帧的步骤,包括:对解析后的视频帧与录制完成的第二MP4的文件的视频帧进行逐字节比较,定位到解析错误的字节位置,根据解析错误的字节位置定位到解析错误的视频帧。

11.一种移动终端,包括:

一个或多个处理器;

存储器;和

一个或多个程序,其中所述一个或多个程序存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行如权利要求1‑10所述方法中的任一方法的指令。

12.一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,当所述指令在移动终端上执行时,使得所述移动终端执行如权利要求1‑10所述的方法中的任一方法。

说明书 :

一种MP4文件流直播的方法、移动终端及存储介质

技术领域

[0001] 本发明涉及视频编解码技术,特别涉及一种MP4文件流直播的方法、移动终端及存储介质。

背景技术

[0002] 移动直播发展至今,凭借着实时化、社交化的特征,不但满足了用户的参与感,而且让用户切身感受直播现场的氛围,直播技术也在不断地更新迭代、趋于成熟。一般来说,
我们把视频直播的流程分为如下几步:采集—>处理—> 编码和封装—>传输(推流到服务
器、服务器流分发)—>播放器流播放。
[0003] 对流媒体传输来说,编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本。目前主流的视频压缩格式H.264具有低码率、应用目标宽、容错
能力强、高效的网络传输(拥有网络适应层)和极佳的图像传输质量(1Mbps码率下就可以实
现标清数字图像传送)等优点,被广泛应用于低码率的无线应用、网络流媒体、网络课程、视
频会议等许许多多的媒体应用领域。
[0004] 对于直播需求,一般是通过分别采集摄像头画面数据和手机或其他外设音频设备的麦克风采集音频,然后合成两者进行推流。但是有些特殊场景下,比如我们需要用第三方
录制设备支持推流,但是某些第三方设备只支持输出 MP4或mov文件流。
[0005] 而目前针对MP4文件流的解码技术大致包括两种,第一种是基于FFmpeg 的音视频编解码技术,第二种是基于MP4压缩格式的标准,以C语言实现解析过程,但这二者都需要借
助媒体描述信息(moov)来进行解码。moov信息里保存了视频流和音频流的文件偏量、抽样
率大小、时间戳等关键的全局数据,大多是在录制结束时候才生成,存在于MP4的文件结构
末尾。在直播场景下,由于moov信息尚未生成,现有的MP4文件流的解码技术无法实现实时
的解码进行推流,所以市面上直播的视频流多是flv格式,MP4格式多用于点播,而非直播场
景。且如果moov意外丢失,或者文件意外破损,将导致FFmpeg 无法解析和播放,对于期望重
要数据的复原,也是无法完成的。

发明内容

[0006] 为此,本发明提供了一种MP4文件流解码直播的方法、移动终端及存储介质,以力图解决或者至少缓解上面存在的至少一个问题。
[0007] 根据本发明的一个方面,提供了一种MP4文件流直播的方法,该方法在移动终端中执行,移动终端与视频录制设备连接,该方法包括:从视频录制设备获取第一MP4文件,第一
MP4文件包括视频帧和视频帧描述信息;基于视频帧描述信息,从第一MP4文件获取视频帧
字节数范围、视频帧头部字节以及视频帧解析参数,视频帧字节数范围包括视频帧最大字
节数和视频帧最小字节数;从视频录制设备获取以相同录制参数录制的、待直播的第二MP4
文件,第二MP4文件不包括视频帧描述信息;根据获取的视频帧字节数范围和视频帧头部字
节,确定第二MP4文件的视频帧字节区间,视频帧字节区间用于区分一个视频帧的起始段和
结束段;根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧,得到视频帧
的H264码流,以便根据此H264 码流进行直播。
[0008] 可选地,在根据本发明的MP4文件流直播方法中,根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间的步骤包括:判断第二MP4文件的帧
字节数是否小于第一MP4文件的视频帧最大字节数,且大于第一MP4文件的视频帧最小字节
数,若是,则将此第二MP4文件的帧确定为待定视频帧;判断待定视频帧头部字节是否等于
等一MP4文件的视频帧头部字节,若是,则将此待定视频帧确定为视频帧,若不是,则将此待
定视频帧确定为非视频帧。
[0009] 可选地,在根据本发明的MP4文件流直播方法中,当待定视频帧头部字节等于所述等一MP4文件的视频帧头部字节时,对比待定视频帧的片头句法元素和第一MP4文件的视频
帧的片头句法元素,若对比成功,则将此待定视频帧确定为视频帧,若对比未成功,则将此
待定视频帧确定为非视频帧。
[0010] 可选地,在根据本发明的MP4文件流直播方法中,第一MP4文件的视频帧的片头句法元素由对第一MP4文件中视频帧进行片解析得到。
[0011] 可选地,在根据本发明的MP4文件流直播方法中,有效待定视频帧的片头句法元素由对有效待定视频帧进行指数哥伦布编码的解码得到。
[0012] 可选地,在根据本发明的MP4文件流直播方法中,片头句法元素包括:当前帧序号、片中的第一个宏块地址、片的类型、当前片所依赖的图像参数集的序号、图像的解码顺序。
[0013] 可选地,在根据本发明的MP4文件流直播方法中,视频帧头部字节为I 帧和P帧的视频帧头部字节。
[0014] 可选地,在根据本发明的MP4文件流直播方法中,第一MP4文件的视频帧描述信息由分离程序获得。
[0015] 可选地,在根据本发明的MP4文件流直播方法中,该分离程序为FFmpeg。
[0016] 可选地,在根据本发明的MP4文件流直播方法中,根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧后的步骤包括:第二MP4文件录制完成后,定位解析错
误的视频帧。
[0017] 可选地,在根据本发明的MP4文件流直播方法中,定位解析错误的视频帧的步骤,包括:对解析后的视频帧与录制完成的第二MP4的文件的视频帧进行逐字节比较,定位到解
析错误的字节位置,根据解析错误的字节位置定位到解析错误的视频帧。
[0018] 根据本发明的又一个方面,提供了一种移动终端,包括:一个或多个处理器;存储器;和一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处
理器执行,程序包括用于执行根据本发明的MP4文件流直播的方法的指令。
[0019] 根据本发明的又一个方面,提供了一种可读存储介质,一个或多个程序包括指令,当指令在移动终端上执行时,使得移动终端执行根据本发明的MP4 文件流直播的方法。
[0020] 根据本发明的技术方案,通过预先录制第一MP4文件,第一MP4文件包含有moov信息,由第一MP4文件获取视频帧字节数范围、视频帧头部字节以及视频帧解析参数,再获取
由相同的录制设备在相同的录制参数下录制的第二MP4文件,根据第一MP4文件的视频帧字
节数范围和视频帧头部字节确定第二MP4文件的视频帧字节区间,解析得视频帧的H264码
流用于直播或缺失视频描述信息(moov)的MP4文件还原。
[0021] 本发明还提供了一种基于片级别的解析方法,根据第一MP4文件的视频帧字节数范围和视频帧头部字节确定第二MP4文件的有效待定视频帧字节区间后,对有效待定视频
帧头部字节后的字节进行解析获得片头句法元素,再对比有效待定视频帧和第一MP4文件
的视频帧的片头句法元素。解析字节总数少,极大加大了解析的速度和准确度。且解析更加
精准,无需更复杂的宏块级别解析,能有效避免误判和错判导致最终呈现出来的视频马赛
克、模糊、花屏、绿屏等不良效果。

附图说明

[0022] 为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面
旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述
以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的
部件或元素。
[0023] 图1示出了根据本发明的一个实施例的移动终端100的构造示意图;
[0024] 图2示出了根据本发明的一个实施例的MP4文件流直播的方法200的流程图;
[0025] 图3示出了根据本发明的另一个实施例的MP4文件流直播的方法300的流程图;
[0026] 图4示出了一个MP4标准结构;
[0027] 图5示出了一个视频帧序列结构。

具体实施方式

[0028] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例
所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围
完整的传达给本领域的技术人员。
[0029] 图1是移动终端100的结构框图。移动终端100可以包括存储器接口102、一个或多个数据处理器、图像处理器和/或中央处理单元104,以及外围接口 106。
[0030] 存储器接口102、一个或多个处理器104和/或外围接口106既可以是分立元件,也可以集成在一个或多个集成电路中。在移动终端100中,各种元件可以通过一条或多条通信
总线或信号线来耦合。传感器、设备和子系统可以耦合到外围接口106,以便帮助实现多种
功能。
[0031] 例如,运动传感器110、光线传感器112和距离传感器114可以耦合到外围接口106,以方便定向、照明和测距等功能。其他传感器116同样可以与外围接口106相连,例如定位系
统(例如GPS接收机)、加速度传感器、温度传感器、生物测定传感器或其他感测设备,由此可
以帮助实施相关的功能。
[0032] 相机子系统120和光学传感器122可以用于方便诸如记录照片和视频剪辑的相机功能的实现,其中所述相机子系统和光学传感器例如可以是电荷耦合器件(CCD)或互补金
属氧化物半导体(CMOS)光学传感器。可以通过一个或多个无线通信子系统124来帮助实现
通信功能,其中无线通信子系统可以包括射频接收机和发射机和/或光(例如红外)接收机
和发射机。无线通信子系统 124的特定设计和实施方式可以取决于移动终端100所支持的
一个或多个通信网络。例如,移动终端100可以包括被设计成支持LTE、3G、GSM网络、 GPRS网
络、EDGE网络、Wi‑Fi或WiMax网络以及BlueboothTM网络的通信子系统124。
[0033] 音频子系统126可以与扬声器128以及麦克风130相耦合,以便帮助实施启用语音的功能,例如语音识别、语音复制、数字记录和电话功能。I/O子系统140可以包括触摸屏控
制器142和/或一个或多个其他输入控制器144。触摸屏控制器142可以耦合到触摸屏146。举
例来说,该触摸屏146和触摸屏控制器142可以使用多种触摸感测技术中的任何一种来检测
与之进行的接触和移动或是暂停,其中感测技术包括但不局限于电容性、电阻性、红外和表
面声波技术。
[0034] 一个或多个其他输入控制器144可以耦合到其他输入/控制设备148,例如一个或多个按钮、摇杆开关、拇指旋轮、红外端口、USB端口、和/或指示笔之类的指点设备。所述一
个或多个按钮(未显示)可以包括用于控制扬声器 128和/或麦克风130音量的向上/向下按
钮。
[0035] 存储器接口102可以与存储器150相耦合。该存储器150可以包括高速随机存取存储器和/或非易失性存储器,例如一个或多个磁盘存储设备,一个或多个光学存储设备,和/
或闪存存储器(例如NAND,NOR)。存储器150可以存储操作系统152,例如Android、iOS或是
Windows Phone之类的操作系统。该操作系统152可以包括用于处理基本系统服务以及执行
依赖于硬件的任务的指令。在一些实施例中,操作系统152中包含了用于执行系统清理方法
的指令。存储器150还可以存储应用154。在移动终端运行时,会从存储器 150中加载操作系
统152,并且由处理器104执行。应用154在运行时,也会从存储器150中加载,并由处理器104
执行。应用154运行在操作系统之上,利用操作系统以及底层硬件提供的接口实现各种用户
期望的功能,如即时通信、网页浏览、图片管理、视频播放等。应用154可以是独立于操作系
统提供的,也可以是操作系统自带的,包括各种社交应用软件,如QQ、微信、微博等,也包括
各种视频播放应用软件,还可以包括相册、计算器、录音笔等系统自带应用程序。另外,应用
154被安装到移动终端100中时,也可以向操作系统添加驱动模块。
[0036] 本发明提供了一种MP4文件流直播的方法,通过在移动终端100的150 存储器相应的一个或多个程序(包括前文所述的指令)来实现上述功能。需要说明的是,本发明所指的
移动终端100可以是具有上述构造的手机、平板电脑、笔记本电脑等具有数据处理能力的设
备。
[0037] 在一般的解析MP4文件流技术中,都需要借助在录制结束时候才被生成、存在于MP4的文件结构末尾的视频帧描述信息(moov),这种解析是非实时的,无法用于直播场景。
因此,根据本发明的MP4文件流直播的方法提供了一种能够实现实时解析MP4文件流的方
案。
[0038] 图2示出了根据本发明的一个实施例的MP4文件流解码直播的方法200 的流程图。方法200适于在计算设备(例如前述计算设备100)中执行。如图 2所示,MP4文件流解码直播
的方法适于步骤S210。
[0039] 在步骤S210中,从视频录制设备获取第一MP4文件,第一MP4文件包括视频帧和视频帧描述信息。移动终端与视频录制设备连接,第一MP4文件由视频录制设备输出,使用视
频录制设备的目的为了取得更好的直播效果,其输出视频的画质比移动终端使用自身摄像
头录制的视频画质更加清晰和稳定。但有些视频录制设备只支持输出MP4文件,比如口袋云
台相机。
[0040] 在一个实施例中,通过数据线将视频录制设备连接于移动终端,首先用视频录制设备录制第一MP4文件,第一MP4文件可以是多个,移动终端通过数据线进行数据传输获取
第一MP4文件。
[0041] MP4文件中所有数据都封装在box中,即MP4文件是由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,一级嵌套一级来
存放媒体信息。
[0042] 图4描述了一个MP4标准结构,mdat储存了数据信息,moov包含了视频帧描述信息。moov包含很多小的box,重点在于sample table box,sample table包含了区分码流中的帧
时序和物理布局的信息,包括sample的时序、类型、大小以及在各自存储容器中的位置。
video sample即为一个视频帧,或一组连续视频帧,audio sample即为一段连续的压缩音
频,它们统称sample。
[0043] MP4封装格式是基于QuickTime容器格式定义,视频帧描述信息与数据信息分开,应用于封装H264视频和ACC音频。视频帧在mdat中以H264码流的形式存在,音频帧在mdat中
以ACC码流的形式存在,一般是H264+AAC +AAC+H264+AAC+AAC+AAC+H264…的形式。如前文
所述,唯一能区分码流中的帧时序和物理布局的sample table存在于moov中,而moov存在
于MP4文件流末尾,只有MP4文件录制结束后才能对MP4文件进行解析用于播放,因此现有技
术无法将MP4文件流用于直播场景。
[0044] 随后在步骤S220中,基于视频帧描述信息从由第一MP4文件获取视频帧字节数范围和视频帧头部字节以及视频帧解析参数。
[0045] 上文提到MP4文件中视频帧的H264码流存在在mdat box中,在H264 视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前
者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适
合各种信道和存储介质上的传输。因此通常在网络中传输时的一个视频帧就是一个NAL单
元,区别是每个 NAL单元内部还有起始码,不同的打包方式NAL单元的起始码不同。
[0046] H264码流的打包方式有两种。一种为Annex B的格式,Annex B是绝大部分编码器的默认输出格式,就是每个帧的开头的3~4个字节是H264的起始码,起始码为0x00000001
或者0x000001。另一种是AVCC格式,即原始的 NAL打包格式。就是开始的若干字节(1,2或4
字节)是去除起始码的长度后的NAL单元的长度,即视频帧的字节数,而不是固定格式。此时
必须借助视频帧描述信息才可以解码。MP4就是原始的NAL打包格式,起始码为4个字节,代
表该视频帧的字节数。起始码的下一个字节就是NAL单元头部,及视频帧头部字节,每个类
型的帧对应的NAL单元类型字节是固定的。NAL单元头部之后是NAL单元的有效负载。表1示
出了一个NAL单元组成的结构。
[0047] 表1 NAL单元组成
[0048] 起始码(4Byte) NAL单元头部(1Byte) NAL单元负载
[0049] 根据本发明的一个实施例,因为第一MP4文件是完整的录制好的文件,包含视频帧描述信息。在本方案中视频帧描述信息也就是moov,利用Ffmpeg 分离程序根据全局的moov
分离出第一MP4文件中的H264文件,Ffmpeg分离只需要在每次调用av_read_frame()之后
将得到的视频的AVPacket存为本地文件即可。AVPacket是Ffmpeg中码流数据的载体。经过
Ffmpeg分离程序后可以得到根据每个AVPacket得到视频帧字节数范围和视频帧头部字节
以及视频帧解析参数。
[0050] 根据本发明的一个实施例,视频帧字节数范围包括视频帧最大字节数和视频帧最小字节数,若第二MP4文件的帧字节数小于第一MP4文件的视频帧最大字节数,且大于第一
MP4文件的视频帧最小字节数,则此第二MP4文件的帧为待定视频帧。如得到的视频帧最大
字节数为412650Byte,可以取50 万byte。这个值只是用于估算一帧视频最大的字节数,不
是取精确值。
[0051] 视频帧解析参数包括序列参数集SPS和图像参数集PPS,是一组很少改变的,且为大量NAL单元提供解析信息的数据。SPS包含的是针对一连续编码视频序列的参数子项,如
标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码
模式选择标识等等。PPS对应的是一个序列中某一幅图像或者某几幅图像的子项,其参数如
标识符 pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片
组数目、初始量化参数和去方块滤波系数调整标识等等。第二MP4文件由和步骤S220中相同
的视频录制设备输出,且采用同样的录制配置信息,如视频宽高,帧率,编码器参数等信息
保持和第一MP4文件一致。同一设备相同录制参数,解析出来的数据是固定的。也就是说第
二MP4的SPS和PPS也同样是这些字节数据。具体的,SPS和PPS包含了初始化H264解码器所需
要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。 SPS和
PPS可以有分离程序获得,它以AVCDecoderConfigurationRecord的结构体形式存在于mp4
的moov中。可以采用分离程序Ffmpeg提供的子功能获取,也可以采用基于MP4压缩格式的标
准,利用C语言或者其他方式获取。
[0052] 图5示出了一个视频帧序列结构,根据本发明的一个实施例,区分帧的类型采用如下方式,因为一帧视频图像可以编码为一个或若干个片,实际应用中,码流不会出现数据分
割机制的复杂情况,这里只考虑一帧就是一个片。在 H264的码流中,部分视频帧序列压缩
成为I帧,部分压缩成P帧,还有部分压缩成B帧,帧的类型需要经过片解析分析视频帧的片
头后得到。I帧的片的类型(slice_type)是2或7,P帧的slice_type是0或5,B帧的slice_
type是 1或6。即对于不同类型的帧,他们对应的slice_type%5的值固定。片解析获得帧的
类型可以采用基于MP4压缩格式的标准,利用C语言或者其他方式,这里不做限制。这里就各
类型帧的作用做进一步说明:
[0053] I帧:intra frame帧内编码帧;
[0054] IDR:Instantaneous Decoding Refresh即时解码刷新帧;
[0055] P帧:predictive‑frame前向预测编码帧;
[0056] B帧:bi‑directional interpolatedprediction frame双向预测内插编码帧。
[0057] 类似地,在步骤S230中,从视频录制设备获取待直播第二MP4文件,第二MP4文件不包括视频帧描述信息。第二MP4文件由和步骤S220中相同的录制设备输出,且采用同样的录
制配置信息,如视频宽高、帧率、编码器参数等信息保持和第一MP4文件一致,同一设备相同
录制参数,视频帧字节数范围相近,且解析出的各类型帧的NAL单元头部是固定的。
[0058] 在一个实施例中,通过数据线将录制设备连接于移动终端,视频录制设备开始录制第二MP4文件,移动终端通过数据线进行数据传输实时获取第二 MP4文件。
[0059] 紧接着在步骤S240中,根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间。
[0060] 根据本发明的一个实施例,开始解析后,第一MP4文件流包含mdat,字节是0x6D646174,以此作为解析一个mp4数据的起始点,字符串moov的字节形式是0x6D6F6F76,
以此作为结束点,表示解析程序结束。根据实时传输的mp4数据进行解析用于直播。
[0061] 根据本发明的一个实施例,因为一个视频帧的长度字节只需要三字节就能表示,但它在码流中共占四个字节,所以首字节通常为0x00。开始读取一字节,如果该字节是
0x00,再读取三个字节,此三个字节的值即为等待判断的帧的字节数。判断第二MP4文件的
帧字节数是否小于第一MP4文件的视频帧最大字节数,且大于第一MP4文件的视频帧最小字
节数,若是,则将此第二MP4文件的帧确定为待定视频帧,可以减少判断步骤。如果该三字节
的值大小在第一MP4文件得出视频帧字节数范围内,继续读取一字节。如果该字节属于各类
型视频帧的NAL单元头部字节,则将此待定视频帧确定为视频帧,如果不属于,则将此待定
视频帧确定为非视频帧。然后由此视频帧的字节数划分第二MP4文件的视频帧区间。
[0062] 其中,实际直播过程中为了加快解码,一般不涉及B帧,用于比较的各类型帧包括I帧和P帧即可。如果待解析的MP4文件流包含B帧,不影响本方案的解析流程。
[0063] 最后的步骤S250中,根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧,得到视频帧的H264码流,以便根据H264码流进行直播。
[0064] H264码流的NAL单元的起始码不是00000001,而是视频帧字节长度,所以在导出H264时,会替换头部4字节内容。否则解码器无法正常播放该 H264码流。同时,除了替换后
的H264码流,解码器还需要根据视频解析参数才能进行播放。
[0065] 视频帧解析参数包括序列参数集SPS和图像参数集PPS,是一组很少改变的,且为大量NAL单元提供解析信息的数据,解码器没能正确接收到这两个参数集,那么其他NAL单
元也是无法解码。而与第一MP4文件采用同样录制参数的的第二MP4文件的SPS和PPS也同样
是这些字节数据。
[0066] 这样,通过提前用相同的视频录制设备录制第一MP4文件,获取视频帧字节数范围、视频帧头部字节以及视频帧解析参数。即使第二MP4文件需要直播即实时解析,或者丢
失视频描述信息(moov)信息无法解析。根据第一 MP4文件的视频帧字节数范围、视频帧头
部字节以及视频帧解析参数确定第二MP4文件视频帧字节区间。根据视频帧区间和视频帧
解析参数从第二MP4 文件获取并解析视频帧,得到视频帧的H264码流用于直播或缺失moov
信息的MP4文件还原。
[0067] 图3示出了根据本发明的另一个实施例的MP4文件流解码直播的方法 300的流程图。方法300是基于片级的解析方法,目的是为了提高判断的精准度。
[0068] 从步骤S310开始,从视频录制设备获取第一MP4文件,第一MP4文件包括视频帧和视频帧描述信息。其中,第一MP4文件由视频录制设备输出,使用视频录制设备的目的为了
取得更好的直播效果。
[0069] 步骤S320中,基于视频帧描述信息从由第一MP4文件获取视频帧字节数范围和视频帧头部字节以及视频帧解析参数。
[0070] 在H264定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息。句法元素的分层结构有助于更有效地节省码流。例如,在一个图像中,经常会在各个片
之间有相同的数据,如果每个片都同时携带这些数据,势必会造成码流的浪费。更为有效的
做法是将该图像的公共信息抽取出来,形成图像一级的句法元素,而在片级只携带该片自
身独有的句法元素。在H264 中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层
次。本方案主要用到片头的句法元素。需要说明的是,因为一帧视频图像可以编码为一个或
若干个片,实际应用中,码流不会出现数据分割机制的复杂情况,这里只考虑一帧就是一个
片。
[0071] 步骤S330中,从视频录制设备获取待直播第二MP4文件,第二MP4文件不包括视频帧描述信息。第二MP4文件由和步骤S320中相同的视频录制设备输出,且采用同样的录制配
置信息,如视频宽高,帧率,编码器参数等信息保持和第一MP4文件一致。同一设备相同录制
参数,解析出来的数据是固定的。也就是说第二MP4的SPS和PPS也同样是这些字节数据。
[0072] 步骤S340中,根据获取的视频帧字节数范围和视频帧头部字节,确定第二MP4文件的视频帧字节区间。
[0073] 步骤S350中,根据第二MP4文件视频帧字节区间拿到一个帧,获取第二MP4文件的视频帧的片头句法元素。
[0074] 如何获得第二MP4文件的视频帧的片头句法元素,根据本发明的一个实施例,关键帧的起始段之后继续读取4个字节,通过指数哥伦布编码的解码 ue(v),分别计算:
[0075] pic_order_cnt_lsb:当前帧序号,表示当前帧序号的另一种计量方式;
[0076] first_mb_in_slice:片中的第一个宏块地址;
[0077] pic_parameter_set_id:当前片所依赖的图像参数集的序号;
[0078] frame_num:图像的解码顺序,每个参考帧都有一个连续的frame_num作为它们的标识,它指明了各图像的解码顺序。
[0079] 片的类型(slice_type)可以由指数哥伦布编码的解码得到,也可以由其他方式得到,本方案不做限制。
[0080] 接着在步骤S360中,对比第一MP4文件的视频帧的片头句法元素和第二MP4文件的视频帧的片头句法元素,如果对比成功,视为视频帧。
[0081] 对比规则根据片头句法元素不同的性质确定,根据本发明的一个实施例,对比规则如下:
[0082] pic_order_cnt_lsb:当这个字段存在值的时候,其取值的变化的,但是能取哪些值,是固定的,第一MP4文件的视频帧的pic_order_cnt_lsb和第二MP4 文件的视频帧的
pic_order_cnt_lsb应该相等;
[0083] first_mb_in_slice和pic_parameter_set_id必须等于0;
[0084] frame_num的值在遇到I帧前,是否都是步长为1进行递增,frame_num 一般值不超过16,取值属于固定规律,一般是0到15循环,但是在包含B帧的情况下,相同两帧的值可能
相等,在只含I帧和P帧的情况下,当前帧的 frame_num比上一帧的frame_num要大1,且I帧
的frame_num固定为0;
[0085] frame_mbs_only_flag:为0表明了视频序列的编码图象可能是编码场或编码帧;为1表明了每个编码视频序列的编码图像都是只含帧宏块的编码帧。第一MP4文件的视频帧
的frame_mbs_only_flag和第二MP4文件的视频帧的 frame_mbs_only_flag应该相等。
[0086] 还有包含对比对比第一MP4文件的视频帧的片头句法元素和第二MP4 文件的视频帧的片头句法元素的其他规则,本发明对此不做限制。
[0087] 最后步骤S370中,根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧,得到视频帧的H264码流,以便根据H264码流进行直播。
[0088] 以上规则解析了RBSP的前4个字节,加上NAL单元长度4字节,和 NAL单元字节类型1个字节。一共解析了一个NAL单元的9个字节。即一个合法的NAL,必须满足其前9个字节的
取值满足以上规则。解析字节总数少,极大加大了解析的速度和准确度。且解析更加精准,
无需更复杂的宏块级别解析,能有效避免误判和错判导致最终呈现出来的视频马赛克、模
糊、花屏、绿屏等不良效果。
[0089] 根据本发明的另一个实施例,在研发过程中,为了提高精度,在第二MP4 文件录制完成后,定位解析错误的视频帧。
[0090] 对解析后的视频帧与录制完成的第二MP4的文件的视频帧进行逐字节比较,定位到解析错误的字节位置,解析错误的字节位置所在的视频帧即为解析错误的视频帧。因为
不依赖moov,在发生解析漏帧、多帧、帧数据不符等情况时,需要定位到从哪一个字节开始
解析出错,比如00 01c7 1c,长度是116508。可以在ffmpeg分离程序中,增加一小段代码,该
段代码用于在mp4中查找这个串,找到它的4字节起始码,转为小端字节序长度。根据解析出
来的帧数、 sps pps的数目确定帧序列号,即完成从错误字节的位置定位到是第几帧出现
的解析错误。观察片头句法元素,找出正确的H264的片头句法元素,调整规则。代码示例如
下:
[0091] if(pkt.size==116512){
[0092] printf("%d\n",framecnt+2*icount);
[0093] PrintBuffer(pkt.data,10);
[0094] }
[0095] 其中,framecnt是解析出来的帧数,icount是sps pps的数目。
[0096] 本发明还可以包括:A7、如A1‑A6中任一项所述的方法,所述视频帧头部字节为I帧和P帧的视频帧头部字节。
[0097] A8、如A1‑A6中任一项所述的方法,所述第一MP4文件的视频帧描述信息由分离程序获得。
[0098] A9、如A8所述的方法,所述分离程序为FFmpeg。
[0099] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结
构和技术,以便不模糊对本说明书的理解。
[0100] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施
例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保
护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的
权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵
循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都
作为本发明的单独实施例。
[0101] 本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备
不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个
子模块。
[0102] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单
元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或
子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何
组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任
何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权
利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代
替。
[0103] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的
范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任
意之一都可以以任意的组合方式来使用。
[0104] 此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法
元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在
此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行
的功能。
[0105] 如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必
须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0106] 尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,
本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限
定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本
技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本
发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。