CN115866350A - 视频倒放方法、装置、电子设备及存储介质 - Google Patents
视频倒放方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115866350A CN115866350A CN202211512754.6A CN202211512754A CN115866350A CN 115866350 A CN115866350 A CN 115866350A CN 202211512754 A CN202211512754 A CN 202211512754A CN 115866350 A CN115866350 A CN 115866350A
- Authority
- CN
- China
- Prior art keywords
- video
- memory
- video frame
- frame
- gop
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000012545 processing Methods 0.000 claims abstract description 83
- 238000009877 rendering Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 5
- 102100037812 Medium-wave-sensitive opsin 1 Human genes 0.000 claims 41
- 230000000694 effects Effects 0.000 abstract description 5
- 230000008569 process Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Landscapes
- Television Signal Processing For Recording (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本申请实施例涉及视频处理技术领域,提供一种视频倒放方法、装置、电子设备及存储介质,在进行视频倒放时,基于码流参数和电子设备的当前可用内存值判断电子设备的当前内存余量是否充足,如果电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对解码后的视频帧并行的进行缩放及重编码处理;如果电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对解码后的视频帧并行的进行缩放处理。也就是,根据码流参数和电子设备的当前可用内存值动态的选择倒放模式,使得视频倒放在播放性能和内存使用上达到动态平衡,从而可以实现兼顾播放性能和内存使用的效果。
Description
技术领域
本申请实施例涉及视频处理技术领域,具体而言,涉及一种视频倒放方法、装置、电子设备及存储介质。
背景技术
在安防领域,录像回放功能是不可或缺的功能之一,在回溯某一时间点的录像时,通常会跳转到期望时间点附近正向播放,当到达事件发生点时,需要来回正向、逆向进行反复播放。因此视频倒放功能是录像回放功能中的一个重要功能点。
目前,安防主流视频编码协议为H264、H265编码,其主要有I帧、P帧几种帧类型。I帧为帧内编码,可以独立进行解码,P帧为帧间编码,需要参考前面最近一个I帧进行解码,两个I帧之间通常包含多个P帧,通常称之为GOP(Group of Pictures,画面组)。例如,存在图像序列I0-P1-P2-P3-P4-P5-I6-P7-P8-P9-P10-P11,其中I0-P1-P2-P3-P4-P5为一个GOP,在视频正放时,是按照I0-P1-P2-P3-P4-P5的顺序进行解码,显示也按照I0-P1-P2-P3-P4-P5的顺序进行显示,但是,在视频倒放时,是按照I0-P1-P2-P3-P4-P5的顺序进行解码,显示却是按照P5-P4-P3-P2-P1-I0的顺序进行显示,由于在解码完I0、P1、P2、P3、P4时P5还未解码,因此必须将I0、P1、P2、P3、P4解码后的数据缓存起来,待P5解码完毕后,再按照P5-P4-P3-P2-P1-I0的顺序进行渲染,通常最少需要缓存一个GOP的解码后的数据。
同时,由于解码后的数据一般为YUV420格式,4K分辨率下一帧所消耗的内存为3840*2160*3/2=12M,按照安防主流50帧的GOP大小计算,需要至少消耗12*50=600M的内存,而为了播放的流畅性,一般要缓存一个GOP以上的数据帧,导致一些内存不足的设备,基本无法满足视频倒放需求。
发明内容
本申请实施例的目的在于提供一种视频倒放方法、装置、电子设备及存储介质,用以解决现有的视频倒放无法兼顾播放性能和内存使用的问题。
为了实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种视频倒放方法,应用于电子设备,所述方法包括:
响应视频倒放指令,获取目标视频码流中的首个画面组GOP;
基于首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
若所述电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频低内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放及重编码处理;
若所述电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频高内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放处理。
可选地,所述采用实时视频低内存倒放模式对所述首个GOP进行视频倒放的步骤,包括:
对所述首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一所述解码视频帧均具有帧序号,所述帧序号表征所述解码视频帧对应的所述视频帧在所述首个GOP中的顺序;
针对任一所述解码视频帧,从预先建立的多线程缩放重编码线程池中确定第一可用线程;
基于所述解码视频帧的类型,利用所述第一可用线程对所述解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照所述解码视频帧的帧序号对所述重编码视频帧进行倒序存储;
在完成所有所述解码视频帧的处理后,对每一所述重编码视频帧逐帧进行重解码及渲染,以完成所述首个GOP的视频倒放。
可选地,所述基于所述解码视频帧的类型,利用所述第一可用线程对所述解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照所述解码视频帧的帧序号对所述重编码视频帧进行倒序存储的步骤,包括:
当所述解码视频帧的类型为硬件解码数据时,所述第一可用线程通过图形处理器GPU对所述解码视频帧进行缩放处理得到缩放视频帧,并将所述缩放视频帧存储至预先申请的离屏表面,再按照设定图片格式对所述离屏表面的所述缩放视频帧进行重编码得到所述重编码视频帧;
当所述解码视频帧的类型为软件解码数据时,所述第一可用线程通过中央处理器CPU对所述解码视频帧进行缩放处理得到缩放视频帧,并按照设定图片格式对所述缩放视频帧进行重编码得到所述重编码视频帧;
所述第一可用线程按照所述帧序号,对所述重编码视频帧进行倒序存储。
可选地,所述采用实时视频高内存倒放模式对所述首个GOP进行视频倒放的步骤,包括:
对所述首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一所述解码视频帧均具有帧序号,所述帧序号表征所述解码视频帧对应的所述视频帧在所述首个GOP中的顺序;
针对任一所述解码视频帧,从预先建立的多线程缩放线程池中确定第二可用线程;
基于所述解码视频帧的类型,利用所述第二可用线程对所述解码视频帧进行缩放处理得到缩放视频帧,并按照所述解码视频帧的帧序号对所述缩放视频帧进行倒序存储;
在完成所有所述解码视频帧的处理后,对每一所述缩放视频帧逐帧进行渲染,以完成所述首个GOP的视频倒放。
可选地,所述基于所述解码视频帧的类型,利用所述第二可用线程对所述解码视频帧进行缩放处理得到缩放视频帧,并按照所述解码视频帧的帧序号对所述缩放视频帧进行倒序存储的步骤,包括:
从预先建立的缓存池中申请所述解码视频帧对应的缓存块,所述缓存块的类型与所述解码视频帧的类型一致;
当所述解码视频帧的类型为硬件解码数据时,所述第二可用线程通过GPU对所述解码视频帧进行缩放处理得到所述缩放视频帧,并将所述缩放视频帧存储至对应的所述缓存块;
当所述解码视频帧的类型为软件解码数据时,所述第二可用线程通过CPU对所述解码视频帧进行缩放处理得到所述缩放视频帧,并将所述缩放视频帧存储至对应的所述缓存块;
所述第二可用线程按照所述帧序号,对存储有所述缩放视频帧的所述缓存块进行倒序排列。
可选地,所述码流参数包括视频帧数、分辨率和数据格式;
所述基于所述首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足的步骤,包括:
根据所述分辨率和所述数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUse=FrameSize*(FrameNum+DeltaFrameNum)计算所述首个GOP的内存预计使用值;
其中,MemUse表示所述首个GOP的内存预计使用值,FrameNum表示所述首个GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值;
判断所述电子设备的当前可用内存值与所述首个GOP的内存预计使用值的差值是否小于所述电子设备的内存安全值;
若是,则确定所述电子设备的当前内存余量不足;
若否,则确定所述电子设备的当前内存余量充足。
可选地,所述方法还包括:
若当前处于所述实时视频高内存倒放模式,则针对所述目标视频码流中除所述首个GOP之外的每个其它GOP,基于所述其它GOP的码流参数、所述其它GOP的前一个GOP的内存预计使用值和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
若所述电子设备的当前内存余量充足,则继续采用实时视频高内存倒放模式对所述其它GOP进行视频倒放;
若所述电子设备的当前内存余量不足,则将所述实时视频高内存倒放模式切换为所述实时视频低内存倒放模式,并采用所述实时视频低内存倒放模式对所述其它GOP进行视频倒放。
可选地,所述码流参数包括视频帧数、分辨率和数据格式;
所述基于所述其它GOP的码流参数、所述其它GOP的前一个GOP的内存预计使用值和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足的步骤,包括:
根据所述分辨率和所述数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUseNew=FrameSize*(FrameNumNew+DeltaFrameNum)计算所述其它GOP的内存预计使用值;
其中,MemUseNew表示所述其它GOP的内存预计使用值,FrameNumNew表示所述其它GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值;
计算所述电子设备的当前可用内存值与所述其它GOP的内存预计使用值之间的差值;
判断所述差值与所述其它GOP的前一个GOP的内存预计使用值的和是否小于所述电子设备的内存安全值;
若是,则确定所述电子设备的当前内存余量不足;
若否,则确定所述电子设备的当前内存余量充足。
第二方面,本申请实施例还提供了一种视频倒放装置,应用于电子设备,所述装置包括:
响应模块,用于响应视频倒放指令,获取目标视频码流中的首个画面组GOP;
判断模块,用于基于首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
第一执行模块,用于若所述电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频低内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放及重编码处理;
第二执行模块,用于若所述电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频高内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放处理。
第三方面,本申请实施例还提供了一种电子设备,包括处理器和存储器,所述存储器用于存储程序,所述处理器用于在执行所述程序时,实现上述第一方面中的视频倒放方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面中的视频倒放方法。
相对现有技术,本申请实施例提供的一种视频倒放方法、装置、电子设备及存储介质,在进行视频倒放时,基于码流参数和电子设备的当前可用内存值判断电子设备的当前内存余量是否充足,如果电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对解码后的视频帧并行的进行缩放及重编码处理;如果电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对解码后的视频帧并行的进行缩放处理。也就是,根据码流参数和电子设备的当前可用内存值动态的选择倒放模式,使得视频倒放在播放性能和内存使用上达到动态平衡,从而可以实现兼顾播放性能和内存使用的效果。
附图说明
图1示出了现有技术提供的视频重编码倒放策略的示例图。
图2示出了本申请实施例提供的一种视频倒放方法的流程示意图一。
图3为图2所述的步骤S104的一种流程示意图。
图4示出了本申请实施例提供的实时视频低内存倒放模式的示例图。
图5为图2所述的步骤S105的一种流程示意图。
图6示出了本申请实施例提供的实时视频高内存倒放模式的示例图一。
图7示出了本申请实施例提供的申请缓存块的流程示意图。
图8示出了本申请实施例提供的实时视频高内存倒放模式的示例图二。
图9示出了本申请实施例提供的一种视频倒放方法的流程示意图二。
图10示出了本申请实施例提供的一种视频倒放装置的方框示意图。
图11示出了本申请实施例提供的一种电子设备的方框示意图。
图标:100-视频倒放装置;101-响应模块;102-判断模块;103-第一执行模块;104-第二执行模块;105-处理模块;10-电子设备;11-处理器;12-存储器;13-总线。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在视频倒放过程中,需要以GOP为基本单位,将视频码流帧序列按照正序进行解码,然后对解码后的帧序列进行倒序显示,以实现视频倒放。通常,视频倒放时为了播放的流畅性,一般要缓存一个GOP以上的数据帧,导致内存消耗大,一些内存不足的设备,基本无法满足视频倒放需求。
针对这一问题,现有技术中存在以下几种解决方式:
1、对解码后的数据进行抽帧,缓存GOP中的部分帧,但是这种方式会降低视频的播放帧率,影响播放体验。
2、对解码后的数据全部进行I帧重编码,即,对解码后的数据全部重新进行一次帧内编码,相当于重新做一次数据压缩,这样可以减少内存消耗。
例如,如图1所示,对于I0-P1-P2-P3-P4-P5的一个H264/H265编码的GOP,在视频倒放时,解码线程按照I0-P1-P2-P3-P4-P5的顺序逐帧解码后,将解码后的数据发送给重编码线程进行处理。重编码线程逐帧对解码后的数据进行I帧重编码,重编码完一帧后压栈,待整个GOP重编码完成后,再将整个重编码的GOP发送给重解码线程。重解码线程对重编码后的GOP逐帧出栈重解码,重解码完成后再送给渲染器渲染,从而实现按照P5-P4-P3-P2-P1-I0的顺序进行显示。
但是,H264、H265的I帧编码复杂度较高,尤其是4K等高分辨率码流,编码耗时会比较长,例如,假设视频倒放帧率为25帧,如果要保证实时性,则必须要在40ms内重编码完一帧,这对于4K等高分辨率码流来说是很难实现的,导致实时性难以保证,并且安防领域还存在视频录像倍速回放的功能,对实时性的要求将会更高。
因此,这种方式在CPU(Central Processing Unit,中央处理器)性能较弱、或者视频倒放帧率较高时,将无法满足实时性要求,会导致播放卡顿。
综上所述,现有的视频倒放技术在播放体验及性能上存在一定的局限性,无法兼顾播放性能和内存使用。
为了解决这一技术问题,本申请实施例在进行视频倒放时,基于码流参数和电子设备的当前可用内存值判断电子设备的当前内存余量是否充足,如果电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对解码后的视频帧并行的进行缩放及重编码处理;如果电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对解码后的视频帧并行的进行缩放处理。即,根据码流参数和电子设备的当前可用内存值动态的选择倒放模式,使得视频倒放在播放性能和内存使用上达到动态平衡,从而可以实现兼顾播放性能和内存使用的效果。
下面结合附图对本申请实施例进行详细介绍。
请参照图2,图2示出了本申请实施例提供的视频倒放方法的一种流程示意图。该视频倒放方法应用于电子设备,可以包括以下步骤:
S101,响应视频倒放指令,获取目标视频码流中的首个画面组GOP。
在本实施例中,视频倒放指令可以是用户通过操作电子设备上的客户端触发的。电子设备可以是服务器、个人计算机、智能手机、平板电脑等,客户端可以是浏览器客户端、APP(Application,应用程序)等。
可选地,视频倒放指令可以包括需要倒放的视频的标识,还可以包括需要倒放的视频的开始时刻和结束时刻。基于视频倒放指令,就可以找到需要倒放的目标视频码流,目标视频码流是指与视频倒放指令对应的需要进行倒放的视频码流。
S102,基于首个GOP的码流参数和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足。
实际应用中,不同设备的内存余量、同一设备在不同状态下的内存余量都可能会不一致,并且视频码流的GOP大小也是不断变化的,因此,需要根据实际系统运行情况,适当的选择不同的倒放模式,使视频倒放在播放性能和内存使用上达到动态平衡。
在本实施例中,码流参数包括视频帧数、分辨率和数据格式。对于一个GOP而言,其视频帧数是固定的,例如,50帧。
这里的分辨率和数据格式,指的是视频倒放过程中需要缓存的单个视频帧的分辨率和数据格式。例如,如果按照先正序解码再倒序播放的方式进行视频倒放,则需要缓存的视频帧是每个解码后的视频帧。又如,如果按照图1所示的视频重编码倒放策略进行视频倒放,则需要缓存的视频帧是每个重编码后的视频帧,即,I-P5、I-P4等。
本领域技术人员应当了解,视频倒放过程中需要缓存的单个视频帧的分辨率是固定的,同时,就单个视频帧而言,其数据格式不同,所需消耗的缓存值也会不同。因此,就能根据单个视频帧的分辨率和数据格式,计算出单个视频帧需消耗的缓存值。
可选地,在获取到目标视频码流中的首个GOP之后,就能基于首个GOP的码流参数和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足,该过程可以包括S1021~S1025。
S1021,根据分辨率和数据格式,计算单个视频帧需消耗的缓存值。
例如,假设单个视频帧的大小为1920×1080,如果是YUV格式,则单个视频帧需消耗的缓存值为:3/2*1920*1080;如果是ARGB格式,则单个视频帧需消耗的缓存值为:4*1920*1080。
S1022,按照预设公式MemUse=FrameSize*(FrameNum+DeltaFrameNum)计算首个GOP的内存预计使用值;
其中,MemUse表示首个GOP的内存预计使用值,FrameNum表示首个GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值。
在本实施例中,缓存余量值DeltaFrameNum是为了抵抗播放卡顿,增加播放流畅性设定的,用户可以根据实际需要灵活设置,例如,10帧。
假设单个视频帧的大小为1920×1080,视频帧数为50,缓存余量值为10,如果视频帧为YUV格式,则MemUse=3/2*1920*1080*(50+10)=180M,如果视频帧为ARGB格式,则MemUse=4*1920*1080*(50+10)=480M。
S1023,判断电子设备的当前可用内存值与首个GOP的内存预计使用值的差值是否小于电子设备的内存安全值。
在本实施例中,为保证系统运行稳定,可以给定一个内存安全值,其可以由用户根据实际情况灵活设置,例如,200M。也就是,判断MemTotal–MemUse<MemSafe是否成立,MemTotal表示电子设备的当前可用内存值,MemSafe表示内存安全值。
S1024,若差值小于电子设备的内存安全值,即,MemTotal–MemUse<MemSafe成立,则确定电子设备的当前内存余量不足;
S1025,若差值不小于电子设备的内存安全值,即,MemTotal–MemUse<MemSafe不成立,则确定电子设备的当前内存余量充足。
在本实施例中,如果电子设备的当前内存余量不足,即,MemTotal–MemUse<MemSafe,则选择实时视频低内存倒放模式;如果电子设备的当前内存余量充足,即,MemTotal–MemUse≥MemSafe,则选择实时视频高内存倒放模式。
S103,若电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对首个GOP进行视频倒放;其中,实时视频低内存倒放模式用于对首个GOP解码后的视频帧并行的进行缩放及重编码处理。
从前文介绍的内容可知,现有的视频重编码倒放策略(如图1所示)是先对解码后的数据全部进行I帧重编码,来减少内存消耗。但是,H264、H265的I帧编码复杂度较高,编码耗时会比较长。
针对这一问题,本申请实施例可以采用复杂度较低的编码器进行重编码,例如,JPEG、BMP、PCX编码器作为重编码格式,JPEG、BMP、PCX编码的编码复杂度比I帧编码低,可以一定程度上缩短重编码耗时。下述实施例以JPEG编码器为例进行说明。
对解码后的数据全部进行JPEG重编码可以一定程度上缩短重编码耗时,但是,发明人经过研究发现,在对4K等高分辨率码流进行JPEG重编码时,耗时依然会比较大,会超过帧间隔时间。基于此,本申请实施例可以先对解码后的数据进行缩放,再对缩放后的数据进行JPEG重编码。
例如,以1920像素的视频宽度为界限,如果H264/H265解码后的数据的宽度大于1920,则按照1920宽度对解码后的数据进行缩放处理;如果宽度小于1920,则不进行缩放处理。如此,缩放处理后的数据,再进行JPEG重编码操作,这样能够有效提高重编码效率,并且后续的解码速度也会有一定提升。同时,由于缩放的宽度为1920像素,所以缩放后的画面质量也能得到保证,不会存在太大的图像损失。
但是,发明人经过进一步研究发现,如果采用单线程进行缩放处理及JPEG重编码,在I7-7700 8核CPU的PC条件下,400W分辨率只有50帧/s的处理效率,针对帧率偏低的问题,由于视频倒放每次需要重编码完一个GOP才可以进行播放,并且解码后数据的前后帧无参考关系,因此,本申请实施例可以利用CPU多核性能,并行的对GOP解码后的数据进行缩放及重编码处理。
例如,使用最大4线程并行处理的方式,将H264/H265解码后的数据当作异步任务,送入缩放及JPEG重编码处理线程池中进行处理,利用多线程性能加快GOP整体的处理速度,经过测试可以将GOP重编码速度提升4倍,解决了由于缩放重编码速度低导致的倒放帧率不足的问题。
下面对步骤S103进行详细介绍。
在图2的基础上,请参照图3,步骤S103中采用实时视频低内存倒放模式对首个GOP进行视频倒放的过程,可以包括S1031~S1034。
S1031,对首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一解码视频帧均具有帧序号,帧序号表征解码视频帧对应的视频帧在首个GOP中的顺序。
S1032,针对任一解码视频帧,从预先建立的多线程缩放重编码线程池中确定第一可用线程。
S1033,基于解码视频帧的类型,利用第一可用线程对解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照解码视频帧的帧序号对重编码视频帧进行倒序存储。
S1034,在完成所有解码视频帧的处理后,对每一重编码视频帧逐帧进行重解码及渲染,以完成首个GOP的视频倒放。
在本实施例中,在开启实时视频低内存倒放模式之前,可以先根据CPU核数创建多线程缩放重编码线程池。可选地,如果CPU核数≥4,则设定多线程缩放重编码线程池的最大线程数为4;如果CPU核数<4,则设定多线程缩放重编码线程池的最大线程数等于CPU核数。例如,假设CPU核数为8,则设定多线程缩放重编码线程池的最大线程数为4。
下面结合图4,对实时视频低内存倒放模式进行详细介绍。如图4所示,假设首个GOP是一个H264/H265编码的GOP,且包括I0-P1-P2-P3-P4-P5这6个视频帧,在开启实时视频低内存倒放模式后,视频倒放流程包括:
首先,解码线程按照I0-P1-P2-P4-P4-P5的顺序逐帧对首个GOP进行解码,得到解码视频帧。
然后,将解码视频帧送入重编码线程,重编码线程根据首个GOP解码后的视频帧信息(例如,视频的宽高、类型、帧率等)封装一个异步任务,每个异步任务均具备一个帧序号,帧序号用于表征解码视频帧对应的视频帧在首个GOP中的顺序,帧序号遇到I帧时清零,后续帧累计加一。例如,对I0-P1-P2-P4-P4-P5进行解码,得到的解码视频帧,其对应的帧序号依次为0、1、2、3、4、5。
接下来,将异步任务送入多线程缩放重编码线程池,如果多线程缩放重编码线程池中存在可用线程,则利用该可用线程对异步任务进行缩放及重编码得到重编码视频帧(例如,JPEG图片),并按照帧序号倒序的将JPEG图片存入输出队列;如果多线程缩放重编码线程池中不存在可用线程,则等待并不断重试。
如此,重编码线程不断将异步任务送入多线程缩放重编码线程池进行缩放及重编码处理,直到重编码线程收到下一个为I帧的解码视频帧,则说明此时已将首个GOP的解码视频帧全部送入多线程缩放重编码线程池。因此,重编码线程先等待多线程缩放重编码线程池处理完所有未完成的异步任务,待完成所有异步任务后,将输出队列中的所有JPEG图片,压入一个新的重编码GOP栈中。
之后,重解码线程在检测到有新的重编码GOP栈产生时,则对JPEG图片逐帧出栈并进行解码操作,再将解码后的数据送至渲染器进行渲染,最终的渲染顺序为P5-P4-P3-P2-P1-I0,如此,则完成了对首个GOP的视频倒放。
可选地,步骤S1033中基于解码视频帧的类型,利用第一可用线程对解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照解码视频帧的帧序号对重编码视频帧进行倒序存储的过程,可以包括S10331~S10333。
S10331,当解码视频帧的类型为硬件解码数据时,第一可用线程通过GPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至预先申请的离屏表面,再按照设定图片格式对离屏表面的缩放视频帧进行重编码得到重编码视频帧。
S10332,当解码视频帧的类型为软件解码数据时,第一可用线程通过CPU对解码视频帧进行缩放处理得到缩放视频帧,并按照设定图片格式对缩放视频帧进行重编码得到重编码视频帧。
S10333,第一可用线程按照帧序号,对重编码视频帧进行倒序存储。
也就是,结合到图4,如果多线程缩放重编码线程池中存在可用线程,则利用该可用线程处理异步任务。具体来说,如果该异步任务是硬件解码数据,即,为ARGB格式,则先使用GPU将ARGB数据缩放操作缩放至预先申请的离屏表面(Surface),然后再对离屏表面的ARGB数据进行JPEG编码操作,最后再根据帧序号倒序的将编码完的JPEG图片存入输出队列。如果该异步任务是软件解码数据,即,为YUV格式,则先使用软件对YUV数据进行缩放,然后再进行JPEG编码操作,最后再根据帧序号倒序的将编码完的JPEG图片存入输出队列。
根据前述内容可知,实时视频低内存倒放模式采用了多线程缩放及JPEG重编码方法,通常,JPEG重编码后的一帧大小基本在150k左右,那么,一个50帧大小的GOP,起内存使用量为150k*50=7500k,对于PC设备,其内存消耗较小。同时,由于首先对H264/H265解码后的数据进行了缩放,所以后续JPEG重编码和重解码的速度也得到了一定的提升。并且采用了多线程处理方式,整个GOP的整体速度又得到了进一步的提升,经过测试,在I7-7700 8核CPU的PC条件下,400W分辨率达到了300帧/s左右的重编码效率。
但是,实时视频低内存倒放模式下,为了保证内存使用量,重解码完一帧JPEG图片后,会立即送入渲染器进行渲染,没有做额外的缓存,所以无法进行多线程重解码处理。经测试,重解码线程在I7-7700 8核CPU的PC条件下,400W分辨率的H265码流只有72帧/s左右的处理效率。
综上所述,实时视频低内存倒放模式,能够较大的提升整体视频实时倒放性能,尤其能够极大的提升重编码流程性能,但是,由于重解码线程的性能限制,该模式仍然无法达到4倍速情况下100帧/s的倒放性能需求,存在一定的性能瓶颈。
基于此,在电子设备的当前内存余量充足时,本申请实施例采用实时视频高内存倒放模式进行视频倒放,实时视频高内存倒放模式不进行重编码和重解码操作,但是保留缩放操作,能够减小在高分辨率情况下内存的消耗,同时,由于不进行重编码和重解码操作,GOP的处理速度会得到较大的提升。
S104,若电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对首个GOP进行视频倒放;其中,实时视频高内存倒放模式用于对首个GOP解码后的视频帧并行的进行缩放处理。
在本实施例中,实时视频高内存倒放模式不进行重编码和重解码操作,GOP的处理速度会得到较大的提升。同时,为了减小4K等高分辨率情况下内存的消耗,可以保留对解码后的数据进行缩放处理的过程。并且,由于视频倒放时,会先对GOP进行解码,并且解码后数据的前后帧无参考关系,所以,仍然可以利用CPU多核性能,并行的对GOP解码后的数据进行缩放处理。
例如,以1920像素的视频宽度为界限,如果H264/H265解码后的数据的宽度大于1920,则按照1920宽度对解码后的数据进行缩放处理;如果宽度小于1920,则不进行缩放处理。
下面对步骤S104进行详细介绍。
在图2的基础上,请参照图5,步骤S104中采用实时视频高内存倒放模式对首个GOP进行视频倒放的过程,可以包括S1041~S1044。
S1041,对首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一解码视频帧均具有帧序号,帧序号表征解码视频帧对应的视频帧在首个GOP中的顺序。
S1042,针对任一解码视频帧,从预先建立的多线程缩放线程池中确定第二可用线程。
S1043,基于解码视频帧的类型,利用第二可用线程对解码视频帧进行缩放处理得到缩放视频帧,并按照解码视频帧的帧序号对缩放视频帧进行倒序存储。
可选地,步骤S1043中基于解码视频帧的类型,利用第二可用线程对解码视频帧进行缩放处理得到缩放视频帧,并按照解码视频帧的帧序号对缩放视频帧进行倒序存储的过程,可以包括S10431~S10434。
S10431,从预先建立的缓存池中申请解码视频帧对应的缓存块,缓存块的类型与解码视频帧的类型一致。
S10432,当解码视频帧的类型为硬件解码数据时,第二可用线程通过GPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至对应的缓存块。
S10433,当解码视频帧的类型为软件解码数据时,第二可用线程通过CPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至对应的缓存块。
S10434,第二可用线程按照帧序号,对存储有缩放视频帧的缓存块进行倒序排列。
S1044,在完成所有解码视频帧的处理后,对每一缩放视频帧逐帧进行渲染,以完成首个GOP的视频倒放。
在本实施例中,在开启实时视频高内存倒放模式之前,可以先根据CPU核数创建多线程缩放线程池。可选地,如果CPU核数≥4,则设定多线程缩放线程池的最大线程数为4;如果CPU核数<4,则设定多线程缩放线程池的最大线程数等于CPU核数。例如,假设CPU核数为8,则设定多线程缩放线程池的最大线程数为4。
下面结合图6,对实时视频高内存倒放模式进行详细介绍。如图6所示,假设首个GOP是一个H264/H265编码的GOP,且包括I0-P1-P2-P3-P4-P5这6个视频帧,在开启实时视频高内存倒放模式后,视频倒放流程包括:
第一步,解码线程按照I0-P1-P2-P4-P4-P5的顺序逐帧对首个GOP进行解码,得到解码视频帧。
第二步,将解码视频帧送入缩放线程,由于H264/H265解码后的数据为YUV或ARGB,那么缩放后的数据也是YUV或ARGB,其消耗的内存比较大,因此,为减小大块内存分配消耗的时间以及减少内存碎片的产生,实时视频高内存倒放模式可以采用缓存池的方式,缩放线程在接收到解码视频帧时,从缓存池中申请一个缓存块用于存储对解码视频帧进行缩放处理后的视频帧。
可选地,可以预先建立缓存池,缓存池中设置多个缓存块,每个缓存块均设置有引用计数,所有缓存块均默认引用计数为1,引用计数为1表示此缓存块可使用,引用计数为2表示此缓存块使用中,引用计数个数为0表示此缓存块需要进行销毁。
如图7所示,缩放线程在接收到解码视频帧时,从缓存池中申请缓存块的过程,可以包括:
S1,根据引用计数查询当前缓存池是否存在可用缓存块。
在本实施例中,如果存在可用缓存块,则执行S21;如果不存在可用缓存块,则执行S22。
S21,可用缓存块与解码视频帧的数据参数是否匹配。
在本实施例中,可用缓存块与解码视频帧的数据参数是否匹配,是指可用缓存块与解码视频帧是否为同一格式,也就是,如果解码视频帧为ARGB,则所申请的缓存块也应当是ARGB格式;如果解码视频帧为YUV,则所申请的缓存块也应当是YUV格式。
在本实施例中,如果可用缓存块与解码视频帧的数据参数匹配,则将该可用缓存块作为解码视频帧的缓存块,即执行S31;如果可用缓存块与解码视频帧的数据参数不匹配,则需要修改该可用缓存块的格式,即执行S32。
S31,返回此缓存块,该缓存块即为申请所得的缓存块。
S32,销毁旧的缓存块,按照新参数申请新的缓存块。
在本实施例中,新参数指的是解码视频帧的格式,例如,ARGB或者YUV。按照新参数申请新的缓存块,即执行S5。
S22,输出栈大小是否小于等于缓存余量值。
在本实施例中,缓存余量值是为了增加播放流畅性而设定的,可以由用户根据实际情况灵活设置,例如,10。
在本实施例中,如果输出栈大小小于等于缓存余量值,则可以申请新的缓存块,即执行S41;如果输出栈大小小于等于缓存余量值,则不能继续申请缓存块,此时申请失败,即执行S42。
在本实施例中,输出栈大小小于等于缓存余量值时不能继续申请缓存块,是为了保证最大只能申请GOP视频帧数+缓存余量值(例如,50+10帧)的缓存,从而防止无休止的申请内存导致内存使用过大。同时,在申请失败时,可以等待一段时间(例如,20ms左右)后再次进行申请,以此循环,直至渲染端消耗一些缓存帧后,即可申请成功。
S41,按照参数申请新的缓存块并添加进缓存池。
在本实施例中,参数指的是解码视频帧的格式,例如,ARGB或者YUV。按照参数申请新的缓存块,即执行S5。
S42,缓存块申请失败。
S5,判断解码视频帧是否是硬件解码数据。
在本实施例中,如果解码视频帧是硬件解码数据,则执行S61;如果解码视频帧是软件解码数据,则执行S62。
S61,申请GPU离屏表面。
S62,申请YUV内存。
S7,缓存块申请成功。
在本实施例中,缩放线程在接收到解码视频帧时,按照图7所示的流程申请一个缓存块,如果申请成功,则继续下一步;如果申请失败,则不断重复申请流程。
第三步,将上一步申请的缓存块的引用计数加一,然后根据首个GOP解码后的视频帧信息(例如,视频的宽高、类型、帧率等)封装一个异步任务,每个异步任务均具备一个帧序号,帧序号用于表征解码视频帧对应的视频帧在首个GOP中的顺序,帧序号遇到I帧时清零,后续帧累计加一。例如,对I0-P1-P2-P4-P4-P5进行解码,得到的解码视频帧,其对应的帧序号依次为0、1、2、3、4、5。
第四步,将异步任务送入多线程缩放码线程池,如果多线程缩放线程池中存在可用线程,则利用该可用线程对异步任务进行缩放处理得到缩放视频帧,并按照帧序号倒序的将缩放视频帧存入输出队列;如果多线程缩放线程池中不存在可用线程,则等待并不断重试。
第五步,多线程缩放线程池不断处理异步任务,如果该异步任务是硬件解码数据,即,为ARGB格式,则使用GPU将ARGB数据缩放至第三步申请的缓存块中,再根据帧序号倒序的将缩放视频帧存入输出队列。如果该异步任务是软件解码数据,即,为YUV格式,则先使用软件将YUV数据缩放至第三步申请的缓存块中,再根据帧序号倒序的将缩放视频帧存入输出队列。
第六步,不断循环上述第五步和第六步,直到缩放线程收到下一个为I帧的解码视频帧,则说明此时已将首个GOP的解码视频帧全部送入多线程缩放线程池。因此,缩放线程先等待多线程缩放线程池处理完所有未完成的异步任务,待完成所有异步任务后,将输出队列中的所有缩放视频帧,压入图6所示的缩放GOP ping-pong栈中的输入栈中,待输出队列中的所有数据帧取出完毕后,如果当前输出栈为空,则将输出栈和输入栈互换;如果当前输出栈不为空,则不断等待,直到输出栈为空时,再将输出栈和输入栈互换。
例如,图6中的输出栈为空,则将输出栈和输入栈互换,互换之后输入栈为空。如图8所示,此时,缩放线程就能对另一个GOP(I6-P7-P8-P9-P10-P11)解码后的数据进行处理,并将处理后的缩放视频帧压入输入栈。
第七步,缩放输出线程从输出栈中逐帧取出缩放视频帧,并送至渲染器渲染,最终的渲染顺序为P5-P4-P3-P2-P1-I0,每次渲染完一帧后,将此帧使用的缓存块引用计数减一。
根据前述内容可知,在内存余量充足时采用实时视频高内存倒放模式,由于没有进行重编码和重解码操作,所以倒放性能较实时视频低内存倒放模式有较大提升。经测试,I7-7700 8核CPU的PC条件下,400W分辨率H265码流在4倍速情况下,能够达到100帧/s的帧率。并且相对于现有技术,由于限制了最大视频宽度为1920像素,假设倒放视频分辨率为400W,那么会首先将其缩放为1920×1080的数据帧,如果GOP为50,缓存余量值设为10,那么硬件解码所需缓存大小为:4*1920*1080*(50+10)=480M,软件解码所需缓存大小为:3/2*1920*1080*(50+10)=180M,并且在硬件解码时,缩放操作均使用GPU完成,省去了数据从GPU到CPU的耗时,硬件解码的倒放性能得到了极大的提升。
在本实施例中,由于不同设备的内存余量、同一设备在不同状态下的内存余量都可能会不一致,并且视频码流的GOP大小也是不断变化的,所以,根据实际系统运行情况,适当的选择不同的倒放模式,可以使视频倒放在播放性能和内存使用上达到动态平衡。
需要指出的是,上述步骤S103和S104中采用不同的倒放模式对GOP进行视频倒放的过程,是为了便于理解,以首个GOP为例进行说明的,但本领域技术人员应当理解,针对目标视频码流中的每个GOP,在选定具体的倒放模式之后,都是按照步骤S103和S104中的过程进行视频倒放的,本申请实施例对此不再赘述。
在本实施例中,如果当前使用的是实时视频高内存模式,为保证系统安全性,防止在实时码流参数(分辨率、GOP)变化时,出现内存消耗过大的问题,后续每接收完一个完整GOP后,均需要判断电子设备的当前内存余量是否充足,如果当前内存余量不足则切换到实时视频低内存倒放模式。
因此,在图2的基础上,请参照图9,在步骤S104之后,本申请实施例提供的视频倒放方法还包括步骤S105~S107。
S105,若当前处于实时视频高内存倒放模式,则针对目标视频码流中除首个GOP之外的每个其它GOP,基于其它GOP的码流参数、其它GOP的前一个GOP的内存预计使用值和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足。
在本实施例中,码流参数包括视频帧数、分辨率和数据格式,基于其它GOP的码流参数、其它GOP的前一个GOP的内存预计使用值和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足的过程,可以包括S1051~S1056。
S1051,根据分辨率和数据格式,计算单个视频帧需消耗的缓存值。
在本实施例中,由于实时视频低内存倒放模式和实时视频高内存倒放模式都需要做缩放处理,所以这里的分辨率,指的是缩放视频帧的分辨率。
S1052,按照预设公式MemUseNew=FrameSize*(FrameNumNew+DeltaFrameNum)计算其它GOP的内存预计使用值;
其中,MemUseNew表示其它GOP的内存预计使用值,FrameNumNew表示其它GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值。
S1053,计算电子设备的当前可用内存值与其它GOP的内存预计使用值之间的差值。
S1054,判断差值与其它GOP的前一个GOP的内存预计使用值的和是否小于电子设备的内存安全值。
也就是,判断MemTotal–MemUseNew+MemUse<MemSafe是否成立,MemTotal表示电子设备的当前可用内存值,MemSafe表示前一个GOP的内存预计使用值,MemUseNew表示其它GOP的内存预计使用值。这里之所以要加上前一个GOP的内存预计使用值,是因为在缓存其它GOP的数据时,前一个GOP所占用的缓存块会陆续释放,故需要将该部分内存考虑在内。
S1055,若差值与其它GOP的前一个GOP的内存预计使用值的和小于电子设备的内存安全值,即,MemTotal–MemUseNew+MemUse<MemSafe成立,则确定电子设备的当前内存余量充足。
S1056,若差值与其它GOP的前一个GOP的内存预计使用值的和不小于电子设备的内存安全值,即,MemTotal–MemUseNew+MemUse<MemSafe不成立,则确定电子设备的当前内存余量不足。
S106,若电子设备的当前内存余量充足,则继续采用实时视频高内存倒放模式对所述其它GOP进行视频倒放。
S107,若电子设备的当前内存余量不足,则将实时视频高内存倒放模式切换为实时视频低内存倒放模式,并采用实时视频低内存倒放模式对其它GOP进行视频倒放。
在本实施例中,如果电子设备的当前内存余量充足,即,MemTotal–MemUseNew+MemUse≥MemSafe,则继续采用实时视频高内存倒放模式对述其它GOP进行视频倒放。如果电子设备的当前内存余量不足,即,MemTotal–MemUseNew+MemUse<MemSafe,则切换为实时视频低内存倒放模式,采用实时视频低内存倒放模式对其它GOP进行视频倒放。
同时,如果初始时选择的是实时视频低内存倒放模式,即,采用实时视频低内存倒放模式对首个GOP进行视频倒放,则一直保持此模式进行实时倒放。
与现有技术相比,本申请实施例具有以下有益效果:
首先,根据码流参数和电子设备的当前可用内存值动态的选择倒放模式,使得视频倒放在播放性能和内存使用上达到动态平衡,从而可以实现兼顾播放性能和内存使用的效果。
其次,针对实时视频低内存倒放模式,多线程处理能加快GOP整体的处理速度,而采用复杂度较低的编码器可以一定程度上缩短重编码耗时,并且先缩放后重编码,能够有效提高重编码效率,后续的解码速度也会有一定提升,并且不会存在太大的图像损失。
第三,针对实时视频高内存倒放模式,多线程处理能加快GOP整体的处理速度,由于不进行重编码和重解码操作,GOP的处理速度会得到较大的提升,同时,保留了对解码后的数据进行缩放处理的过程,可以减小4K等高分辨率情况下内存的消耗。
第四,实时视频高内存倒放模式采用缓存池的方式,可以减小大块内存分配消耗的时间以及减少内存碎片的产生;同时,缓存余量值的设置,可以抵抗播放卡顿,增加播放流畅性。
为了执行上述方法实施例及各个可能的实施方式中的相应步骤,下面给出一种视频倒放装置的实现方式。
请参照图10,图10示出了本申请实施例提供的视频倒放装置100的方框示意图。视频倒放装置100应用于电子设备,其包括:响应模块101、判断模块102、第一执行模块103和第二执行模块104。
响应模块101,用于响应视频倒放指令,获取目标视频码流中的首个画面组GOP。
判断模块102,用于基于首个GOP的码流参数和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足。
第一执行模块103,用于若电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对首个GOP进行视频倒放;其中,实时视频低内存倒放模式用于对首个GOP解码后的视频帧并行的进行缩放及重编码处理。
第二执行模块104,用于若电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对首个GOP进行视频倒放;其中,实时视频高内存倒放模式用于对首个GOP解码后的视频帧并行的进行缩放处理。
可选地,码流参数包括视频帧数、分辨率和数据格式;判断模块102具体用于:
根据分辨率和数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUse=FrameSize*(FrameNum+DeltaFrameNum)计算首个GOP的内存预计使用值;
其中,MemUse表示首个GOP的内存预计使用值,FrameNum表示首个GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示缓存余量值;
判断电子设备的当前可用内存值与首个GOP的内存预计使用值的差值是否小于电子设备的内存安全值;
若是,则确定电子设备的当前内存余量不足;
若否,则确定电子设备的当前内存余量充足。
可选地,第一执行模块103具体用于:
对首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一解码视频帧均具有帧序号,帧序号表征解码视频帧对应的视频帧在首个GOP中的顺序;
针对任一解码视频帧,从预先建立的多线程缩放重编码线程池中确定第一可用线程;
基于解码视频帧的类型,利用第一可用线程对解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照解码视频帧的帧序号对重编码视频帧进行倒序存储;
在完成所有解码视频帧的处理后,对每一重编码视频帧逐帧进行重解码及渲染,以完成首个GOP的视频倒放。
可选地,第一执行模块103执行基于解码视频帧的类型,利用第一可用线程对解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照解码视频帧的帧序号对重编码视频帧进行倒序存储的方式,包括:
当解码视频帧的类型为硬件解码数据时,第一可用线程通过GPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至预先申请的离屏表面,再按照设定图片格式对离屏表面的缩放视频帧进行重编码得到重编码视频帧;
当解码视频帧的类型为软件解码数据时,第一可用线程通过CPU对解码视频帧进行缩放处理得到缩放视频帧,并按照设定图片格式对缩放视频帧进行重编码得到重编码视频帧;
第一可用线程按照帧序号,对重编码视频帧进行倒序存储。
可选地,第二执行模块104具体用于:
对首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一解码视频帧均具有帧序号,帧序号表征解码视频帧对应的视频帧在首个GOP中的顺序;
针对任一解码视频帧,从预先建立的多线程缩放线程池中确定第二可用线程;
基于解码视频帧的类型,利用第二可用线程对解码视频帧进行缩放处理得到缩放视频帧,并按照解码视频帧的帧序号对缩放视频帧进行倒序存储;
在完成所有解码视频帧的处理后,对每一缩放视频帧逐帧进行渲染,以完成首个GOP的视频倒放。
可选地,第二执行模块104执行基于解码视频帧的类型,利用第二可用线程对解码视频帧进行缩放处理得到缩放视频帧,并按照解码视频帧的帧序号对缩放视频帧进行倒序存储的方式,包括:
从预先建立的缓存池中申请解码视频帧对应的缓存块,缓存块的类型与解码视频帧的类型一致;
当解码视频帧的类型为硬件解码数据时,第二可用线程通过GPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至对应的缓存块;
当解码视频帧的类型为软件解码数据时,第二可用线程通过CPU对解码视频帧进行缩放处理得到缩放视频帧,并将缩放视频帧存储至对应的缓存块;
第二可用线程按照帧序号,对存储有缩放视频帧的缓存块进行倒序排列。
可选地,视频倒放装置100还包括处理模块105,处理模块105用于:
若当前处于实时视频高内存倒放模式,则针对目标视频码流中除首个GOP之外的每个其它GOP,基于其它GOP的码流参数、其它GOP的前一个GOP的内存预计使用值和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足;
若电子设备的当前内存余量充足,则继续采用实时视频高内存倒放模式对其它GOP进行视频倒放;
若电子设备的当前内存余量不足,则将实时视频高内存倒放模式切换为实时视频低内存倒放模式,并采用实时视频低内存倒放模式对其它GOP进行视频倒放。
可选地,码流参数包括视频帧数、分辨率和数据格式;处理模块106执行基于其它GOP的码流参数、其它GOP的前一个GOP的内存预计使用值和电子设备的当前可用内存值,判断电子设备的当前内存余量是否充足的方式,包括:
根据分辨率和数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUseNew=FrameSize*(FrameNumNew+DeltaFrameNum)计算其它GOP的内存预计使用值;
其中,MemUseNew表示其它GOP的内存预计使用值,FrameNumNew表示其它GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示缓存余量值;
计算电子设备的当前可用内存值与其它GOP的内存预计使用值之间的差值;
判断差值与其它GOP的前一个GOP的内存预计使用值的和是否小于电子设备的内存安全值;
若是,则确定电子设备的当前内存余量不足;
若否,则确定电子设备的当前内存余量充足。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的视频倒放装置100的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
请参照图11,图11示出了本申请实施例提供的电子设备10的方框示意图。电子设备10可以是路由器、交换机等,包括处理器11、存储器12及总线13,处理器11通过总线13与存储器12连接。
存储器12用于存储程序,处理器11在接收到执行指令后,执行所述程序以实现上述实施例揭示的视频倒放方法。
存储器12可能包括高速随机存取存储器(Random Access Memory,RAM),也可能还包括非易失存储器(non-volatile memory,NVM)。
处理器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、微控制单元(Microcontroller Unit,MCU)、复杂可编程逻辑器件(Complex Programmable LogicDevice,CPLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、嵌入式ARM等芯片。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器11执行时实现上述实施例揭示的视频倒放方法。
综上所述,本申请实施例提供的一种视频倒放方法、装置、电子设备及存储介质,在进行视频倒放时,基于码流参数和电子设备的当前可用内存值判断电子设备的当前内存余量是否充足,如果电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对解码后的视频帧并行的进行缩放及重编码处理;如果电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对解码后的视频帧并行的进行缩放处理。也就是,根据码流参数和电子设备的当前可用内存值动态的选择倒放模式,使得视频倒放在播放性能和内存使用上达到动态平衡,从而可以实现兼顾播放性能和内存使用的效果。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种视频倒放方法,其特征在于,应用于电子设备,所述方法包括:
响应视频倒放指令,获取目标视频码流中的首个画面组GOP;
基于首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
若所述电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频低内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放及重编码处理;
若所述电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频高内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放处理。
2.如权利要求1所述的方法,其特征在于,所述采用实时视频低内存倒放模式对所述首个GOP进行视频倒放的步骤,包括:
对所述首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一所述解码视频帧均具有帧序号,所述帧序号表征所述解码视频帧对应的所述视频帧在所述首个GOP中的顺序;
针对任一所述解码视频帧,从预先建立的多线程缩放重编码线程池中确定第一可用线程;
基于所述解码视频帧的类型,利用所述第一可用线程对所述解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照所述解码视频帧的帧序号对所述重编码视频帧进行倒序存储;
在完成所有所述解码视频帧的处理后,对每一所述重编码视频帧逐帧进行重解码及渲染,以完成所述首个GOP的视频倒放。
3.如权利要求2所述的方法,其特征在于,所述基于所述解码视频帧的类型,利用所述第一可用线程对所述解码视频帧进行缩放及重编码处理得到重编码视频帧,并按照所述解码视频帧的帧序号对所述重编码视频帧进行倒序存储的步骤,包括:
当所述解码视频帧的类型为硬件解码数据时,所述第一可用线程通过图形处理器GPU对所述解码视频帧进行缩放处理得到缩放视频帧,并将所述缩放视频帧存储至预先申请的离屏表面,再按照设定图片格式对所述离屏表面的所述缩放视频帧进行重编码得到所述重编码视频帧;
当所述解码视频帧的类型为软件解码数据时,所述第一可用线程通过中央处理器CPU对所述解码视频帧进行缩放处理得到缩放视频帧,并按照设定图片格式对所述缩放视频帧进行重编码得到所述重编码视频帧;
所述第一可用线程按照所述帧序号,对所述重编码视频帧进行倒序存储。
4.如权利要求1所述的方法,其特征在于,所述采用实时视频高内存倒放模式对所述首个GOP进行视频倒放的步骤,包括:
对所述首个GOP中的每一视频帧逐帧进行解码,得到每一解码视频帧;其中,每一所述解码视频帧均具有帧序号,所述帧序号表征所述解码视频帧对应的所述视频帧在所述首个GOP中的顺序;
针对任一所述解码视频帧,从预先建立的多线程缩放线程池中确定第二可用线程;
基于所述解码视频帧的类型,利用所述第二可用线程对所述解码视频帧进行缩放处理得到缩放视频帧,并按照所述解码视频帧的帧序号对所述缩放视频帧进行倒序存储;
在完成所有所述解码视频帧的处理后,对每一所述缩放视频帧逐帧进行渲染,以完成所述首个GOP的视频倒放。
5.如权利要求4所述的方法,其特征在于,所述基于所述解码视频帧的类型,利用所述第二可用线程对所述解码视频帧进行缩放处理得到缩放视频帧,并按照所述解码视频帧的帧序号对所述缩放视频帧进行倒序存储的步骤,包括:
从预先建立的缓存池中申请所述解码视频帧对应的缓存块,所述缓存块的类型与所述解码视频帧的类型一致;
当所述解码视频帧的类型为硬件解码数据时,所述第二可用线程通过GPU对所述解码视频帧进行缩放处理得到所述缩放视频帧,并将所述缩放视频帧存储至对应的所述缓存块;
当所述解码视频帧的类型为软件解码数据时,所述第二可用线程通过CPU对所述解码视频帧进行缩放处理得到所述缩放视频帧,并将所述缩放视频帧存储至对应的所述缓存块;
所述第二可用线程按照所述帧序号,对存储有所述缩放视频帧的所述缓存块进行倒序排列。
6.如权利要求1所述的方法,其特征在于,所述码流参数包括视频帧数、分辨率和数据格式;
所述基于所述首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足的步骤,包括:
根据所述分辨率和所述数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUse=FrameSize*(FrameNum+DeltaFrameNum)计算所述首个GOP的内存预计使用值;
其中,MemUse表示所述首个GOP的内存预计使用值,FrameNum表示所述首个GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值;
判断所述电子设备的当前可用内存值与所述首个GOP的内存预计使用值的差值是否小于所述电子设备的内存安全值;
若是,则确定所述电子设备的当前内存余量不足;
若否,则确定所述电子设备的当前内存余量充足。
7.如权利要求1所述的方法,其特征在于,所述方法还包括:
若当前处于所述实时视频高内存倒放模式,则针对所述目标视频码流中除所述首个GOP之外的每个其它GOP,基于所述其它GOP的码流参数、所述其它GOP的前一个GOP的内存预计使用值和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
若所述电子设备的当前内存余量充足,则继续采用实时视频高内存倒放模式对所述其它GOP进行视频倒放;
若所述电子设备的当前内存余量不足,则将所述实时视频高内存倒放模式切换为所述实时视频低内存倒放模式,并采用所述实时视频低内存倒放模式对所述其它GOP进行视频倒放。
8.如权利要求7所述的方法,其特征在于,所述码流参数包括视频帧数、分辨率和数据格式;
所述基于所述其它GOP的码流参数、所述其它GOP的前一个GOP的内存预计使用值和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足的步骤,包括:
根据所述分辨率和所述数据格式,计算单个视频帧需消耗的缓存值;
按照预设公式MemUseNew=FrameSize*(FrameNumNew+DeltaFrameNum)计算所述其它GOP的内存预计使用值;
其中,MemUseNew表示所述其它GOP的内存预计使用值,FrameNumNew表示所述其它GOP的视频帧数,FrameSize表示单个视频帧需消耗的缓存值,DeltaFrameNum表示预先设定的缓存余量值;
计算所述电子设备的当前可用内存值与所述其它GOP的内存预计使用值之间的差值;
判断所述差值与所述其它GOP的前一个GOP的内存预计使用值的和是否小于所述电子设备的内存安全值;
若是,则确定所述电子设备的当前内存余量不足;
若否,则确定所述电子设备的当前内存余量充足。
9.一种视频倒放装置,其特征在于,应用于电子设备,所述装置包括:
响应模块,用于响应视频倒放指令,获取目标视频码流中的首个画面组GOP;
判断模块,用于基于首个GOP的码流参数和所述电子设备的当前可用内存值,判断所述电子设备的当前内存余量是否充足;
第一执行模块,用于若所述电子设备的当前内存余量不足,则采用实时视频低内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频低内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放及重编码处理;
第二执行模块,用于若所述电子设备的当前内存余量充足,则采用实时视频高内存倒放模式对所述首个GOP进行视频倒放;其中,所述实时视频高内存倒放模式用于对所述首个GOP解码后的视频帧并行的进行缩放处理。
10.一种电子设备,其特征在于,包括处理器和存储器,所述存储器用于存储程序,所述处理器用于在执行所述程序时,实现权利要求1-8任一项所述的视频倒放方法。
11.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该计算机程序被处理器执行时实现如权利要求1-8中任一项所述的视频倒放方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211512754.6A CN115866350B (zh) | 2022-11-28 | 2022-11-28 | 视频倒放方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211512754.6A CN115866350B (zh) | 2022-11-28 | 2022-11-28 | 视频倒放方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115866350A true CN115866350A (zh) | 2023-03-28 |
CN115866350B CN115866350B (zh) | 2024-04-12 |
Family
ID=85667873
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211512754.6A Active CN115866350B (zh) | 2022-11-28 | 2022-11-28 | 视频倒放方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115866350B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116744000A (zh) * | 2023-08-16 | 2023-09-12 | 北京麟卓信息科技有限公司 | 一种基于动态算法重构的视频编解码方式检测方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6353700B1 (en) * | 1998-04-07 | 2002-03-05 | Womble Multimedia, Inc. | Method and apparatus for playing an MPEG data file backward |
US7164844B1 (en) * | 2000-03-02 | 2007-01-16 | The Directv Group, Inc. | Method and apparatus for facilitating reverse playback |
US20160127728A1 (en) * | 2014-10-30 | 2016-05-05 | Kabushiki Kaisha Toshiba | Video compression apparatus, video playback apparatus and video delivery system |
CN106331718A (zh) * | 2016-08-31 | 2017-01-11 | 浙江大华技术股份有限公司 | 一种视频倒放方法及装置 |
CN109819317A (zh) * | 2019-01-07 | 2019-05-28 | 北京奇艺世纪科技有限公司 | 一种视频处理方法、装置、终端和存储介质 |
CN109889895A (zh) * | 2019-03-13 | 2019-06-14 | 浙江大华技术股份有限公司 | 视频播放方法、装置、存储介质及电子装置 |
CN111757121A (zh) * | 2020-07-08 | 2020-10-09 | 杭州海康威视数字技术股份有限公司 | 视频流倒放方法及装置 |
CN112019856A (zh) * | 2020-08-27 | 2020-12-01 | 上海七牛信息技术有限公司 | 一种用于智能手机的视频倒转方法及系统 |
CN113542856A (zh) * | 2021-06-28 | 2021-10-22 | 宜宾中星技术智能系统有限公司 | 在线录像的倒放方法、装置、设备和计算机可读介质 |
CN113923456A (zh) * | 2021-09-30 | 2022-01-11 | 稿定(厦门)科技有限公司 | 视频处理方法及装置 |
-
2022
- 2022-11-28 CN CN202211512754.6A patent/CN115866350B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6353700B1 (en) * | 1998-04-07 | 2002-03-05 | Womble Multimedia, Inc. | Method and apparatus for playing an MPEG data file backward |
US7164844B1 (en) * | 2000-03-02 | 2007-01-16 | The Directv Group, Inc. | Method and apparatus for facilitating reverse playback |
US20160127728A1 (en) * | 2014-10-30 | 2016-05-05 | Kabushiki Kaisha Toshiba | Video compression apparatus, video playback apparatus and video delivery system |
CN106331718A (zh) * | 2016-08-31 | 2017-01-11 | 浙江大华技术股份有限公司 | 一种视频倒放方法及装置 |
CN109819317A (zh) * | 2019-01-07 | 2019-05-28 | 北京奇艺世纪科技有限公司 | 一种视频处理方法、装置、终端和存储介质 |
CN109889895A (zh) * | 2019-03-13 | 2019-06-14 | 浙江大华技术股份有限公司 | 视频播放方法、装置、存储介质及电子装置 |
CN111757121A (zh) * | 2020-07-08 | 2020-10-09 | 杭州海康威视数字技术股份有限公司 | 视频流倒放方法及装置 |
CN112019856A (zh) * | 2020-08-27 | 2020-12-01 | 上海七牛信息技术有限公司 | 一种用于智能手机的视频倒转方法及系统 |
CN113542856A (zh) * | 2021-06-28 | 2021-10-22 | 宜宾中星技术智能系统有限公司 | 在线录像的倒放方法、装置、设备和计算机可读介质 |
CN113923456A (zh) * | 2021-09-30 | 2022-01-11 | 稿定(厦门)科技有限公司 | 视频处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
于晓康等: "MPEG格式视频流的倒序播放技术与实现", 《计算机应用研究》, 10 February 2005 (2005-02-10) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116744000A (zh) * | 2023-08-16 | 2023-09-12 | 北京麟卓信息科技有限公司 | 一种基于动态算法重构的视频编解码方式检测方法 |
CN116744000B (zh) * | 2023-08-16 | 2023-10-13 | 北京麟卓信息科技有限公司 | 一种基于动态算法重构的视频编解码方式检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115866350B (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9210421B2 (en) | Memory management for video decoding | |
CN109104610B (zh) | 实时屏幕共享 | |
US7796692B1 (en) | Avoiding stalls to accelerate decoding pixel data depending on in-loop operations | |
US10116943B2 (en) | Adaptive video compression for latency control | |
US9319682B2 (en) | Moving image encoding apparatus, control method therefor, and non-transitory computer readable storage medium | |
TW200838310A (en) | Apparatus and method thereof for encoding/decoding video | |
GB2560548A (en) | Video data processing system | |
CN115866350B (zh) | 视频倒放方法、装置、电子设备及存储介质 | |
CN110401866B (zh) | 直播视频的显示方法、装置、终端和存储介质 | |
US20100086280A1 (en) | Method for smoothly playing a video stream in reverse | |
US20150208072A1 (en) | Adaptive video compression based on motion | |
US20220408097A1 (en) | Adaptively encoding video frames using content and network analysis | |
GB2518746A (en) | Frame processor | |
US9363523B2 (en) | Method and apparatus for multi-core video decoder | |
CN116506618B (zh) | 一种基于负载动态自适应的视频解码优化方法 | |
CN113923456B (zh) | 视频处理方法及装置 | |
WO2023083064A1 (zh) | 视频处理方法、装置、电子设备及可读存储介质 | |
CN110366851A (zh) | 编码、解码方法及编码、解码设备 | |
JP2006311366A (ja) | 画像記録装置及び画像記録装置の駆動方法 | |
US20110051815A1 (en) | Method and apparatus for encoding data and method and apparatus for decoding data | |
TWI603616B (zh) | 晶片內/晶片外記憶體管理 | |
US20200137134A1 (en) | Multi-session low latency encoding | |
US20150010061A1 (en) | Video encoding method, device and program | |
CN115314731B (zh) | 视频处理系统、方法、计算机设备和存储介质 | |
JP2010193131A (ja) | 動画像復号方法及び動画像復号装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |