一种MP4文件流直播的方法、移动终端及存储介质转让专利
申请号 : CN201910979491.1
文献号 : CN110662084B
文献日 : 2021-07-09
发明人 : 毕新维
申请人 : 北京齐尔布莱特科技有限公司
摘要 :
权利要求 :
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文件流直播的方法、移动终端及存储介质
技术领域
背景技术
我们把视频直播的流程分为如下几步:采集—>处理—> 编码和封装—>传输(推流到服务
器、服务器流分发)—>播放器流播放。
能力强、高效的网络传输(拥有网络适应层)和极佳的图像传输质量(1Mbps码率下就可以实
现标清数字图像传送)等优点,被广泛应用于低码率的无线应用、网络流媒体、网络课程、视
频会议等许许多多的媒体应用领域。
录制设备支持推流,但是某些第三方设备只支持输出 MP4或mov文件流。
助媒体描述信息(moov)来进行解码。moov信息里保存了视频流和音频流的文件偏量、抽样
率大小、时间戳等关键的全局数据,大多是在录制结束时候才生成,存在于MP4的文件结构
末尾。在直播场景下,由于moov信息尚未生成,现有的MP4文件流的解码技术无法实现实时
的解码进行推流,所以市面上直播的视频流多是flv格式,MP4格式多用于点播,而非直播场
景。且如果moov意外丢失,或者文件意外破损,将导致FFmpeg 无法解析和播放,对于期望重
要数据的复原,也是无法完成的。
发明内容
MP4文件包括视频帧和视频帧描述信息;基于视频帧描述信息,从第一MP4文件获取视频帧
字节数范围、视频帧头部字节以及视频帧解析参数,视频帧字节数范围包括视频帧最大字
节数和视频帧最小字节数;从视频录制设备获取以相同录制参数录制的、待直播的第二MP4
文件,第二MP4文件不包括视频帧描述信息;根据获取的视频帧字节数范围和视频帧头部字
节,确定第二MP4文件的视频帧字节区间,视频帧字节区间用于区分一个视频帧的起始段和
结束段;根据视频帧区间和视频帧解析参数从第二MP4文件获取并解析视频帧,得到视频帧
的H264码流,以便根据此H264 码流进行直播。
字节数是否小于第一MP4文件的视频帧最大字节数,且大于第一MP4文件的视频帧最小字节
数,若是,则将此第二MP4文件的帧确定为待定视频帧;判断待定视频帧头部字节是否等于
等一MP4文件的视频帧头部字节,若是,则将此待定视频帧确定为视频帧,若不是,则将此待
定视频帧确定为非视频帧。
帧的片头句法元素,若对比成功,则将此待定视频帧确定为视频帧,若对比未成功,则将此
待定视频帧确定为非视频帧。
误的视频帧。
析错误的字节位置,根据解析错误的字节位置定位到解析错误的视频帧。
理器执行,程序包括用于执行根据本发明的MP4文件流直播的方法的指令。
由相同的录制设备在相同的录制参数下录制的第二MP4文件,根据第一MP4文件的视频帧字
节数范围和视频帧头部字节确定第二MP4文件的视频帧字节区间,解析得视频帧的H264码
流用于直播或缺失视频描述信息(moov)的MP4文件还原。
帧头部字节后的字节进行解析获得片头句法元素,再对比有效待定视频帧和第一MP4文件
的视频帧的片头句法元素。解析字节总数少,极大加大了解析的速度和准确度。且解析更加
精准,无需更复杂的宏块级别解析,能有效避免误判和错判导致最终呈现出来的视频马赛
克、模糊、花屏、绿屏等不良效果。
附图说明
旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述
以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的
部件或元素。
具体实施方式
所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围
完整的传达给本领域的技术人员。
总线或信号线来耦合。传感器、设备和子系统可以耦合到外围接口106,以便帮助实现多种
功能。
统(例如GPS接收机)、加速度传感器、温度传感器、生物测定传感器或其他感测设备,由此可
以帮助实施相关的功能。
属氧化物半导体(CMOS)光学传感器。可以通过一个或多个无线通信子系统124来帮助实现
通信功能,其中无线通信子系统可以包括射频接收机和发射机和/或光(例如红外)接收机
和发射机。无线通信子系统 124的特定设计和实施方式可以取决于移动终端100所支持的
一个或多个通信网络。例如,移动终端100可以包括被设计成支持LTE、3G、GSM网络、 GPRS网
络、EDGE网络、Wi‑Fi或WiMax网络以及BlueboothTM网络的通信子系统124。
制器142和/或一个或多个其他输入控制器144。触摸屏控制器142可以耦合到触摸屏146。举
例来说,该触摸屏146和触摸屏控制器142可以使用多种触摸感测技术中的任何一种来检测
与之进行的接触和移动或是暂停,其中感测技术包括但不局限于电容性、电阻性、红外和表
面声波技术。
个或多个按钮(未显示)可以包括用于控制扬声器 128和/或麦克风130音量的向上/向下按
钮。
或闪存存储器(例如NAND,NOR)。存储器150可以存储操作系统152,例如Android、iOS或是
Windows Phone之类的操作系统。该操作系统152可以包括用于处理基本系统服务以及执行
依赖于硬件的任务的指令。在一些实施例中,操作系统152中包含了用于执行系统清理方法
的指令。存储器150还可以存储应用154。在移动终端运行时,会从存储器 150中加载操作系
统152,并且由处理器104执行。应用154在运行时,也会从存储器150中加载,并由处理器104
执行。应用154运行在操作系统之上,利用操作系统以及底层硬件提供的接口实现各种用户
期望的功能,如即时通信、网页浏览、图片管理、视频播放等。应用154可以是独立于操作系
统提供的,也可以是操作系统自带的,包括各种社交应用软件,如QQ、微信、微博等,也包括
各种视频播放应用软件,还可以包括相册、计算器、录音笔等系统自带应用程序。另外,应用
154被安装到移动终端100中时,也可以向操作系统添加驱动模块。
移动终端100可以是具有上述构造的手机、平板电脑、笔记本电脑等具有数据处理能力的设
备。
因此,根据本发明的MP4文件流直播的方法提供了一种能够实现实时解析MP4文件流的方
案。
的方法适于步骤S210。
频录制设备的目的为了取得更好的直播效果,其输出视频的画质比移动终端使用自身摄像
头录制的视频画质更加清晰和稳定。但有些视频录制设备只支持输出MP4文件,比如口袋云
台相机。
第一MP4文件。
存放媒体信息。
时序和物理布局的信息,包括sample的时序、类型、大小以及在各自存储容器中的位置。
video sample即为一个视频帧,或一组连续视频帧,audio sample即为一段连续的压缩音
频,它们统称sample。
以ACC码流的形式存在,一般是H264+AAC +AAC+H264+AAC+AAC+AAC+H264…的形式。如前文
所述,唯一能区分码流中的帧时序和物理布局的sample table存在于moov中,而moov存在
于MP4文件流末尾,只有MP4文件录制结束后才能对MP4文件进行解析用于播放,因此现有技
术无法将MP4文件流用于直播场景。
者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适
合各种信道和存储介质上的传输。因此通常在网络中传输时的一个视频帧就是一个NAL单
元,区别是每个 NAL单元内部还有起始码,不同的打包方式NAL单元的起始码不同。
或者0x000001。另一种是AVCC格式,即原始的 NAL打包格式。就是开始的若干字节(1,2或4
字节)是去除起始码的长度后的NAL单元的长度,即视频帧的字节数,而不是固定格式。此时
必须借助视频帧描述信息才可以解码。MP4就是原始的NAL打包格式,起始码为4个字节,代
表该视频帧的字节数。起始码的下一个字节就是NAL单元头部,及视频帧头部字节,每个类
型的帧对应的NAL单元类型字节是固定的。NAL单元头部之后是NAL单元的有效负载。表1示
出了一个NAL单元组成的结构。
分离出第一MP4文件中的H264文件,Ffmpeg分离只需要在每次调用av_read_frame()之后
将得到的视频的AVPacket存为本地文件即可。AVPacket是Ffmpeg中码流数据的载体。经过
Ffmpeg分离程序后可以得到根据每个AVPacket得到视频帧字节数范围和视频帧头部字节
以及视频帧解析参数。
MP4文件的视频帧最小字节数,则此第二MP4文件的帧为待定视频帧。如得到的视频帧最大
字节数为412650Byte,可以取50 万byte。这个值只是用于估算一帧视频最大的字节数,不
是取精确值。
标识符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语言或者其他方式获取。
割机制的复杂情况,这里只考虑一帧就是一个片。在 H264的码流中,部分视频帧序列压缩
成为I帧,部分压缩成P帧,还有部分压缩成B帧,帧的类型需要经过片解析分析视频帧的片
头后得到。I帧的片的类型(slice_type)是2或7,P帧的slice_type是0或5,B帧的slice_
type是 1或6。即对于不同类型的帧,他们对应的slice_type%5的值固定。片解析获得帧的
类型可以采用基于MP4压缩格式的标准,利用C语言或者其他方式,这里不做限制。这里就各
类型帧的作用做进一步说明:
制配置信息,如视频宽高、帧率、编码器参数等信息保持和第一MP4文件一致,同一设备相同
录制参数,视频帧字节数范围相近,且解析出的各类型帧的NAL单元头部是固定的。
以此作为结束点,表示解析程序结束。根据实时传输的mp4数据进行解析用于直播。
0x00,再读取三个字节,此三个字节的值即为等待判断的帧的字节数。判断第二MP4文件的
帧字节数是否小于第一MP4文件的视频帧最大字节数,且大于第一MP4文件的视频帧最小字
节数,若是,则将此第二MP4文件的帧确定为待定视频帧,可以减少判断步骤。如果该三字节
的值大小在第一MP4文件得出视频帧字节数范围内,继续读取一字节。如果该字节属于各类
型视频帧的NAL单元头部字节,则将此待定视频帧确定为视频帧,如果不属于,则将此待定
视频帧确定为非视频帧。然后由此视频帧的字节数划分第二MP4文件的视频帧区间。
的H264码流,解码器还需要根据视频解析参数才能进行播放。
元也是无法解码。而与第一MP4文件采用同样录制参数的的第二MP4文件的SPS和PPS也同样
是这些字节数据。
失视频描述信息(moov)信息无法解析。根据第一 MP4文件的视频帧字节数范围、视频帧头
部字节以及视频帧解析参数确定第二MP4文件视频帧字节区间。根据视频帧区间和视频帧
解析参数从第二MP4 文件获取并解析视频帧,得到视频帧的H264码流用于直播或缺失moov
信息的MP4文件还原。
取得更好的直播效果。
之间有相同的数据,如果每个片都同时携带这些数据,势必会造成码流的浪费。更为有效的
做法是将该图像的公共信息抽取出来,形成图像一级的句法元素,而在片级只携带该片自
身独有的句法元素。在H264 中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层
次。本方案主要用到片头的句法元素。需要说明的是,因为一帧视频图像可以编码为一个或
若干个片,实际应用中,码流不会出现数据分割机制的复杂情况,这里只考虑一帧就是一个
片。
置信息,如视频宽高,帧率,编码器参数等信息保持和第一MP4文件一致。同一设备相同录制
参数,解析出来的数据是固定的。也就是说第二MP4的SPS和PPS也同样是这些字节数据。
pic_order_cnt_lsb应该相等;
相等,在只含I帧和P帧的情况下,当前帧的 frame_num比上一帧的frame_num要大1,且I帧
的frame_num固定为0;
的frame_mbs_only_flag和第二MP4文件的视频帧的 frame_mbs_only_flag应该相等。
取值满足以上规则。解析字节总数少,极大加大了解析的速度和准确度。且解析更加精准,
无需更复杂的宏块级别解析,能有效避免误判和错判导致最终呈现出来的视频马赛克、模
糊、花屏、绿屏等不良效果。
不依赖moov,在发生解析漏帧、多帧、帧数据不符等情况时,需要定位到从哪一个字节开始
解析出错,比如00 01c7 1c,长度是116508。可以在ffmpeg分离程序中,增加一小段代码,该
段代码用于在mp4中查找这个串,找到它的4字节起始码,转为小端字节序长度。根据解析出
来的帧数、 sps pps的数目确定帧序列号,即完成从错误字节的位置定位到是第几帧出现
的解析错误。观察片头句法元素,找出正确的H264的片头句法元素,调整规则。代码示例如
下:
构和技术,以便不模糊对本说明书的理解。
例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保
护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的
权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵
循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都
作为本发明的单独实施例。
不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个
子模块。
元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或
子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何
组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任
何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权
利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代
替。
范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任
意之一都可以以任意的组合方式来使用。
元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在
此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行
的功能。
须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限
定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本
技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本
发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。