PS数据流解码方法、装置、计算机设备及存储介质与流程

文档序号:16404301发布日期:2018-12-25 20:19阅读:253来源:国知局
PS数据流解码方法、装置、计算机设备及存储介质与流程

本发明涉及信息处理领域,尤其涉及一种ps数据流解码方法、装置、计算机设备及存储介质。

背景技术

目前大多数摄像头厂家在提供摄像头设备时,也同时提供配套的sdk(软件开发套件,softwaredevelopmentkit)库,为传输数据和解码数据提供一套完整的解决方案。

摄像头输出数据时,先经过厂家提供的私有sdk库的封装处理,以ps数据流的形式进行传输,再用厂家自定义的解码库对ps数据流进行解码。其中,ps即mpeg2-ps的简称,mpeg2-ps是一种多路复用数字音频、视频等的封装容器,其中的ps是programstream(程序流)的简称。ps数据流是用mpeg2-ps封装容器进行封装的数据流,用于传输视频/音频数据。

一般地,摄像头厂家提供的sdk库通常比较庞大,运行起来占用资源较多;而且都是封装好的,不能灵活使用。在追求高效率的定制化应用中,迫切需要一种更高效的解码方法。



技术实现要素:

本发明实施例提供一种ps数据流解码方法、装置、计算机设备及存储介质,用一种简便高效的解码方法对ps数据流进行解码,以解决使用sdk库解码的运行效率低的问题。

一种ps数据流解码方法,包括:

对ps数据流进行解析,得到包含若干h264视频数据包的包集合;

从所述包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合,对所述测试包进行过滤分析,并根据过滤分析的结果确定所述h264视频数据包的帧类型和所述h264视频数据包的包头信息之间的映射关系,其中,所述帧类型包括i帧和p帧;

针对所述包集合中的每个所述h264视频数据包,根据每个所述h264视频数据包的包头信息,以及所述映射关系,对每个所述h264视频数据包进行数据提取,得到帧数据,其中,所述帧数据为i帧数据或p帧数据;

按照预设的h264编码要求,对所述帧数据进行重组,得到h264数据流。

一种ps数据流解码装置,包括:

数据流解析模块,用于对ps数据流进行解析,得到包含若干h264视频数据包的包集合;

过滤分析模块,用于从所述包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合,对所述测试包进行过滤分析,并根据过滤分析的结果确定所述h264视频数据包的帧类型和所述h264视频数据包的包头信息之间的映射关系,其中,所述帧类型包括i帧和p帧;

提取模块,用于针对所述包集合中的每个所述h264视频数据包,根据每个所述h264视频数据包的包头信息,以及所述映射关系,对每个所述h264视频数据包进行数据提取,得到帧数据,其中,所述帧数据为i帧数据或p帧数据;

重组模块,用于按照预设的h264编码要求,对所述帧数据进行重组,得到h264数据流。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述ps数据流解码方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述ps数据流解码方法的步骤。

上述ps数据流解码方法、装置、计算机设备及存储介质,先对ps数据流进行解析,得到h264视频数据包,完成第一层数据解包;对h264视频数据包的包头信息进行统计判断,得出h264视频数据包中i帧数据的包头信息,以及p帧数据的包头数据,并根据i、p帧数据的包头信息提取得到h264帧数据,完成第二层数据解包;最后将i帧数据和p帧数据进行排列组合,得到h264数据;能代替厂家私有sdk库进行解码操作,运行时占用资源少,运行效率更高,从而提供一种简便快捷的、对ps数据流进行解码得到h264数据的通用解码方法,不依赖厂家私有sdk库。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中ps数据流解码方法的一应用环境示意图;

图2是本发明一实施例中ps数据流解码方法的流程图;

图3是本发明一实施例中ps数据流解码方法中步骤s2的流程图;

图4是本发明一实施例中ps数据流解码方法中步骤s1的流程图;

图5是本发明一实施例中ps数据流解码方法中步骤s3的流程图;

图6是本发明一实施例中ps数据流解码装置的示意图;

图7是本发明一实施例中计算机设备的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请提供的ps数据流解码方法,可应用在如图1的应用环境中。其中,客户端包括摄像头,从摄像头输出的h264数据流,首先被客户端使用摄像头厂家私有的sdk库封装成ps数据流,然后以ps数据流的形式通过网络传输到服务端,由服务端对ps数据流进行解码,得到h264数据流。网络可以是有线网络或者无线网络。h264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称。本发明实施例提供的ps数据流解码方法应用于服务端,服务端具体可以是计算机设备,包括但不限于pc机、平板电脑、智能手机终端等。

在一实施例中,如图2所示,提供了一种ps数据流解码方法,其具体实现流程包括如下步骤:

s1:对ps数据流进行解析,得到包含若干h264视频数据包的包集合。

通常为便于高效通过网络传输音/视频流数据,客户端采用mpeg2-ps对摄像头输出的h264数据流进行封装,生成ps数据流。根据ps的封装标准,一个完整的封装了h264的ps数据流结构为:

psheader+pssystemheader+pssystemmap+pesheader+h264data

其中,psheader是ps数据流的包头,由14字节组成,主要包括起始字段标志、系统时钟字段、包填充长度字段等;

pssystemheader是ps数据流的系统包头,由18字节组成,主要包括起始字段标志、速率界限字段、音频界限字段、流标识字段等;

pssystemmap是ps数据流的映射包头,由30字节组成,主要包括起始字段标志、映射标识字段、映射长度字段、基本流信息长度字段等;

pesheader是ps数据流的扩展包头,由14字节组成,主要包括流标识字段、分组长度字段、版权字段、时间戳字段等;

h264data是由ps封装的原始h264数据流。

服务端可以根据ps封装标准中各包头的字节数来获取h264数据所在的位置,并提取出来。

具体地,对于psheader包,包括起始字段pack_start_code,其对应的值为0x000001ba,服务端根据psheader包的包长14字节和起始字段的值,从ps数据流中依次截取14字节数的数据,并和起始字段对应的值进行比较,若相等则确定从ps数据流中找出psheader包,然后从包头起始字节开始跳过14字节,检测ps数据流的下一个包头;

对于pssystemheader包,服务端根据其包长18字节和其包起始字段system_header_start_code是否为0x000001bb,若相等则确定为pssystemheader包,并从该包头跳过18字节,继续检测ps数据流的下一个包头;

对于pssystemmap包,服务端需要检测其起始字段(packet_start_code_prefix)和标识字段(map_stream_id),若起始字段的值为0x000001,且标识字段的值为0xbc,则可确定为pssystemmap包,并跳过30字节,继续检测ps数据流的下一个包头。同时,服务端还可以检测pssystemmap包的流类型字段(stream_type),以确定ps数据流中封装的是何种数据流类型。如,对于mpeg-4视频流,该字段的值为0x10,对于h264数据流,该字段的值为0x1b,等等。

对于pesheader和h264data包,h264数据流是紧跟在pesheader包后面的,服务端检测pesheader包的分组起始码前缀字段,分组起始码前缀字段占3字节,值为0x000001,从pesheader包头起始位置往下数14个字节,可以定位到h264data包的起始位置。

以此类推,服务端对ps数据流中各包进行逐个检测包头的字段信息,得到包含若干h264视频数据包的包集合,即ps数据流中“pesheader+h264data”的包。

s2:从包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合,对测试包进行过滤分析,并根据过滤分析的结果确定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系,其中,帧类型包括i帧和p帧。

在h264的压缩标准中,对数据帧进行了分类。其中,主要有三种帧类型,即i帧、p帧和b帧。完整编码的帧叫i帧,i帧即帧内编码帧,是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码,视频序列中的第一个帧始终都是i帧;参考之前的i帧生成的只包含差异部分编码的帧叫p帧,p帧又叫帧间预测编码帧;b帧是双向预测编码帧,也就是b帧记录的是本帧与前后帧的差别。其中,i帧是关键帧,没有i帧,p帧就无法解码。一组连续的画面,需要至少一个i帧及若干p帧或b帧组合起来。与i帧相比,p帧或b帧通常占用更少的数据位。

h264作为广泛采用的编码格式标准,通常有几种常用的编码模式:

baselineprofile:基本画质,主要用于可视电话,会议电视,无线通讯等实时通信;

mainprofile:主流画质,主要用于数字广播电视和数字视频存储;

extendprofile:进阶画质,主要用于改进误码性能和码流切换;

highprofile:高级画质,主要用于高压缩效率和质量。

摄像头输出的h264数据流是采用的baselineprofile编码方式,由于在视频监控系统中预览画面是实时的,对画面的流畅性要求较高,因此,在baselineprofile编码模式下,只采用i帧和p帧进行编码,使得输出的h264视频数据流可以提高网络的适应能力,且能降低解码成本。

由于步骤s1解析得到的h264数据包中只包括了两种帧类型的数据,即i帧和p帧,因此,服务端需要通过过滤分析出i帧和p帧数据各自对应的包头信息。

服务端从包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合对测试包进行过滤分析,从而找出i帧和p帧各自对应的包头信息,即帧类型和包头信息之间的映射关系。

预设的过滤条件集合,是指服务端用于对测试包的包头信息进行过滤分析,进而确定h264视频数据包的帧类型对应的包头信息的判断条件的集合。预设的过滤条件集合可以包括但不限于:pesheader包的流标识字段、h264data包的包长等。

过滤分析具体可以是从预设的过滤条件集合中选取过滤条件与测试包一一进行比较。例如,选取的过滤条件为h264data包的包长,h264data包的包长的具体值可以为30字节,则将测试包中h264data包的包长字段不等于30字节的测试包过滤掉不作处理;选取的过滤条件为pesheader包的流标识字段,pesheader包的流标识字段具体值可以为“0xc0”,则将测试包中pesheader包的流标识字段的值不等于“0xc0”的测试包过滤掉不作处理。

具体地,可以将帧数据的大小作为判断标准。如i帧是对一幅图像进行完整编码的帧,p帧是参考之前的i帧生成的只包含差异部分编码的帧,因此,包括的像素信息应该是i帧多于p帧,体现在帧数据的大小上,则i帧占的字节数大于p帧。pesheader包的分组长度字段标识了pesheader包后h264帧数据的大小,因此,服务端对测试包中pesheader包的分组长度字段的值进行筛选。

例如,服务端取10个h264视频数据包作为测试包,在这10个测试包中,分组长度字段的值为116字节的有2个,分组长度字段的值为20字节的有8个,则确认分组长度字段的值为116字节的测试包对应i帧数据,分组长度字段的值为20字节的测试包对应p帧数据。然后,服务端分别检测i帧数据中h264data包的包头信息和p帧数据中h264data包的包头信息,从而确定i帧的包头信息和p帧的包头信息。如i帧数据中h264data包的包头字段为0x0001ba,则i帧的包头信息为0x0001ba;p帧数据中h264data包的包头字段为0x0001aa,则p帧的包头信息为0x0001aa。

s3:针对包集合中的每个h264视频数据包,根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据,其中,帧数据为i帧数据或p帧数据。

由步骤s2得出了h264视频数据包中i帧数据和p帧数据分别对应的包头信息,服务端根据h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,即可得到h264视频数据包中的i帧数据或p帧数据。

具体地,服务端以pesheader包中分组长度为116字节,且h264data包头字段为0x0001ba的数据为i帧数据,服务端根据pesheader包的字节长度,去掉pesheader包,将其后的h264data包作为i帧数据提取到临时数组中,并标记为i帧数据;同理,服务端以pesheader包中分组长度为20字节,且h264data包头字段为0x000fba的数据为p帧数据,服务端根据pesheader包的字节长度,去掉pesheader包,将其后的h264data包作为p帧数据提取到临时数组中,并标记为p帧数据。

s4:按照预设的h264编码要求,对帧数据进行重组,得到h264数据流。

h264编码要求是指根据帧率来确定i帧数据和p帧数据的组合方式。帧率(framerate)是用于测量显示帧数的量度,测量单位为每秒显示帧数(framespersecond,简称:fps)或“赫兹”(hz)。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,因此,视频画面的帧率至少在每秒16帧以上。

摄像头输出的h264数据流是帧数据组成,帧数据分为i帧数据和p帧数据。以每秒播放25个帧的电影视频的帧率为例,每25个帧就有一个关键帧,即i帧,其余为p帧。增加关键帧个数可以改善画面质量,但是同时增加带宽和网络负载。

为了保证摄像头输出的视频的画面质量,服务端以每25帧中有一个关键帧,即i帧,其余为p帧,进行重组,得到h264数据流。重组后的h264数据流可以表示为如下的帧数据组合:

ippppppppp...

即第一帧为i帧,后面跟随24个p帧。

具体地,服务端可以创建一个大数组,先将第一帧i帧数据填充到数组中,然后依次将24帧p帧数据陆续填入数组中,即可完成一帧h264数据流的重组。

在本实施例中,先对ps数据流进行解析,得到h264视频数据包,完成第一层数据解包;对h264视频数据包的包头信息进行统计判断,得出h264视频数据包中i帧数据的包头信息,以及p帧数据的包头数据,并根据i、p帧数据的包头信息提取得到h264帧数据,完成第二层数据解包;最后将i帧数据和p帧数据进行排列组合,得到h264数据;能代替厂家私有sdk库进行解码操作,运行时占用资源少,运行效率更高,从而提供一种简便快捷的、对ps数据流进行解码得到h264数据的通用解码方法,不依赖厂家私有sdk库。

进一步地,如图3所示,在一实施例中,对步骤s2,即从包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合,对测试包进行过滤分析,并根据过滤分析的结果确定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系,具体包括如下步骤:

s21:从预设的过滤条件集合中选取一个过滤条件,作为当前过滤条件。

预设的过滤条件集合可以包括包头字段起始码、包头长度等。其中,包头字段起始码为0x0000ba~0x000fba;包头长度为20字节、116字节、336字节。

具体地,可以将过滤条件集合中包头字段起始码和包头长度分别保存为一个一维数组,如包头字段起始码数组中的值从0x0000ba到0x000fba;包头长度数组中的值为20、116和336。

s22:若测试包的包头信息符合当前过滤条件,则根据测试包的包头信息对测试包进行数据提取,得到包数据。

将测试包的包头信息与当前过滤条件进行比较,若包头信息与当前过滤条件符合,则根据测试包的包头信息对测试包进行数据提取,得到包数据。

具体地,从包头字段起始码数组中取出一个值,如0x0001ba,以其为i帧数据的包头字段,将测试包的包头字段起始码与0x0001ba进行比较,若两者相等,则确定该测试包为i帧数据,将其提取出来并标记为i帧数据,同时,将其他测试包作为p帧数据提取并标记;若两者不相等,则选取下一个测试包的包头字段起始码与0x0001ba进行比较,直到遍历完所有的测试包。

s23:对包数据进行h264解码,获取图像数据。

图像数据可以是rgb图像数据,或yuv图像数据。

rgb图像数据是rgb格式进行编码的图像数据。rgb色彩模式是工业界的一种颜色标准,是通过对红(r)、绿(g)、蓝(b)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,rgb即是代表红、绿、蓝三个通道的颜色。采用rgb格式编码的方法,使得每种颜色都可用三个变量来表示,即红色绿色以及蓝色的强度。常用的rgb格式有rgb24、rgb32、argb32等。其中,rgb24使用24位来表示一个像素,rgb分量都用8位表示,取值范围为0-255;rgb32使用32位来表示一个像素,rgb分量各用去8位,剩下的8位用作灰度通道或者不用;argb32就是带alpha(透明度)通道的rgb24。

yuv图像数据是yuv格式进行编码的图像数据。yuv,是一种颜色编码方法,常使用在各个视频处理组件中。y、u、v构成一个彩色矢量空间,其中,“y”表示明亮度(luminance或luma),也就是灰阶值;而“u”和“v”表示的则是色度(chrominance或chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。yuv特别适合在图像的数字处理中用于数据的传输和存储。yuv图像主要的采样格式有ycbcr4:2:0、ycbcr4:2:2、ycbcr4:1:1和ycbcr4:4:4。其中ycbcr4:1:1比较常用,其含义为:每个点保存一个8比特的亮度值(也就是y值),每2乘2个点保存一个cr和cb值,图像在肉眼中的感觉不会起太大的变化。

rgb和yuv都是色彩空间,用于表示颜色,rgb图像数据和yuv图像数据之间可以相互转化,与rgb视频信号传输相比,yuv图像数据最大的优点在于只需占用极少的带宽。

具体地,对步骤s22中获得的标记为i帧的包数据和标记为p帧的包数据按照h264的编码标准进行解码,将h264数据流中i帧、p帧或b帧内的像素信息提取出来,并转换成rgb数据或yuv数据。

优选地,将包数据解码成yuv图像数据。

s24:若图像数据与预设阈值匹配成功,则根据当前过滤条件确定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系。

将rgb图像数据或yuv图像数据,与预设阈值进行比较,以此判断图像是否有失真,从而确定h264视频数据包中的i帧和p帧分别对应的包头信息。

预设阈值可以是图像中所有像素的色彩值的平均值或某个区域内像素的色彩分布情况。例如,对于画面全白或全黑的情况,体现在图像数据上,将出现大面积的像素点色彩值一样,即对于全黑的情况,像素点均为{0,0,0},对于全白的情况,像素点均为{255,255,255};对于画面花屏或有马赛克的情况,体现在图像数据上,某个区域内出现有规律的矩形区块,即某个区域内的像素点值一样,且组成正方形。以上这些情况,其最终原因是在步骤s23中,h264解码模块将非i帧数据当做i帧进行解码,或将非p帧数据当做p帧进行解码。

rgb图像数据或yuv图像数据均是以数组形式存储的。例如,一个320x480分辨率的rgb图像数据,共有153600个像素点,每个像素点表示为{r,g,b}的小数组,其中,r、g、b分别代表一个像素点的红绿蓝通道的值。

具体地,可以将预设阈值的画面存储为一幅图像,该图像具体可以是一幅全白或全黑或花屏的异常图像,图像尺寸与图像数据的尺寸一致,将该图像的像素数组与图像数据的rgb数组或yuv数组进行比较,比较以像素点为单位。若比较的结果中,像素值相等的像素点个数低于总像素点个数的20%,则代表输出的图像数据没有失真,从而确定h264视频数据包中的i帧和p帧分别对应的包头信息。

s25:若图像数据与预设阈值匹配不成功,则从预设的过滤条件集合中选取另一个过滤条件,作为当前过滤条件,并返回步骤s22继续执行,直到遍历完预设的过滤条件集合中的全部过滤条件。

具体地,将预设阈值的画面存储为一幅图像,图像尺寸与图像数据的尺寸一致,将该图像的像素数组与图像数据的rgb数组或yuv数组进行比较,比较以像素点为单位。若比较的结果中,像素值相等的像素点个数高于总像素点个数的80%,则代表输出的图像数据有失真。然后,服务端从包头字段起始码数组或包头长度数组中选取另一个过滤条件,作为当前过滤条件,重新确定i帧或p帧的包头信息,从而继续将标记为i帧的包数据和标记为p帧的包数据输入到h264解码模块,直到遍历完包头字段起始码数组或包头长度数组中的全部过滤条件,即循环执行从步骤s22到步骤s25的过程,此处不再赘述。

若遍历完预设的过滤条件集合中的全部过滤条件仍匹配不成功,则服务端将返回异常信息,用于提示接收到的ps数据流有问题或是接收到了不同封装格式的ps数据流。

在本实施例中,从预设的过滤条件集合中依次选取过滤条件,与测试包的包头信息进行比较,逐步推定出定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系,从而能够快速准确的从ps数据流中找到h264视频数据包中i帧数据和p帧数据各自的包头字段起始码和包头长度,即确定h264视频数据包的帧类型和包头信息之间的映射关系,提高ps数据流的解码速度。

进一步地,如图4所示,在一实施例中,针对步骤s1,即对ps数据流进行解析,得到包含若干h264视频数据包的包集合,包括如下步骤:

s11:根据ps数据包的包头信息,从ps数据流中提取得到包含若干h264数据包的包集合。

具体地,按照ps数据流的编码标准,服务端可以提取ps数据包的包头信息,并利用工具对ps数据流进行解析,从而得到包含若干h264数据包的包集合,即由“pesheader+h264data”包组成的包集合。

例如,可以采用工具colorcontrastanalyser解析ps数据流,获取ps数据包相关的参数,包括:包头名,包头长度,包类型,包属性,帧类型。其中,colorcontrastanalyser是一款闭源的解析工具,能解析包括ps数据流在内的很多视频数据流。通过该工具对ps数据流进行分析,可以减轻服务端自行处理ps数据流的工作负载。

s12:若h264数据包的包头信息与预设字段信息匹配,则确定该h264数据包为h264音频数据包,否则,确认该h264数据包为h264视频数据包。

由步骤s11中获得的包含若干h264数据包的包集合中,包括有h264音频数据包和h264视频数据包。服务端需要将h264音频数据包删除,只留下h264视频数据包。

服务端可以检测pesheader包中的流标识字段stream_id,该字段的取值范围在0xc0~0xdf时,代表h264data包中的数据为音频数据,h264数据包为h264音频数据包,若该字段的值为其他值,则代表h264data包中的数据为视频数据,h264数据包为h264视频数据包。

具体地,当服务端接检测到pesheader包的流标识字段的取值为0xc0,则确定该pesheader包后的h264data包为h264音频数据包,服务端对该包作出标记,以区分于h264视频数据包。

s13:将h264音频数据包从包集合中删除,得到包含若干h264视频数据包的包集合。

具体地,服务端根据步骤s12中作出的标记,将h264音频数据包从包集合中删除,得到包含若干h264视频数据包的包集合。

在本实施例中,服务端对ps数据流中的h264音频数据包进行过滤,删除h264音频数据包,只对h264视频数据包进行解码,提高了对ps数据流的解码速度。

进一步地,如图5所示,在一实施例中,针对步骤s3,即针对包集合中的每个h264视频数据包,根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据,具体包括如下步骤:

s31:将h264视频数据包存储到预设的缓存池中。

通常,视频的解码过程对时效性要求非常高,解码不及时将会造成视频画面的卡顿或丢帧现象,从而影响画质和观感。服务端将h264视频数据包缓存到本地,从本地获取h264视频数据包并解码的速度要比从网络获取并解码的速度快。

服务端为h264视频数据包开辟一块缓存池,缓存池的大小预先设置好,服务端将h264视频数据包依次存储到预设的数组中。具体地,服务端开辟一块临时存储区域,分配的数组空间大小可以根据h264视频流播放的时间确定。

例如,需要缓存10秒才开始解码并播放视频,则播放10秒视频所需要的h264数据流的大小即作为缓存池的大小。假设一秒播放25帧画面,这25帧中有一个i帧,24个p帧,则10秒视频需要10个i帧和240个p帧的数据,缓存池的数组大小等于10个i帧数据和240个p帧数据占用的字节数。

s32:若检测到缓存池已存满,则根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据。

服务端将h264视频数据包依次填充到缓存池的数组时,累计已填充的h264视频数据包的大小,当检测到数组存满时,则服务端从缓存池数组中依次取出h264视频数据包,并根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据。其具体提取,得到帧数据的过程已在步骤s3中详述,此处不再赘述。同时,服务端继续缓存新接收到的h264视频数据包到缓存池数组中。

在本实施例中,服务端将h264视频数据包存储到缓存池,并从缓存池中取h264视频数据包然后提取帧数据,而不再是对从网络接收到的h264视频数据包进行操作,这样边接收数据边提取数据,互不干扰,能减少了解码过程对网速的依赖,从整体上提高解码速度。

进一步地,在一实施例中,对步骤s4,即按照预设的h264编码要求,对帧数据进行重组,得到h264数据流,包括:

将i帧数据和p帧数据以预设的帧数量进行交叉排列组合,得到h264数据流。

h264视频画面的质量与i帧和p帧的排列组合有明显的关系,不同的排列组合画面质量不一样。一般来说,增加i帧数量可以改善画面质量,但是同时增加带宽和网络负载,

预设的帧数量即在h264数据流中,一个i帧数据与下一个i帧数据之间间隔了多少个p帧数据。具体地,对于摄像头输出的h264数据流,一个i帧数据与下一个i帧数据之间隔了49个p帧数据。

在本实施例中,i帧数据与p帧数据按照预设的帧数量进行交叉排列组合,使得重组后的h264数据流有不同的画面质量,能适用于不同的应用场合。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种ps数据流解码装置,该ps数据流解码装置与上述实施例中ps数据流解码方法一一对应。如图6所示,该ps数据流解码装置包括数据流解析模块61、过滤分析模块62、提取模块63和重组模块64。各功能模块详细说明如下:

数据流解析模块61,用于对ps数据流进行解析,得到包含若干h264视频数据包的包集合;

过滤分析模块62,用于从包集合中选择预设数量的h264视频数据包作为测试包,使用预设的过滤条件集合,对测试包进行过滤分析,并根据过滤分析的结果确定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系,其中,帧类型包括i帧和p帧;

提取模块63,用于针对包集合中的每个h264视频数据包,根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据,其中,帧数据为i帧数据或p帧数据;

重组模块64,用于按照预设的h264编码要求,对帧数据进行重组,得到h264数据流。

进一步地,过滤分析模块62包括:

过滤条件选取子模块621,用于从预设的过滤条件集合中选取一个过滤条件,作为当前过滤条件;

包数据提取子模块622,用于若测试包的包头信息符合当前过滤条件,则根据测试包的包头信息对测试包进行数据提取,得到包数据;

解码子模块623,用于对包数据进行h264解码,获取图像数据;

确定映射关系子模块624,用于若图像数据与预设阈值匹配成功,则根据当前过滤条件确定h264视频数据包的帧类型和h264视频数据包的包头信息之间的映射关系;

循环子模块625,用于若图像数据与预设阈值匹配不成功,则从预设的过滤条件集合中选取另一个过滤条件,作为当前过滤条件,并返回若测试包的包头信息符合当前过滤条件,则根据测试包的包头信息对测试包进行数据提取,得到包数据的步骤继续执行,直到遍历完预设的过滤条件集合中的全部过滤条件。

进一步地,过滤分析模块61包括:

ps数据流过滤子模块611,用于根据ps数据包的包头信息,从ps数据流中提取得到包含若干h264数据包的包集合;

包头信息匹配子模块612,用于若h264数据包的包头信息与预设字段信息匹配,则确定该h264数据包为h264音频数据包,否则,确认该h264数据包为h264视频数据包;

过滤子模块613,用于将h264音频数据包从包集合中删除,得到包含若干h264视频数据包的包集合。

进一步地,提取模块63包括:

缓存子模块631,用于将h264视频数据包存储到预设的缓存池中;

提取子模块632,用于若检测到缓存池已存满,则根据每个h264视频数据包的包头信息,以及映射关系,对每个h264视频数据包进行数据提取,得到帧数据。

进一步地,重组模块64包括:

重组子模块641,用于将i帧数据和p帧数据以预设的帧数量进行交叉排列组合,得到h264数据流。

关于ps数据流解码装置的具体限定可以参见上文中对于ps数据流解码方法的限定,在此不再赘述。上述ps数据流解码装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种ps数据流解码方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中ps数据流解码方法的步骤,例如图2所示的步骤s1至步骤s4。或者,处理器执行计算机程序时实现上述实施例中ps数据流解码装置的各模块/单元的功能,例如图6所示模块61至模块64的功能。为避免重复,这里不再赘述。

在一实施例中,提供一计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中ps数据流解码方法,或者,该计算机程序被处理器执行时实现上述装置实施例中ps数据流解码装置中各模块/单元的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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