应用于IPPP实时编码结构的码率控制方法及装置与流程

文档序号:37845049发布日期:2024-05-07 19:19阅读:16来源:国知局
应用于IPPP实时编码结构的码率控制方法及装置与流程

本发明涉及视频监控,尤其涉及一种应用于ippp实时编码结构的码率控制方法及装置。


背景技术:

1、在视频监控应用中,录制的视频文件保存于硬盘、网盘或其他存储介质中。当存储介质空间将近被占满时,应用程序会按时间顺序,把最旧的视频文件删除,留出足够的空间给新的视频文件使用。而为了在未来某个时刻能追踪回放,通常会给出一个指标,且单个视频文件在存储介质中保留的时间,不能低于一个下限。为了在空间有限的存储介质中,保留更多的视频文件,延长单个视频文件的寿命,必须要求在保证图像质量前提下,尽可能压缩视频文件的码率。

2、除了要求压缩码率外,视频监控设备通常还需要安装在固定位置后,不能移动,即使是部分支持云台转动的设备,其视频画面大部分时间也都需要保持相对静止;以及通常附带实时传输视频的功能,一般只能使用ippp实时编码参考结构,静态比特率(constantsbit rate,cbr)等复杂的编码结构不能使用。

3、目前,为了控制码率,视频编码的码率控制方式主要有两种:一种为静态比特率,即保持码率的常态恒定,任何时候的瞬时码率都基本保持与目标平均码率一致;另一种为动态比特率(variable bit rate,vbr),即瞬时码率会根据场景变化而变化。

4、然而,实践发现,现有的cbr码控模式,以维持码率常态稳定为主要目标,忽视画面内容的动静变化带来的画质影响,会在静止场景中消耗掉大量的bit数,而在动态场景中会因为缺乏足够可用的bit数,而导致画质严重降低;现有vbr码控模式,gops级的码率调控,有固定周期,对于一些诸如由静变动、云台转动等随机突发性事件,对由于这些事件引发的码率波动和画质变化,调控灵活度不够好,从而导致画质降低。因此,如何提出一种无论是在静态场景还是动态场景下均能保证画面的保真度,从而保持清晰画面的技术方案显得尤为重要。


技术实现思路

1、本发明所要解决的技术问题在于,提供一种应用于ippp实时编码结构的码率控制方法及装置,能够使得无论是在静态场景还是动态场景下均能保证画面的保真度,从而保持清晰画面。

2、为了解决上述技术问题,本发明实施例第一方面公开了一种应用于ippp实时编码结构的码率控制方法,所述方法包括:

3、对当前场景的当前帧的所有块做直方图统计,得到所述当前帧的纹理统计结果,并根据所述纹理统计结果,分析所述当前帧的上一帧的实际纹理状态,所述上一帧的实际纹理状态由该上一帧的多个块的实际纹理状态组成;

4、确定所述当前帧中所有所述块的块信息,每个所述块的块信息包括该块的块预测类型及块运动矢量;

5、根据所述当前帧中所有所述块的块信息,对所有所述块进行直方图统计,得到运动统计结果,并根据所述运动统计结果,分析所述上一帧的实际运动状态;

6、根据所述上一帧的实际纹理状态、所述上一帧的实际运动状态,对所述当前帧的i/p帧比特数权重进行更新,得到更新后的所述当前帧的i/p帧比特数权重,更新后的所述当前帧的i/p帧比特数权重用于对循环缓冲链表中的比特数和/或循环缓冲链表中与所述当前帧的帧序号相同的帧的比特数执行更新操作。

7、本发明实施例第二方面公开了一种应用于ippp实时编码结构的码率控制装置,所述装置包括:

8、统计模块,用于对当前场景的当前帧的所有块做直方图统计,得到所述当前帧的纹理统计结果;

9、分析模块,用于根据所述纹理统计结果,分析所述当前帧的上一帧的实际纹理状态,所述上一帧的实际纹理状态由该上一帧的多个块的实际纹理状态组成;

10、确定模块,用于确定所述当前帧中所有所述块的块信息,每个所述块的块信息包括该块的块预测类型及块运动矢量;

11、所述统计模块,还用于根据所述当前帧中所有所述块的块信息,对所有所述块进行直方图统计,得到运动统计结果;

12、所述分析模块,还用于根据所述运动统计结果,分析所述上一帧的实际运动状态;

13、更新模块,用于根据所述上一帧的实际纹理状态、所述上一帧的实际运动状态,对所述当前帧的i/p帧比特数权重进行更新,得到更新后的所述当前帧的i/p帧比特数权重,更新后的所述当前帧的i/p帧比特数权重用于对所述循环缓冲链表中的比特数和/或所述循环缓冲链表中与所述当前帧的帧序号相同的帧的比特数执行更新操作。

14、作为一种可选的实施方式,在本发明第二方面中,所述上一帧的每个所述块的实际纹理状态的定义如下:

15、

16、式中,madt用于表示所述上一帧的每个所述块的实际纹理状态,mbw*mbh用于表示所述当前帧每个所述块的尺度,pixx,y用于表示所述当前帧每个所述块内的每个像素点的像素值,x,y用于表示所述当前帧每个所述块内的每个所述像素点的位置;

17、更新后的所述当前帧的i/p帧比特数权重的计算公式如下:

18、totalweights=sceneweight[rcbuffer[k-1].scenestatsu]

19、*moveweight[rcbuffer[k-1].movestatus]

20、式中,totalweights为更新后的所述当前帧的i/p帧比特数权重;sceneweight[rcbuffer[k-1].scenestatsu]为所述上一帧的实际纹理态的权重;moveweight[rcbuffer[k-1].movestatus]为所述上一帧的实际运动状态的权重。

21、作为一种可选的实施方式,在本发明第二方面中,所述装置还包括:

22、创建模块,用于在ippp实时编码参考结构中,根据所述ippp实时编码参考结构的gops的统计周期,创建初始循环缓冲链表,所述初始循环缓冲链表的统计周期为第一预设数量倍的所述gops的统计周期,所述初始循环缓冲链表用于记录已编码的图像信息,所述图像信息包括帧序号、纹理状态、运动状态、量化参数、实际消耗比特数及链表指针,所述gops由第二预设数量的gop组成,每个所述gop由一个i帧和在该i帧后的多个连续的p帧组成;

23、所述确定模块,还用于确定所述当前场景的初始纹理状态的等级及初始运动状态的等级,所述初始纹理状态的等级和所述初始运动状态的等级均包含多个等级且每个所述等级用于表示i/p帧之间的比特数比例权重;所述初始运动状态的等级中排序在首位的等级或者排序在末位的等级用于表示所述当前场景的设备云台转动引起的画面背景移动对应的等级;

24、第一计算模块,用于根据所述gops在理想状态下的总比特数、所述初始纹理状态的等级的权重、所述初始运动状态的等级的权重、所述第二预设数量及所述初始循环缓冲链表的统计周期,计算所述当前场景下的p帧的消耗比特数和i帧的消耗比特数,其中,所述初始循环缓冲链表过去统计周期的累计消耗比特数与所述gops在理想状态下的总比特数相等,且所述初始纹理状态与所述初始运动状态均等于0;

25、第一初始化模块,用于根据确定出的经验量化参数,初始化所述初始循环缓冲链表中的初始量化参数,并根据所述p帧的消耗比特数及所述i帧的消耗比特数,初始化所述循环缓冲链表的比特数,得到所述循环缓冲链表。

26、作为一种可选的实施方式,在本发明第二方面中,所述当前场景下的p帧的消耗比特数和i帧的消耗比特数的计算公式为:

27、totalweight=sceneweight[0]*moveweight[0]

28、

29、itargetbitsstandard=ptargetbits*totalweight;

30、

31、式中:totalweight为所述当前场景的i/p帧的比特数权重,sceneweight[0]为所述当前场景的i/p帧的纹理权重,moveweight[0]为所述当前场景的i/p帧之间的运动权重;totalbitsstandard为所述gops在理想状态下的总比特数,rcidrnum为所述第一预设数量,rcperiod为所述gops的统计周期,ptargetbitsstandard为所述当前场景下的p帧的消耗比特数,itargetbitsstandard为所述当前场景下的i帧的消耗比特数;avgbitrate为预设平均码率,frmrate为所述当前场景的帧率;

32、所述循环缓冲链表如下:

33、k∈[0,rcperiod);

34、rcbuffer[k].frmidx=k;

35、rcbuffer[k].scenestatus=0;

36、rcbuffer[k].movestatus=0;

37、rcbuffer[k].qp=initqp;

38、

39、式中,rcbuffer为所述循环缓冲链表;k为所述当前场景采集到的所述当前帧;frmidx为所述当前帧在所述循环缓冲链表中的帧序号,scenestatus和movestatus分别为所述初始纹理状态与所述初始运动状态;initqp为所述循环缓冲链表中的量化参数;idrperiod为预设的所述循环缓冲链表的i帧间隔周期。

40、作为一种可选的实施方式,在本发明第二方面中,所述装置还包括:

41、第一查询模块,用于在所述循环缓冲链表中,查询帧序号与所述上一帧的帧序号相同的目标帧的比特数;

42、所述更新模块,还用于根据所述上一帧的实际比特数及所述目标帧的比特数,对所述循环缓冲链表中的实际累计比特数进行更新,得到更新后的实际累计比特数;

43、所述更新模块,还用于根据所述上一帧的实际比特数,对所述目标帧的比特数进行更新,得到更新后的所述目标帧的比特数;

44、第二计算模块,用于根据所述gops在理想状态下的总比特数,与更新后的所述实际累计比特数,计算所述循环缓冲链表在过去统计周期内剩余可用的剩余比特数;

45、划分模块,用于对所述当前场景的运动状态进行等级划分,得到多个运动状态的等级;

46、设置模块,用于为每个所述运动状态的等级,设置对应的上限值和下限值;

47、所述设置模块,还用于根据所有所述运动状态的等级的上限值和下限值、所述总比特数,对所述剩余比特数设置进行比特数限制,得到限制后的所述剩余比特数;

48、所述更新模块,还用于根据所述总比特数及限制后的所述剩余比特数,对所述循环缓冲链表中的比特数进行更新,得到所述循环缓冲链表在其接下来统计周期内的可用总比特数;

49、所述更新模块,还用于根据第一纹理权重、第一运动权重、所述可用总比特数、所述循环缓冲链表的统计周期、所述第二预设数据及当前帧的帧序号,对所述循环缓冲链表中与所述当前帧的帧序号相同的帧的比特数进行更新,得到所述当前帧的目标比特数,所述第一纹理权重为在所述上一帧的纹理状态下,在所述循环缓冲链表选用的i/p帧比特数纹理权重,所述第一运动权重为在上一帧的运动状态,在所述循环缓冲链表选用的i/p帧比特数运动权重。

50、作为一种可选的实施方式,在本发明第二方面中,更新后的累计比特数的更新公式如下:

51、actaccubits=actaccubits-rcbuffer[k-1].bits+actbitsk-1;

52、rcbuffer[k-1].bits=actbitsk-1;

53、式中,actaccubits为更新后的所述实际累计比特数,rcbuffer[k-1].bits为所述目标帧的比特数,actbitsk-1为所述上一帧的实际比特数;

54、所述剩余比特数的计算公式如下:

55、remainbits=totalbitsstandard-actaccubits;

56、式中:remainbits为所述剩余比特数;actaccubits为更新后的所述实际累计比特数;

57、限制后的所述剩余比特数的计算公式如下:

58、minremainbits=totalbitsstandard*bitsclip[movestatus][0];

59、maxremainbits=totalbitsstandard*bitsclip[movestatus][1];

60、remainbits=clip(minremainbits,maxremainbits);

61、式中:bitsclip[movestatus][0]、bitsclip[movestatus][1]为两个所述运动状态的等级;

62、所述可用总比特数的计算公式:

63、totalbits=totalbitsstandard+remainbits;

64、式中,totalbits为所述可用总比特数;

65、所述当前帧的目标比特数的计算公式如下:

66、

67、itargetbits=ptargetbits*totalweights;

68、

69、式中,targetbitsk为所述当前帧的目标比特数。

70、作为一种可选的实施方式,在本发明第二方面中,所述确定模块,还用于确定所述gop的瞬时码率;

71、所述装置还包括:

72、判断模块,用于判断所述瞬时码率是否大于等于所述当前场景所需的预设瞬时码率;

73、分割模块,用于当判断出结果为否时,根据所述预设瞬时码率,对所述瞬时码率及确定出的所述当前场景的拍摄设备的平均码率进行码率状态阈值分割,得到多个瞬时码率阈值;

74、第二初始化模块,用于对于任一所述gop,在开始编码所述gop的i帧前,根据所述瞬时码率阈值、设备帧率、所述循环缓冲链表的统计周期及所述平均码率,对所述gop的总可用比特数进行初始化,得到初始化后的所述gop的总可用比特数;

75、第三计算模块,用于根据初始化后的所述gop的总可用比特数、所述上一帧的实际比特数及所述gop内剩余待编码的所有所述帧的数量,计算所述当前帧的比特数的上限值和该比特数的下限值;

76、所述更新模块,还用于基于所述当前帧的比特数的上限值和该比特数的下限值,对所述当前帧的目标比特数执行更新操作,得到更新后的所述当前帧的目标比特数;

77、其中,初始化后的所述gop的总可用比特数的计算公式为:

78、gopremainbits[3]={gopbitsclip[0]*avgbitrate*idrperiod/framerate,

79、gopbitsclip[1]*avgbitrate*idrperiod/framerate,

80、gopbitsclip[2]*avgbitrate*idrperiod/framerate}

81、式中,gopremainbits[3]为初始化后的所述gop的总可用比特数;framerate为所述循环缓冲链表的帧率;

82、更新后的所述当前帧的目标比特数的计算公式如下:

83、

84、

85、

86、maxbits=max(minbits,maxbits);

87、targetbitsk=clip(minbits,maxbits);

88、式中,targetbitsk为更新后的所述当前帧的目标比特数,moveth0为预设的运动状态阈值。

89、作为一种可选的实施方式,在本发明第二方面中,所述装置还包括:

90、第二查询模块,用于当刚编码完成的所述上一帧为i帧时,查询所述当前帧对应的上一个i帧的量化参数、该i帧的实际比特数及该i帧的目标比特数;

91、所述更新模块,还用于基于上一个所述i帧在所述循环缓冲链表中的量化参数、该i帧的实际比特数及该i帧的目标比特数,对下一个i帧在所述循环缓冲链表中的量化参数,执行更新操作,得到更新后的下一个所述i帧的量化参数;

92、其中,下一个所述i帧的量化参数的更新公式为:

93、

94、

95、targetiqp=lastiqp+(streamrate-1)*step;

96、式中,targetiqp为下一个所述i帧的量化参数,lastiqp为上一所述i帧在所述循环缓冲链表中的量化参数。

97、作为一种可选的实施方式,在本发明第二方面中,所述分析模块,还用于当刚编码完成的所述上一帧为p帧时,将所述当前帧对应的下一个p帧的目标比特数输入预先确定出的r-q模型中进行分析,得到所述下一个p帧的量化参数;

98、第三查询模块,还用于查询所述当前帧的运动状态的数值、预先确定出的运动状态阈值、量化偏移阈值;

99、所述更新模块,还用于根据所述上一个i帧的量化参数、上一个p帧的量化参数及所述当前帧的运动状态的数值、所述运动状态阈值、所述量化偏移阈值,对所述下一个p帧的量化参数进行限制,得到限制后的所述下一个p帧的量化参数;

100、

101、

102、targetpqp=clip(minqp,maxqp);

103、式中,targetpqp为限制后的所述下一个p帧的量化参数,lastpqp为上一个p帧的量化参数,p00、p10、p20、p01、p11、p21均为p帧的量化参数的偏移量且p00<p10<p20,p01<p11<p21,i00、i10、i20、i01、i11、i21均为i帧的量化参数的偏移量且i00<i10<i20,i01<i11<i21。

104、与现有技术相比,本发明实施例具有以下有益效果:

105、本发明实施例中,公开了一种应用于ippp实时编码结构的码率控制方法及装置,该方法包括:对当前场景的当前帧的所有块做直方图统计,得到当前帧的纹理统计结果,并根据纹理统计结果,分析当前帧的上一帧的实际纹理状态;确定当前帧中所有块的块信息,每个块的块信息包括该块的块预测类型及块运动矢量;根据当前帧中所有块的块信息,对所有块进行直方图统计,得到运动统计结果,并根据运动统计结果,分析上一帧的实际运动状态;并根据上一帧的实际纹理状态、上一帧的实际运动状态,对当前帧的i/p帧比特数权重进行更新,得到更新后的当前帧的i/p帧比特数权重,更新后的当前帧的i/p帧比特数权重用于对循环缓冲链表中的比特数和/或循环缓冲链表中与当前帧的帧序号相同的帧的比特数执行更新操作。可见,本发明实施例通过所监控的当前场景的画面帧的纹理状态和运动状态,实时调控当前监控场景的画面帧的i/p帧的比特数比例,从而实现静态场景低码率,动态场景高码率的自适应调整,进而使得无论是在静态场景还是动态场景下均能保证画面的保真度,从而保持清晰画面,以及一定程度上,缓解存储成本和文件保留时长的矛盾。

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