一种视频解码方法
【专利摘要】本发明提供了一种视频解码方法,该方法包括:在视频采集阶段申请预定数量的帧缓冲,将申请到的帧缓冲区直接映射到用户空间,将采集到图像数据进行格式转换,对数据进行编码;对视频数据进行拆分和组帧发送,当接收到一帧数据时,接收线程,数据处理线程和解码线程以流水线方式同时运行;对数据进行解码,将解码后的数据进行格式转换和显示。本发明提出了一种视频解码方法,优化了视频数据读取的实时性,保证了视频的流畅性。以简单的结构、低廉的成本,容易实现的技术完成了高速视频的采集、压缩处理、数字传输和解码。
【专利说明】一种视频解码方法
【技术领域】
[0001]本发明涉及视频处理,特别涉及一种在无线传输和解码视频的方法。
【背景技术】
[0002]随着无线通信技术的出现和普及,使得无线网络传输实时视频成为了可能。终端产品丰富使得无线网络视频传输系统得到了广泛的应用,如无线视频监控、无线可视电话、视频点播、智能设备电视直播、移动视频会议等。但无线网络环境下的视频播放机制成本过高,并且受网络稳定性的影响,视频传输和解码的实时性和流畅性也需要进一步优化。
【发明内容】
[0003]为解决上述现有技术所存在的问题,本发明提出了一种视频解码方法,包括:
[0004]在视频采集阶段使用统一的API函数,在只读模式下打开摄像头设备文件,然后设置视频设备的采集格式,保存相关参数;向驱动程序申请预定数量的帧缓冲,将申请到的帧缓冲区直接映射到用户空间,由用户直接获取帧数据,将缓冲区保存在采集消息队列,返回每个缓冲区的首地址和长度,并将首地址和长度保存在结构体类型的缓冲对象中,当开始采集视频时,在采集到完整一帧视频后,控制缓冲从消息队列输出,依据地址和帧长度获得采集到的视频数据,将帧缓冲重新入队列,实现循环采集;将采集到的JPEG图像数据进行格式转换,转换成YUV格式,对YUV格式的数据进行编码;通过编码将视频数据压缩,并对视频数据进行拆分和组帧发送,依据缓冲器大小对视频数据进行划分,并定长发送;划分的每一组视频数据加入帧头,数据大小,帧尾的标志位进行组帧;
[0005]当接收到一帧数据时,通过软中断信号通知应用程序的接收线程读取,接收线程把数据保存在环形拼接缓冲区中的第一缓冲区中,所述环形拼接缓冲区由四个缓冲区组成,用于将接收到的视频数据进行缓存以等待数据处理线程获取数据来拼接,数据处理线程通过所述标志位获得视频数据,并将视频流拷贝到视频暂存区域进行数据的拼接,数据的拼接按照接收顺序和上一帧数据的大小来偏移本次保存视频的地址,当完整的接收到一帧视频数据后,将完整的数据转到环形解码缓冲区,解码线程将接收的视频数据解码并在显示器上显示,接收线程,数据处理线程和解码线程是同时运行的,而且采用信号量机制实现同步共享同一缓冲区进行数据的交互;
[0006]对数据进行MPEG解码,获得解码后的数据保存地址,解码结束时释放解码器资源,将解码后的数据格式即YUV格式转换成RGB格式在显示器上预览。
[0007]优选地,所述对视频数据进行编码,进一步包括:
[0008]读入一组帧视频序列,对其进行奇偶分离得到奇数帧视频序列和偶数帧视频序列;分别对两个序列进行编码,得到奇数帧视频序列的冗余信息以及偶数帧视频序列的冗余信息,通过两个相互独立的信道传送到解码端,在解码端进行双路解码,用得到的两路信息进行奇偶帧排序得到双路解码视频序列;在对每个序列进行解码时,根据对应解码器采用帧内插过程恢复出单路解码视频序列;所述帧内插过程将第i^mfk(p)和第k+i帧fk+1(P)的像素值平均后生成一个初始复原帧f (P) = (4化)+4+1化))/2,其中€&)表示复原帧中位置P处的像素值,然后对第1^帧4(?)和第k+Ι帧fk+1(p)分别通过后向预测和前向预测,取重叠部分的平均值作为运动补偿的最终值:f (P) = (fk(p+MV(p)/2) +fk+1 (p+MV(p)/2))/2,其中MV(p)表示像素运动矢量;用所得平均值代替上一步初始化生成的初始复原帧。
[0009]对于奇数帧构成的视频序列,首先用奇数帧视频序列通过帧内插复原出偶数帧视频序列,对复原得到的偶数帧进行分块,结合真实的偶数帧计算每一块的复原质量值;对于偶数帧视频序列,用偶数帧序列通过帧内插复原出奇数帧序列,然后对复原出的奇数帧进行分块,并结合真实的奇数帧计算每一块的复原质量值;
[0010]根据计算得到的复原质量值设置两个阈值Tl和T2,其中Τ1ΧΓ2,如果块的复原质量值> Tl,则该模式定义为模式I ;如果块的复原质量为T2〈复原质量值〈Tl,则该模式定义为模式2 ;如果块的复原质量复原质量值< Τ2,则该模式定义为模式3,其中所述模式定义如下:(I)模式1,当块的复原质量为复原质量值> Tl时,不传送任何冗余信息;(2)模式2,当块的复原质量为Τ2〈复原质量值〈Tl时,把运动矢量MV作为冗余信息传送到解码端,即用当前块通过运动估计在前一帧中寻找差异最小块,记录其运动矢量MV ; (3)模式3,当块的复原质量为复原质量值< Τ2时,不仅传送模式2中的运动矢量MV,还传送残差信息,当找到运动矢量MV后,用当前块减去前一帧中差异最小块得到另一部分冗余信息即残差数据,直接对运动矢量信息进行算术编码,对残差数据进行DCT变换并且量化取整,然后进行算术编码,最后传送到解码端进行解码;其中阈值Tl和Τ2的确定是根据信道带宽的大小和所需复原质量确定冗余信息量,进而确定阈值Tl和Τ2。
[0011]本发明相比现有技术,具有以下优点:
[0012]提出了一种视频解码方法,优化了视频数据读取的实时性,保证了视频的流畅性。以简单的结构、低廉的成本,容易实现的技术完成了无线视频的采集、压缩处理、数字传输和解码。
【专利附图】
【附图说明】
[0013]图1是根据本发明实施例的视频解码方法的流程图。
【具体实施方式】
[0014]下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0015]本发明一方面提供了一种视频解码方法,采用多线程方式,优化了视频数据读取的实时性,保证了视频的流畅性。以简单的结构、低廉的成本,容易实现的技术完成了高速视频的采集、压缩处理、数字传输和解码。图1是根据本发明实施例的视频解码方法流程图。如图1所示,实施本发明的具体步骤如下:
[0016]视频的采集阶段,应用程序使用统一的API函数来进行操作:
[0017]I)使用只读模式打开USB摄像头设备文件,然后设置视频设备采集格式,保存相关参数。
[0018]2)向驱动程序申请预定数量的帧缓冲。
[0019]3)将申请到的帧缓冲映射到用户空间,用户可直接获取帧数据。
[0020]4)将申请到的缓冲区保存在采集消息队列,系统返回每个缓冲区的首地址和长度,这些参数保存在结构体类型的缓冲对象中。
[0021]5)当开始采集视频时,在采集到完整一帧视频后,控制缓冲从消息队列输出,用户依据地址和帧长度就可以获得采集到的视频数据。
[0022]6)将帧缓冲重新入队列,实现循环采集。
[0023]本发明中在视频编码和解码阶段,处理比特流和控制视频编解码硬件,USB摄像头采集到的图像数据格式是JPEG,需要进行格式转换,将采集的图像格式转换成YUV格式。对YUV格式的数据进行压缩以减小其传输所需要的带宽。首先进行初始化,设置视频分辨率和比特率,获得需要编码的数据地址,对数据进行MPEG编码,获得编码后的数据保存地址,编码结束,释放编码器资源。
[0024]视频格式的解码同样与编码类似的过程,首先进行初始化,设置视频分辨率和比特率,获得需要解码的数据地址,对数据进行MPEG解码,获得解码后的数据保存地址,解码结束时释放解码器资源。解码后的数据格式是YUV格式,并将该YUV格式转换成RGB格式后才能在显示器上预览。
[0025]通过编码将视频数据压缩后,对数据进行拆分和组帧发送,依据缓冲器大小对数据进行划分,并定长发送。划分的每一组数据加入一些标志位进行组帧,包括帧头2字节,数据大小2字节,帧尾I字节。在进行数据划分时要考虑两种情况:一是编码后的数据可以分成整数帧,二是编码后的数据不能整数划分,能分成整数帧和余下不足单位长度的数据帧。
[0026]接口参数包括控制模式,起始位停止位数量等参数,接口主要参数设置是在操作系统提供的标准接口中。需要注意的是本发明使用接口来传递二进制表示的视频数据,所以要关闭软件流控,发送模式设置为非规范模式,输入的数据不会被合成一行,不对数据进行加工处理。
[0027]配置好关键参数后,接口的运行环境就准备就绪,这时就可以调用写入函数将要发送的数据写入接收设备。串行数据经过调制过后送如发射机无线传输。接收机收到数据经过低噪声放大,下变频到中频,中频放大之后送入解调模块恢复出串行数据。在接收上采用中断方式,当串行接收缓冲区接收到一帧数据通过软中断信号通知应用程序读取,并把数据存在环形拼接缓冲区中的第一缓冲区中,所述环形拼接缓冲区由四个缓冲区组成,用于将接收到的视频数据进行缓存以等待数据处理线程获取数据来拼接。
[0028]应用程序读取接收的数据后,通过标志位获得视频数据,并将视频流拷贝到一个视频暂存区域进行数据的拼接,数据的拼接按照接收顺序和上一帧数据的大小来偏移本次存视频的地址实现。当完整的接收到一帧视频数据后,将完整的数据转到环形解码缓冲区,解码线程将接收的视频数据解码并在显示器上显示。因为接收线程,数据处理线程和解码线程是同时运行的,而且共享同一缓冲区进行数据的交互,因此必须采用信号量机制实现同步。
[0029]进行实际操作之前,进程先检查信号量的值,如果当前值大于0,则进行P操作(P操作使信号量值减I),否则休眠,等待其他进程(或线程)在该信号量上V操作(V操作使信号量值加I)。
[0030]发送端在视频采集时直接将物理内存直接映射到用户虚拟内存,使用户空间可以直接对物理空间操作,相比较在用户控件和内核空间互相拷贝数据,效率更高。
[0031]接收端除接收主线程之外,开辟了一个数据分帧和数据拼接线程,一个解码显示线程,组成了一个类似于三级流水线形式的处理流程,保证了画面的流畅。
[0032]为解决已有的视频编码方法只兼容特定标准编解码器的问题,以及进一步提高压缩效率和视频传输的鲁棒性,利用更具广泛兼容性,压缩效率更高,视频传输更鲁棒的视频编码过程。在编码端对原始视频序列进行时域抽样来产生初始视频序列,以保证和当前标准编解码器的兼容性,然后在编码端预测解码复原可能出现的错误影响,为每个视频序列分配必要的冗余信息。在解码端,这些冗余信息有助于更好地估计丢失信息从而获得较好的解码复原质量。
[0033]首先,在编码端读入一组视频序列的前N帧,对其进行奇偶分离,得到一段奇数帧视频序列和一段偶数帧视频序列;然后,分别用标准视频编码器对两个序列进行编码,得到奇数帧视频序列的冗余信息以及偶数帧视频序列的冗余信息,再通过两个相互独立的信道传送到解码端。在解码端,如果两个编码信息均被收到,则进行双路解码。由于收到了两路信息,可以用得到的两路信息进行奇偶帧排序得到双路解码视频序列。单路解码时,单路描述根据对应解码器采用帧内插方式恢复出单路解码视频序列。以下为帧内插方式具体过程。
[0034]用fk和fk+1分别表示视频序列的第k帧和第k+Ι巾贞,f表示fk和fk+1中间需要复原的帧,MV (P)表示像素运动矢量;将第k帧和第k+Ι帧的像素值平均后生成一个初始复原帧f(P) = (fk(P)+fk+1(P))/2,该初始复原帧虽然没有较高的复原质量,但可以有效避免突变的出现。
[0035]其中f (P)表示复原帧中位置P处的像素值。然后,对第k帧fk和第k+Ι帧fk+1分别通过后向预测和前向预测得到复原帧f。为了解决帧内插中出现重叠的问题,取重叠部分的平均值作为运动补偿的最终值。f(P) = (fk(p+MV(p)/2)+fk+1(p+MV(p)/2))/2。
[0036]用所得平均值代替上一步初始化生成的复原帧内对象值,从而进一步提高复原帧的质量。
[0037]对于奇数帧构成的视频序列,首先用奇数帧视频序列通过以上帧内插方式复原出偶数帧视频序列。然后对复原得到的偶数帧进行分块,结合真实的偶数帧计算每一块的复原质量,即复原质量值。
[0038]同样地,对于偶数帧视频序列,用偶数帧序列通过以上帧内插方式复原出奇数帧序列,然后对复原出的奇数帧进行分块,并结合真实的奇数帧计算每一块的复原质量值。
[0039]根据计算得到的复原质量值设置两个阈值Tl和T2(T1>T2),如果块的复原质量值^ Tl,则该模式定义为模式I ;如果块的复原质量为Τ2〈复原质量值〈Tl,则该模式定义为模式2 ;如果块的复原质量复原质量值ST2,则该模式定义为模式3。模式定义如下:(I)模式1,当块的复原质量为复原质量值> Tl时,说明只依靠主信息而不需要任何冗余信息就能够达到满意的复原质量,因此采用灵活的Skip模式,不传送任何冗余信息,降低了码率;
(2)模式2,当块的复原质量为T2〈复原质量值〈Tl时,说明复原块需要一部分冗余信息来提高块的复原质量,本发明把运动矢量MV作为冗余信息传送到解码端,即用ft(n)的当前块通过运动估计在ft(n-l)中寻找差异最小块,记录其运动矢量MV。(3)模式3,当块的复原质量为复原质量值< T2时,说明块的复原质量很差,不仅需要传送模式2中的运动矢量MV,还需要传送残差信息。运动矢量MV的获取过程同模式2。找到运动矢量MV后,用当前块减去ft(n-l)中差异最小块得到另一部分冗余信息,即残差数据。由于运动矢量要无失真地传输到解码端,因而直接对运动矢量信息进行算术编码。而对残差数据,需要进行DCT变换并且量化取整,而后进行算术编码。然后传送到解码端进行解码。
[0040]由于阈值Tl和T2(T1>T2)大致和冗余信息量呈正比关系,当Tl和Τ2取值太大时,冗余信息就会很多;而当Tl和Τ2取值太小时,冗余信息就会很少,此时对视频序列的复原质量提高也不明显。因此,可以根据信道带宽的大小或者用户要求的复原质量确定冗余量,进而确定阈值Tl和Τ2。
[0041]综上所述,本发明提出了一种视频解码方法,优化了视频数据读取的实时性,保证了视频的流畅性。以简单的结构、低廉的成本,容易实现的技术完成了高速视频的采集、压缩处理、数字传输和解码。
[0042]显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
[0043]应当理解的是,本发明的上述【具体实施方式】仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
【权利要求】
1.一种视频解码方法,其特征在于,包括: 在视频采集阶段使用统一的API函数,在只读模式下打开摄像头设备文件,然后设置视频设备的采集格式,保存相关参数;向驱动程序申请预定数量的帧缓冲,将申请到的帧缓冲区直接映射到用户空间,由用户直接获取帧数据,将缓冲区保存在采集消息队列,返回每个缓冲区的首地址和长度,并将首地址和长度保存在结构体类型的缓冲对象中,当开始采集视频时,在采集到完整一帧视频后,控制缓冲从消息队列输出,依据地址和帧长度获得采集到的视频数据,将帧缓冲重新入队列,实现循环采集;将采集到的JPEG图像数据进行格式转换,转换成YUV格式,对YUV格式的数据进行编码;通过编码将视频数据压缩,并对视频数据进行拆分和组帧发送,依据缓冲器大小对视频数据进行划分,并定长发送;划分的每一组视频数据加入帧头,数据大小,帧尾的标志位进行组帧; 当接收到一帧数据时,通过软中断信号通知应用程序的接收线程读取,接收线程把数据保存在环形拼接缓冲区中的第一缓冲区中,所述环形拼接缓冲区由四个缓冲区组成,用于将接收到的视频数据进行缓存以等待数据处理线程获取数据来拼接,数据处理线程通过所述标志位获得视频数据,并将视频流拷贝到视频暂存区域进行数据的拼接,数据的拼接按照接收顺序和上一帧数据的大小来偏移本次保存视频的地址,当完整的接收到一帧视频数据后,将完整的数据转到环形解码缓冲区,解码线程将接收的视频数据解码并在显示器上显示,接收线程,数据处理线程和解码线程是同时运行的,而且采用信号量机制实现同步共享同一缓冲区进行数据的交互; 对数据进行MPEG解码,获得解码后的数据保存地址,解码结束时释放解码器资源,将解码后的数据格式即YUV格式转换成RGB格式在显示器上预览。
2.根据权利要求1所述的方法,其特征在于,所述对视频数据进行编码,进一步包括: 读入一组帧视频序列,对其进行奇偶分离得到奇数帧视频序列和偶数帧视频序列;分别对两个序列进行编码,得到奇数帧视频序列的冗余信息以及偶数帧视频序列的冗余信息,通过两个相互独立的信道传送到解码端,在解码端进行双路解码,用得到的两路信息进行奇偶帧排序得到双路解码视频序列;在对每个序列进行解码时,根据对应解码器采用帧内插过程恢复出单路解码视频序列;所述帧内插过程将第k帧fk(p)和第k+Ι帧fk+1 (P)的像素值平均后生成一个初始复原帧f (P) = (4化)+4+1化))/2,其中€&)表示复原帧中位置P处的像素值,然后对第1^帧4(?)和第k+Ι帧fk+1(p)分别通过后向预测和前向预测,取重叠部分的平均值作为运动补偿的最终值:f (P) = (fk(p+MV(p)/2) +fk+1 (p+MV(p)/2))/2,其中MV(p)表示像素运动矢量;用所得平均值代替上一步初始化生成的初始复原帧。 对于奇数帧构成的视频序列,首先用奇数帧视频序列通过帧内插复原出偶数帧视频序列,对复原得到的偶数帧进行分块,结合真实的偶数帧计算每一块的复原质量值;对于偶数帧视频序列,用偶数帧序列通过帧内插复原出奇数帧序列,然后对复原出的奇数帧进行分块,并结合真实的奇数帧计算每一块的复原质量值; 根据计算得到的复原质量值设置两个阈值Tl和T2,其中Τ1ΧΓ2,如果块的复原质量值^ Tl,则该模式定义为模式I ;如果块的复原质量为T2〈复原质量值〈Tl,则该模式定义为模式2 ;如果块的复原质量复原质量值< Τ2,则该模式定义为模式3,其中所述模式定义如下:(I)模式1,当块的复原质量为复原质量值> Tl时,不传送任何冗余信息;(2)模式2,当块的复原质量为Τ2〈复原质量值〈Tl时,把运动矢量MV作为冗余信息传送到解码端,即用当前块通过运动估计在前一帧中寻找差异最小块,记录其运动矢量MV ; (3)模式3,当块的复原质量为复原质量值< T2时,不仅传送模式2中的运动矢量MV,还传送残差信息,当找到运动矢量MV后,用当前块减去前一帧中差异最小块得到另一部分冗余信息即残差数据,直接对运动矢量信息进行算术编码,对残差数据进行DCT变换并且量化取整,然后进行算术编码,最后传送到解码端进行解码;其中阈值Tl和T2的确定是根据信道带宽的大小和所需复原质量确定冗余信息量,进而确定阈值Tl和T2。
【文档编号】H04N19/61GK104333762SQ201410680876
【公开日】2015年2月4日 申请日期:2014年11月24日 优先权日:2014年11月24日
【发明者】高冬 申请人:成都瑞博慧窗信息技术有限公司