一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

视频截图方法、装置、电子设备及计算机可读存储介质与流程

2021-11-26 22:02:00 来源:中国专利 TAG:


1.本技术涉及计算机图形图像技术,尤其涉及一种视频截图方法、装置、电子设备及计算机可读存储介质。


背景技术:

2.人工智能(ai,artificial intelligence)技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统和机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
3.图形图像处理是人工智能的重要应用,例如,在视频播放时,可为用户提供指定的播放画面的截图。然而,相关技术在视频播放的过程中,若接收到针对播放的当前视频帧的截图指令时,存在截图输出的目标帧与需要截图的当前视频帧错位的问题,也就是二者的时间戳不一致,这影响了截图的准确性。
4.针对需要截图的视频帧定位错误的技术问题,相关技术尚无有效解决方案。


技术实现要素:

5.本技术实施例提供一种视频截图方法、装置、电子设备及计算机可读存储介质,能够提高截图的精确性。
6.本技术实施例的技术方案是这样实现的:
7.本技术实施例提供一种视频截图方法,包括:
8.接收针对视频的截图指令;
9.基于第一视频帧队列缓存所述视频的播放过程中的视频帧;
10.查询所述第一视频帧队列,以确定与所述截图指令的时间戳对应的目标帧、以及与所述目标帧对应的参考帧;
11.调用软解码器,以基于所述参考帧对所述目标帧进行解码处理,并将解码得到的视频帧作为响应所述截图指令的截图结果输出。
12.本技术实施例提供一种视频截图装置,包括:
13.接收模块,用于接收针对视频的截图指令;
14.缓存模块,用于基于第一视频帧队列缓存所述视频的播放过程中的视频帧;
15.查询模块,用于查询所述第一视频帧队列,以确定与所述截图指令的时间戳对应的目标帧、以及与所述目标帧对应的参考帧;
16.解码模块,用于调用软解码器,以基于所述参考帧对所述目标帧进行解码处理,并将解码得到的视频帧作为响应所述截图指令的截图结果输出。
17.上述方案中,所述缓存模块,还用于:
18.对所述视频的文件进行解复用处理,得到多个视频帧;
19.将属于同一序列的视频帧缓存到第二视频帧队列,其中,所述第二视频帧队列用于供解码线程调用硬解码器或所述软解码器进行解码播放。
20.上述方案中,所述缓存模块,还用于:
21.将所述第二视频帧队列中的视频帧复制到所述第一视频帧队列。
22.上述方案中,所述缓存模块,还用于:
23.当接收到所述截图指令时,启动截图线程,其中,所述截图线程区别于所述解码线程;
24.通过所述截图线程将所述第二视频帧队列中的视频帧复制到所述第一视频帧队列。
25.上述方案中,所述缓存模块,还用于:
26.当所述视频播放到所述视频的感兴趣的时间点时,启动截图线程,所述截图线程区别于所述解码线程;
27.通过所述截图线程将所述第二视频帧队列中的视频帧复制到所述第一视频帧队列;
28.其中,所述感兴趣的时间点包括以下至少之一:根据多个用户的观看数据统计得到的所述多个用户均感兴趣的时间点、所述视频中与用户画像匹配的时间点。
29.上述方案中,所述缓存模块,还用于:
30.当所述视频播放到预设的时间点时,启动截图线程,所述截图线程区别于所述解码线程;
31.通过所述截图线程将所述第二视频帧队列中的视频帧复制到所述第一视频帧队列;
32.其中,所述视频中均匀分布有多个所述预设的时间点,或者,所述视频的每个部分设置有数量与所述部分的信息量正相关的预设的时间点。
33.上述方案中,所述缓存模块,还用于:
34.立即释放所述截图线程;或者,
35.继续运行所述截图线程,当所述视频播放到最后一个所述预设的时间点时释放所述截图线程。
36.上述方案中,所述缓存模块,还用于:
37.当所述视频帧为帧内编码帧时,清空所述第一视频帧队列中的视频帧,并将所述视频帧存储至所述第一视频帧队列中;
38.当所述视频帧为前向预测编码帧或双向预测编码帧时,将所述视频帧存储至所述第一视频帧队列的队尾。
39.上述方案中,所述软解码器是通过截图线程调用的;所述解码模块,还用于:
40.当所述视频的解码线程是通过调用所述软解码器进行解码播放时,通过所述截图线程释放所述软解码器,以使所述解码线程调用所述软解码器进行解码播放;
41.当所述视频的解码线程是通过硬解码器进行解码播放时,通过所述截图线程释放所述软解码器。
42.上述方案中,所述查询模块,还用于:
43.确定所述第一视频帧队列中与所述截图指令的时间戳一致的时间戳所对应的目
标帧;
44.当所述目标帧的类型为前向预测编码帧时,将所述目标帧前向的帧内编码帧或前向预测编码帧作为所述目标帧的参考帧;
45.当所述目标帧的类型为双向预测编码帧时,将所述目标帧前向的视频帧和/或所述目标帧后向的视频帧作为所述目标帧的参考帧;
46.其中,所述第一视频帧队列包括所述目标帧、所述参考帧以及所述目标帧的非参考帧,所述非参考帧是在对所述目标帧进行解码处理的过程中不需要解码的视频帧。
47.上述方案中,所述解码模块,还用于:
48.根据所述目标帧中每个像素点的运动矢量,确定所述参考帧中对应像素点的向量坐标;
49.将所述目标帧中所述每个像素点的预测差值与所述参考帧中对应像素点的向量坐标相加,得到所述目标帧中每个像素点的向量坐标。
50.上述方案中,所述解码模块,还用于:
51.当所述目标帧的类型为帧内编码帧时,通过所述软解码器对所述帧内编码帧进行解码处理,将解码得到的视频帧作为响应所述截图指令的截图结果输出。
52.上述方案中,当所述截图指令用于获取动图时,所述解码模块,还用于:
53.根据所述动图的时长确定需要解码的视频帧的目标帧数、以及截图的间隔时长;
54.根据所述间隔时长,通过所述软解码器对所述第一视频帧队列中的目标帧进行解码处理,直至解码得到的视频帧的帧数达到所述目标帧数;
55.将解码得到的所述目标帧数的视频帧合成为动图输出。
56.本技术实施例提供一种电子设备,包括:
57.存储器,用于存储可执行指令;
58.处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的视频截图方法。
59.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本技术实施例提供的视频截图方法。
60.本技术实施例具有以下有益效果:
61.通过将播放过程中的视频帧缓存至第一视频帧队列,在截图时基于截图指令所针对的视频帧的时间戳来从第一视频帧队列获取目标帧和参考帧,进而基于参考帧来对目标帧进行解码输出,这使得基于时间戳得到的目标帧是与截图指令的时间一致的,从而保证了输出的目标帧是符合截图意图的,进而提高了截图的精确性。
附图说明
62.图1是相关技术提供的播放流程示意图;
63.图2是相关技术提供的截图流程示意图;
64.图3是本技术实施例提供的视频播放系统10的架构示意图;
65.图4是本技术实施例提供的终端400的结构示意图;
66.图5是本技术实施例提供的视频截图方法的流程示意图;
67.图6a是本技术实施例提供的硬解码器解码的原理图;
68.图6b是本技术实施例提供的软解码器解码的原理图;
69.图7是本技术实施例提供的截图原理的示意图;
70.图8是本技术实施例提供的截图原理的示意图;
71.图9是本技术实施例提供的截图原理的示意图;
72.图10是本技术实施例提供的截图结果的示意图;
73.图11是本技术实施例提供的解码流程示意图;
74.图12是本技术实施例提供的解码流程的示意图;
75.图13是本技术实施例提供的解码的示意图。
具体实施方式
76.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
77.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
78.在以下的描述中,所涉及的术语“第一/第二/第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一/第二/第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
79.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
80.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
81.1)帧内编码帧(intra coded picture):简称为i帧,也称为“关键帧”。它是一种自带全部信息(包含完整画面)的独立帧,无需参考其它帧便可独立进行解码,图像组(gop,group of pictures)中的第一个帧始终是i帧。
82.2)前向预测编码帧(predictive coded picture):简称为p帧,p帧表示本帧与前向的参考帧(i帧或者p帧)的差别,解码时需要参考前向的参考帧以及本帧定义的差别,生成最终画面。
83.3)双向预测编码帧(bidirectionally predictive coded pictures):简称为b帧,b帧表示本帧与前向和/或后向的参考帧(i帧、p帧或者b帧)的差别,解码时需要参考前向和/或后向的参考帧以及本帧定义的差别,生成最终画面。
84.4)参考帧:解码时参考的帧。
85.5)非参考帧:解码时不被任何帧参考的帧,这些帧在解码过程中被丢弃,不会影响其他帧的正常解码。
86.6)gop:是一组连续的图像,由一个i帧(包含)到下一个i帧(不包含)之间的所有帧构成。gop是编解码器存取的基本单位。
87.7)软解:通过中央处理器(cpu,central processing unit)运行解码软件来进行视频解码,整个过程开发者都可控,但是效率较低。
88.8)硬解:视频硬解解码,通过图形处理器(gpu,graphics processing unit)或者其他特定的硬件电路来进行视频解码,一般对输入和输出有一定限制(取决于硬件接口),但是效率较高。
89.9)h.264:是一种高度压缩数字视频编解码器标准。在h.264中图像以序列为单位进行组织,一个序列是对多个内容差异不太大的图像编码后得到的数据流,一个序列以i帧开始,到下一个i帧(不包括下一个i帧)结束。h.264通过帧内压缩生成序列中的i帧,通过帧间压缩生成序列中的p帧和b帧。
90.10)高效率视频编码(hevc,high efficiency video coding):也称为h.265,是一种新的视频压缩标准,用于替代h.264,其压缩效率相对于h.264更高。hevc和h.264的差异较小,主要性能相同,它们都能提高视频的播放速率。
91.11)yuv数据:视频通常会解码为yuv数据,其中,y表示明亮度(灰度值),u和v分别是色度和浓度,yuv数据减少了图像尺寸,方便传输和存储。
92.参见图1,图1是相关技术提供的播放流程示意图。图1中,从视频文件读取原始数据(即音视频数据),对原始数据进行解复用处理,得到视频帧和音频帧;对视频帧进行视频解码,得到对应的视频帧/索引,对音频帧进行音频解码,得到对应的音频帧。同步并渲染解码后的视频帧/索引和音频帧,即可得到播放需要的视频数据和音频数据。
93.当使用硬解码器对视频进行解码处理时,解码后的视频帧存放于gpu中,外部无法直接访问,若在视频播放过程中需要截图,因为无法直接获取解码后的视频帧,也无法实现截图。
94.当使用软解码器对视频进行解码处理时,如图2所示,图2是相关技术提供的截图流程示意图。这种截图方法是根据播放位置来定位目标帧,由于播放位置取的是当前视频帧时间戳和音频帧时间戳中较大者,当音频时间戳大于视频时间戳时,根据播放位置定位到的目标帧有可能不是当前视频帧,导致截图不准确。此外,如果是在线播放视频,截图时,在播放流程之外,还需要重新请求一遍视频文件,根据播放位置读取原始数据,对原始数据进行解复用处理,得到视频帧,并对视频帧进行视频软解,得到解码后的多个视频帧,从多个视频帧中寻找目标帧并将目标帧作为截图输出,这样会带来额外的网络访问和时间开销。
95.为了解决上述技术问题,本技术实施例提供一种视频截图方法、装置、电子设备和计算机可读存储介质,能够提高截图的精确性,尤其是,当在线播放视频时,无需再次请求视频文件即可截图,可减少网络开销。
96.本技术实施例提供的视频截图方法可以由各种电子设备实施,例如,可以由终端或服务器单独实施。例如,当终端单独实施本技术实施例提供的视频截图方法时,终端本地存储有视频文件,在本地播放视频的过程中,终端接收到针对当前正在播放的视频帧的截图指令,启动与播放线程异步的截图线程,将播放线程对应的视频帧复制到截图线程对应的第一视频帧队列中,并对第一视频帧队列中的视频帧解码,得到截图,并在终端中显示截图。
97.本技术实施例提供的视频截图方法也可以由服务器和终端协同实施,例如,服务
器响应于终端的视频文件请求,向终端发送视频文件,终端对视频文件解复用,得到对应的视频帧和音频帧,对音频帧和视频帧解码后同步渲染并播放;终端响应于截图指令时,启动异步的截图线程,对截图指令针对的视频帧以及对应的参考帧解码,得到截图,并显示截图。
98.本技术实施例提供的电子设备可以是各种类型的终端或服务器,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器;终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能电视、智能车载终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术实施例对此不做限制。
99.以服务器为例,例如可以是部署在云端的服务器集群,向用户开放人工智能云服务(aiaas,ai as a service),aiaas平台会把几类常见的ai服务进行拆分,并在云端提供独立或者打包的服务,这种服务模式类似于一个ai主题商城,所有的用户都可以通过应用程序编程接口的方式来接入使用aiaas平台提供的一种或者多种人工智能服务。
100.例如,其中的一种人工智能云服务可以是视频截图服务,即云端的服务器封装有本技术实施例提供的视频截图程序以及视频文件。终端响应于截图指令,通过调用基于云技术的视频截图服务,以使部署在云端的服务器调用封装的视频截图程序,对视频文件进行解复用处理得到视频帧,并对截图指令针对的视频帧以及对应的参考帧进行解码处理,将解码得到的视频帧作为截图,并将截图返回给终端,以使终端显示截图。
101.下面以服务器和终端协同实施本技术实施例提供的视频截图方法为例进行说明。参见图3,图3是本技术实施例提供的视频播放系统10的架构示意图。终端400通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
102.在一些实施例中,终端400向服务器200发送视频文件请求,服务器200响应于视频文件请求,向终端400发送视频文件,终端400对视频文件进行解复用处理,得到对应的视频帧和音频帧,对音频帧和视频帧解码后同步渲染并播放。当终端400接收到截图指令时,启动异步的截图线程,对截图指令针对的视频帧以及对应的参考帧解码,得到截图,并在终端400中显示截图。
103.在一些实施例中,以本技术实施例提供的电子设备为终端400为例,终端400通过运行计算机程序来实现本技术实施例提供的视频截图方法,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地应用程序(app,app lication),即需要在操作系统中安装才能运行的程序,例如可以是专用的视频播放器;也可以是浏览器,其通过网页的形式播放视频;还可以是其他任意具有视频播放功能的客户端,例如在线视频客户端、直播客户端等;也可以是能够嵌入至任意app中的视频播放小程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
104.下面以本技术实施例提供的电子设备为上文所述的终端为例进行说明,参见图4,图4是本技术实施例提供的终端400的结构示意图,图4所示的终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统
440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2将各种总线都标为总线系统440。
105.处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
106.用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
107.存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。
108.存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read only memory),易失性存储器可以是随机存取存储器(ram,random access memory)。本技术实施例描述的存储器450旨在包括任意适合类型的存储器。
109.在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
110.操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
111.网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universal serial bus)等;
112.呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
113.输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
114.在一些实施例中,本技术实施例提供的视频截图装置可以采用软件方式实现,图4出了存储在存储器450中的视频截图装置455,其可以是程序和插件等形式的软件,包括:接收模块4551、缓存模块4552、查询模块4553和解码模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
115.下面将结合附图对本技术实施例提供的视频截图方法进行说明。以下是以终端为视频截图的执行主体进行说明,具体可由终端通过运行上文的各种计算机程序来实现的;当然,根据对下文的理解,不难看出也可以由终端和服务器协同实施或者服务器单独实施本技术实施例提供的视频截图方法。
116.参见图5,图5是本技术实施例提供的视频截图方法的流程示意图,将结合图5示出的步骤进行说明。
117.在步骤101中,接收针对视频的截图指令。
118.在一些实施例中,视频可以是通过硬解码器解码播放的,解码播放的原理可参见图6a,图6a是本技术实施例提供的硬解码器解码的原理图。以终端运行安卓(android)系统为例,在通过android mediacodec(安卓多媒体编解码器)解码后直接渲染的使用场景中,视频解码和视频渲染是由系统绑定的。即对视频文件解复用得到视频帧,并通过硬解码器对视频帧解码后直接进行渲染,解码后的yuv数据(yuv等格式的裸数据)存放于gpu中,外部无法直接访问,只能获取一个数据索引,并在调用渲染接口时,将该数据索引发送给渲染接口,以在系统内部实现数据索引对应的yuv数据的渲染操作。通过上述设计,数据可以始终存放于gpu中,不需要在内存和显存之间进行传递,加速了数据处理过程,简化了视频播放器相关的运维人员的工作。
119.在一些实施例中,视频可以是通过软解码器解码播放的,解码播放的原理可参见图6b,图6b是本技术实施例提供的软解码器解码的原理图。通过cpu对视频文件进行解复用处理,得到对应的音频帧和视频帧,然后通过cpu分别对音频帧和视频帧进行解码处理,得到解码后的音频帧和视频帧,之后,可对它们进行同步并渲染,最后将渲染后的视频帧发送给显卡,将渲染后的音频发送给终端的声卡,即可播放视频。
120.在一些实施例中,截图指令可以是来自操作系统(如安卓系统)的指令,也可以是来自于应用程序如视频播放器的指令。例如,视频播放器在播放视频的过程中,通过解码线程对视频文件进行解码播放,此时,可通过视频播放器的主线程或者视频播放器的解码线程接收针对正在播放的视频帧的截图指令。
121.在步骤102中,基于第一视频帧队列缓存视频的播放过程中的视频帧。
122.在一些实施例中,在缓存视频的播放过程中的视频帧之前,需要先通过视频播放器的解码线程对视频的文件(即视频文件)进行解复用处理,得到多个视频帧。将具有相同特点的连续的多个视频帧划分为一个序列,即一个gop。将属于同一序列的多个视频帧缓存到第二视频帧队列,第二视频帧队列中可以存储有一个gop,也可以存储有多个gop,当存储有多个gop时,通过先入先出的方式进行存储,其中,第二视频帧队列用于供解码线程调用硬解码器或软解码器进行解码播放。如此,在回退播放进度时,可以通过第二视频帧队列中已经缓存的视频帧播放;当需要对已播放部分的视频帧截图时,也可以通过第二视频帧队列中已经缓存的视频帧实现截图。
123.在一些实施例中,参见图7,图7是本技术实施例提供的截图原理的示意图。图7中解码线程主要通过软解码器进行解码处理,即通过cpu运算进行解码处理。在视频播放器的主线程(主线程用于进行人机交互以及指令分发)接收到截图指令后,将截图指令发送给视频播放器的解码线程,解码线程基于第一视频帧队列缓存视频的播放过程中的视频帧,即将第二视频帧队列中的视频帧复制到第一视频帧队列。其中,第一视频帧队列是在主线程接收到截图指令后新建的一个队列。该队列中的数据与第二视频帧队列中数据一致。在截图线程基于第一视频帧队列得到截图的过程中,截图线程调用软解码器解码,在截图线程释放软解码器之后,解码线程继续调用软解码器对视频文件进行解码处理。
124.在一些实施例中,参见图8,图8是本技术实施例提供的截图原理的示意图。图8中解码线程主要通过硬解码器进行解码处理,即通过gpu或其他特定的硬件电路解码。在视频播放器的主线程接收到截图指令后,将截图指令发送给解码线程,解码线程将第二视频帧
队列中的视频帧复制到第一视频帧队列。其中,第一视频帧队列是在主线程接收到截图指令后新建的一个队列。在截图线程基于第一视频帧队列得到截图的过程中,截图线程调用软解码器解码,在解码线程中始终调用硬解码器进行解码处理,截图线程不会对解码线程造成影响,因此,当使用硬解码器解码播放视频时,可在不间断播放视频的同时实现截图,提高用户观看和截图的体验。
125.需要说明的是,上述第一视频帧队列和第二视频帧队列中的视频帧可以是解码前的视频帧,即还未对其进行解码处理。在一些可能的示例中,第一视频帧队列中的视频帧也可以是通过软解码器解码后的视频帧,将第一视频帧队列中的视频帧复制到截图线程的第一视频帧队列中,通过截图线程确定第一视频帧队列中每个视频帧的时间戳。当时间戳小于截图指令的时间戳(即截图指令所针对的需要截图的视频帧的时间戳)时,丢弃视频帧;当时间戳等于截图指令的时间戳时,将对应的解码后的视频帧作为响应截图指令的截图结果输出。
126.在一些实施例中,当视频播放器的主线程接收到截图指令时,启动区别于视频播放器的解码线程的截图线程。通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。如此,截图线程可与解码线程并行进行。截图线程不会阻塞解码线程,同时,若解码线程对第二视频帧队列中的数据进行增删操作,也不会对截图线程的第一视频帧队列中的数据产生影响,可提高截图的精确性。
127.在一些实施例中,步骤102可在步骤101之前。例如,在视频的时间轴(或播放进度条)中分布有多个时间点,表示用户可能对这些时间点处的视频帧感兴趣。这些时间点是根据多个用户的观看数据统计得到的多个用户均感兴趣的时间点,例如,当用户对当前播放的视频帧感兴趣时,可暂停视频,在视频播放页面对当前视频帧进行标记或投票。再例如,当用户对当前播放的一段视频不感兴趣/感兴趣时,可触发快进操作/快退操作等。如此,当终端的后台服务器收集了足够多的用户观看数据(即用户操作数据如标记数据、投票数据或播放数据等)后,可确定出在视频中多数或全部用户感兴趣的时间点。在一些可能的示例中,感兴趣的时间点还可以是根据视频播放器的当前观看用户的用户画像确定的与当前用户匹配的时间点。例如,根据用户画像确定出当前用户喜欢观看喜剧,则可对将视频中的喜剧情节部分的时间点标注为感兴趣的时间点。
128.在一些实施例中,当视频播放至感兴趣的时间点时,即使主线程没有接收到截图指令,也可以将视频播放过程中的视频帧缓存到第一视频帧队列,从而对感兴趣的时间点处的视频帧进行截图。如图9所示,图9是本技术实施例提供的截图原理的示意图。当检测到视频播放到视频的感兴趣的时间点时,视频播放器的解码线程启动截图线程。通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。截图线程基于第一视频帧队列获取截图,并将截图存储到内存中或指定的位置,可通过访问内存或指定位置得到相关时间点的截图。当存储的截图过多超过存储规定上限时,可按照先存储先删除的方式,优先删除存储时间最早的截图,直至不再超过规定上限。
129.当视频文件中只有一个感兴趣的时间点,且当视频播放到该时间点时,解码线程启动截图线程,通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。在截图线程基于第一视频帧队列获取感兴趣的时间点处的视频帧(即截图)并保存之后,关闭截图线程。当用户希望对当前播放的视频帧截图,并触发截图操作后,视频播放器的主线程响
应于截图指令,将截图指令发送给解码线程,以使解码线程再次启动截图线程,并将解码线程的第二视频帧队列中的视频帧复制到截图线程的第一视频帧队列中,以对第一视频帧队列中的视频帧进行解码处理,得到对应的截图,并在当前播放页面中显示截图。之后,关闭截图线程。其中,第一视频帧队列可以是在视频播放到感兴趣的时间点时或主线程接收到截图指令后创建的,在获取对应的截图之后被删除。需要说明的是,当解码线程通过软解码器解码时,在截图线程对第一视频帧队列中的视频帧解码期间(需要调用软解码器),解码线程不解码。在关闭截图线程后,解码线程再次调用软解码器解码。
130.可见,在本技术实施例中,只有存在截图需求时,即播放至感兴趣的时间点或用户触发截图操作时,才会进行截图,如此,可以节约设备资源,还可根据用户可能感兴趣的时间点提前准备截图,预测并命中用户的截图需求,提高截图响应效率。
131.当视频文件中存在离散分布的多个感兴趣的时间点时,解码线程启动截图线程,通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。截图线程基于第一视频帧队列获取第一个感兴趣的时间点处的视频帧(即截图),之后,关闭截图线程;继续通过解码线程对视频进行解码播放。当播放到下一个感兴趣的时间点时,再次启动截图线程截图,直至最后一个感兴趣的时间点。其中,第一视频帧队列可以是在视频开始播放时创建的,也可以是在视频播放到第一个感兴趣的时间点时创建的,此时,第一视频帧队列在创建后可以始终存在,直至得到最后一个感兴趣的时间点处的截图后,删除第一视频帧队列。第一视频帧队列还可以是在视频播放到每个感兴趣的时间点时创建的,此时,当截图线程在每个感兴趣的时间点处获取截图后,删除第一视频帧队列。
132.可见,本技术实施例中截图线程只有在播放至感兴趣的时间点,即存在截图需求时,才会开启,不需要缓存无用的中间数据,如此,不仅可以节约设备资源,也可以节约存储空间,保证了资源节约和准确命中截图需求之间的平衡,兼顾了资源节约和截图响应效率。
133.当感兴趣的时间点是连续的多个时,此时,第二视频帧队列中可以存储有多个gop,则第一视频帧队列中存储有同样的多个gop。此时,第一视频帧队列可以是在视频开始播放时创建的,也可以是在视频播放到第一个感兴趣的时间点时创建的,第一视频帧队列在创建后可以始终存在,直至得到最后一个感兴趣的时间点处的截图后,删除第一视频帧队列。在解码线程启动截图线程后,截图线程依次对第一视频帧队列中的gop解码,得到对应的多个截图。之后,关闭截图线程,直至解码线程响应于主线程发送的截图指令,再次启动截图线程。可见,本技术实施例预先获取多个连续的视频帧的截图,如此,当用户对感兴趣的时间点所在时间段中的视频感兴趣,并希望截图时,视频播放系统可以快速响应截图指令,进行截图,提高了截图指令响应的效率,此外,用户也可以从多个截图中挑选得到自己最满意的截图。
134.在一些实施例中,视频中预设有多个时间点,预设的时间点可以在视频中均匀的分布,例如,每隔n(n为正整数)分钟存在一个时间点,或,一个视频中均匀分布有m(m为正整数)个时间点,相邻时间点间的时间间隔取决于视频总时长。预设的时间点也可以在视频中不均匀地分布,例如,视频的每个部分设置有数量与每个部分的信息量正相关的时间点,即视频的某个情节单元的信息量越多,此处分布的时间点也相应越多。信息量可以是相同时间内对应的gop的数量,也可以是人为或设备自动划分的情节单元数量,例如,一段3分钟的视频中可以划分为室外风景部分、室内一楼空间布置部分和室内二楼空间布置部分等。
135.在一些实施例中,当视频播放至预设的时间点时,即使主线程没有接收到截图指令,也可以将视频播放过程中的视频帧缓存到第一视频帧队列,从而对预设的时间点处的视频帧进行截图。当检测到视频播放到预设的时间点时,解码线程启动截图线程,通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。当时间点分布不同时,整体的截图流程也不同,具体的截图流程可以参见上文对感兴趣的时间点的相关描述。
136.在一些实施例中,当播放到感兴趣的时间点或预设的时间点时,启动截图线程,将第二视频帧队列中的视频帧复制到第一视频帧队列,之后,可立即释放截图线程,等播放到下一个感兴趣的时间点或预设的时间点,或响应于截图指令时,再重新启动截图线程。如此,可以节省截图线程对设备资源的占用。
137.在另一些实施例中,当解码线程通过硬解码器解码播放时,因为此时截图线程与解码线程完成独立,互不干扰,所以,当播放到感兴趣的时间点或预设的时间点时,启动截图线程,将第二视频帧队列中的视频帧复制到第一视频帧队列,之后,也可继续运行截图线程,当视频播放到最后一个感兴趣的时间点或预设的时间点时释放截图线程。如此,可以实现快速截图,无需等待截图线程的启动时间,提高截图效率。
138.在一些实施例中,当第一视频帧队列用于缓存一个gop时,在缓存视频帧的过程中,若确定视频帧为i帧,清空第一视频帧队列中的gop,并将i帧存储至第一视频帧队列中;若确定视频帧为p帧或b帧,将视频帧存储至第一视频帧队列的队尾。如此,可以保证第一视频帧队列中只有一个gop,当新的i帧进入第一视频帧队列时,清空第一视频帧队列,实现对第一视频帧队列的更新。若上一个gop中的视频帧存在错误,则错误不会传播至下一个gop中,提高了待解码的视频帧的准确性。
139.在一些可能的示例中,当一个gop中存在多个i帧时,只有当第一个i帧进入第一视频帧队列时,才会清空第一视频帧队列中的gop,之后的i帧不会触发第一视频帧队列的清空。
140.在另一些实施例中,当第一视频帧队列用于缓存多个gop时,在缓存视频帧的过程中,若确定视频帧为i帧,删除第一视频帧队列中队首的gop,并将视频帧存储至第一视频帧队列的队尾;若确定视频帧为p帧或b帧,将视频帧存储至第一视频帧队列的队尾。其中,第一视频帧队列中的gop的最大数量,可根据过去一段时间内的可用缓存空间的平均值的预设比例(如50%)来确定。例如,在过去3小时中,可用缓存空间处于动态变化中,其平均值为20兆,则第一视频帧队列可用的空间最大为10兆,可根据最近k(k为正整数)个gop确定gop的平均大小,从而确定第一视频帧队列中的gop的最大数量。
141.如此,可以保证第一视频帧队列中的gop数量的稳定,减少并发,保证解码过程的顺利进行。因为第一视频帧队列的队尾为当前播放的视频帧,在队尾之前的视频帧是之前已经播放了的视频帧,所以在回退播放进度(如回退至当前播放进度前1分钟)并截图时,可以基于缓存的gop中已经播放了的视频帧解码,得到对应时间戳处的截图。
142.在一些实施例中,当在终端中通过视频播放器在线播放视频时,因为将视频的播放过程中的视频帧缓存到了第一视频帧队列中,所以在截图时无需再次向服务器请求视频文件即可截图,减少了网络开销,提高了截图效率。
143.在步骤103中,查询第一视频帧队列,以确定与截图指令的时间戳对应的目标帧、以及与目标帧对应的参考帧。
144.在一些实施例中,第一视频帧队列中的视频帧包括i帧和p帧,还可能包括b帧。当确定目标帧后,可将第一视频帧队列划分为目标帧、参考帧以及目标帧的非参考帧。其中,非参考帧对于目标帧的解码没有任何帮助,因此,在对目标帧进行解码处理的过程中直接跳过非参考帧,不需要对非参考帧解码。
145.在一些实施例中,截图指令的时间戳,即截图指令所针对的需要截图的视频帧的时间戳,因此,确定与截图指令的时间戳对应的目标帧,即确定第一视频帧队列中时间戳与需要截图的视频帧的时间戳一致的视频帧。在一些可能的示例中,可以通过调用定位(seek)函数确定目标帧,当seek函数不能准确地跳到(即找出)指定时间戳处的视频帧时,可以将第一视频帧队列中与指定时间戳最相近的时间戳所对应的视频帧作为目标帧。
146.在一些可能的示例中,当第一视频帧队列中缓存了多个gop时,截图时可从多个gop中查找时间戳与截图指令的时间戳最相近的i帧作为目标帧。
147.在一些可能的示例中,当第一视频帧队列中一个gop中存在多个i帧时,第一个i帧后面的所有视频帧都不能将第一个i帧之前的视频帧作为参考帧,但可以将第一个i帧之后的其他i帧作为参考帧。
148.在一些实施例中,当目标帧的类型为i帧时,由于i帧自带全部信息,因此,不需要参考其他帧即可解码。当目标帧的类型为p帧时,将目标帧前向的i帧或p帧作为目标帧的参考帧。当目标帧的类型为b帧时,此时,目标帧的参考帧可以是i帧、p帧或b帧,将目标帧前向的视频帧(i帧、p帧或b帧)和/或目标帧后向的视频帧(p帧或b帧)作为目标帧的参考帧。需要说明的是,上述“前向”和“后向”指的是编码排序中的相对位置。
149.在步骤104中,调用软解码器,以基于参考帧对目标帧进行解码处理,并将解码得到的视频帧作为响应截图指令的截图结果输出。
150.在一些实施例中,当调用软解码器解码时,若第一视频帧队列中没有b帧,则解码顺序与编码顺序一致;若第一视频帧队列中有b帧,则解码顺序与编码顺序不一致,解码时,若b帧在相邻的p帧之前,会先对p帧解码,再对b帧解码。
151.在一些实施例中,基于参考帧对目标帧进行解码处理,可以采用如下方式:根据目标帧中每个像素点的运动矢量,确定参考帧中对应像素点的向量坐标;将目标帧中每个像素点的预测差值与参考帧中对应像素点的向量坐标相加,得到目标帧中每个像素点的向量坐标。
152.在一些实施例中,gop可以记录视频帧中目标的运动。运动矢量用于衡量两个视频帧之间目标的运动程度,运动矢量由水平位移量和垂直位移量二者构成。因为gop内视频帧数较少,且gop内的视频帧彼此间较为相似,当一个gop的视频帧中目标运动时,其位置会变化但形状和颜色等基本不变。因此可以通过运行矢量来降低相邻的视频帧间的差异数据量。根据目标帧中的运动矢量可以找到对应的参考帧,进而,可以根据目标帧中每个像素点的运动矢量确定参考帧中对应的像素点以及对应的像素点的向量坐标。因为目标帧(除i帧以外)记录了本帧与参考帧各个像素点的差别,即预测差值,因此,可以基于目标帧中各像素点的预测差值和参考帧中对应像素点的向量坐标,确定目标运动后目标帧中发生变化的各像素点的向量坐标。当像素点未发生变化时,预测差值为0。例如,目标帧中一个像素点预测差值为a,参考帧中对应像素点的向量坐标为c,则目标帧中该像素点的向量坐标为a c。之后,可根据参考帧中各个像素点的像素确定目标运动后目标帧中对应的各个像素点的像
素。例如,参考帧为i帧,目标帧为p帧,i帧中的目标运动后,i帧中的像素点a发生位移,在p帧中像素点a对应位移后的像素点b,则将像素点a的像素赋给像素点b,并将i帧中其他像素点的像素赋给p帧中对应的未发生移动的像素点,从而得到p帧中各个像素点的像素,可以确定p帧对应的包含画面信息的视频帧,将包含画面信息的视频帧作为响应截图指令的截图结果输出。
153.可见,本技术实施例基于目标帧与参考帧间的预测差值确定目标帧中各像素点的向量坐标,从而可以确定视频帧中目标运动后目标帧中发生变化的像素点的向量坐标和像素,进而得到最终的截图。其中,目标帧只需要保存较少的与参考帧的差值信息,不需要保存各个像素点的像素等信息,大大减少了目标帧的信息量,提高了压缩率,同时也减少了第一视频帧队列中gop的信息量,从而减少了截图线程的工作量,提高了截图效率。
154.在一些实施例中,当b帧传送的是它与i帧或p帧之间的差值信息,或者p帧与后面p帧或i帧之间的差值信息时,可以通过上述实施例所述方法确定目标帧中每个像素点的向量坐标,即对目标帧进行解码处理。当b帧传送的是它与前后i、p帧或前后p、p帧平均值之间的差值信息时,将b帧中像素点的预测差值与前后帧中对应的像素点的向量坐标的平均值相加作为该像素点的向量坐标。例如,b帧前向为i帧,后向为p帧,b帧中一个像素点对应的预测差值为d,i帧中对应的像素点的向量坐标为e,p帧中对应的像素点的向量坐标为f,则该像素点的向量坐标为d (e f)/2。可见,b帧通过保存它与i帧或p帧之间的差值信息,进一步减少了b帧的信息量,提高了压缩率,且b帧常位于i帧和p帧之间,具有内插效果,可以减少噪讯。在一些实施例中,当目标帧的类型为i帧时,通过软解码器对i帧进行解码处理,将解码得到的视频帧作为响应截图指令的截图结果输出。如此,不需要对其他帧进行解码,大大提高了解码效率。
155.在一些实施例中,软解码器可以是通过截图线程调用的;相应地,在步骤304之后,若视频的解码线程是通过调用软解码器进行解码播放时,通过截图线程释放软解码器,以使解码线程调用软解码器进行解码播放;若视频的解码线程是通过硬解码器进行解码播放时,通过截图线程释放软解码器。
156.在一些实施例中,当截图指令用于获取动图时,即获取一段时间内的视频帧时,为了提高动图截图效率,不需要连续性对视频帧进行截图,可间隔固定帧(如2帧或3帧等)进行截图,还可根据动图的时长确定需要解码的视频帧的目标帧数、以及截图的间隔时长。例如,当帧率为24赫兹(hz)时,预设的动图时长为1秒,则可以确定需要解码的视频帧的目标帧数为24帧,可算出截图的间隔时长约为42毫秒。在一些可能的示例中,动图所包含的视频帧的帧数是指定的,此时,可直接计算对应的截图的间隔时长。每间隔该间隔时长,通过软解码器对第一视频帧队列中的目标帧进行解码处理,直至解码得到的视频帧的帧数达到目标帧数。例如,每间隔42毫秒对第一视频帧队列中的目标帧进行解码处理,直至解码得到24帧视频帧。最后,将解码得到的视频帧合成为动图输出。如此,可以提高动图截图效率,在保证动图清晰度和连贯性的基础上,节约设备资源和存储空间。
157.在一些实施例中,当需要截取有声音的一段视频时,确定需要截取的各个视频帧的时间戳。在对视频文件进行解复用处理,得到多个视频帧和多个音频帧之后,根据需要截取的各个视频帧的时间戳对相应时间戳处的音频帧解码,得到解码后对应的音频帧。根据上文所述方法得到作为截图结果的各个视频帧,分别渲染各视频帧以及对应的同步的音频
帧,将渲染后的音频帧发送给声卡,将渲染后的视频帧发送给显卡,即可显示有声音的一段视频。如此,可以得到带有声音的视频,满足用户多样化的截图需求。
158.在一些实施例中,参见图10,图10是本技术实施例提供的截图结果的示意图,将解码得到的视频帧作为响应截图指令的截图结果输出,截图结果可显示于播放页面中,也可在播放页面中只显示缩略图,或者不显示,直接存储截图结果,并通知用户已截图。
159.可以看出,本技术实施例通过将播放过程中的视频帧缓存至第一视频帧队列,在截图时基于截图指令所针对的视频帧的时间戳来从第一视频帧队列获取目标帧和参考帧,进而基于参考帧来对目标帧进行解码输出,这使得基于时间戳得到的目标帧是与截图指令的时间一致的,从而保证了输出的目标帧是符合截图意图的,进而提高了截图的精确性。
160.下面,将说明本技术实施例在一个实际的视频播放场景中的示例性应用。
161.在用户通过终端中安装的视频播放器观看视频时,若需要对当前观看的视频帧截图,当用户触发截图操作时,终端(如智能手机)接收到截图指令,对当前观看的视频帧进行截图。参见图11,图11是本技术实施例提供的解码流程示意图。在接收到截图指令后,从视频文件中读取原始数据,即原始的音视频数据,对音视频数据进行解复用处理,并对解复用处理得到的视频帧进行解码处理。
162.在解码时,新增一个gop缓存队列(即第一视频帧队列),该队列队首为i帧,当有新的i帧来时,清空队列数据,重新存储,保证该队列最大只能存储一个gop的数据。参见图12,图12是本技术实施例提供的解码流程的示意图。解码流程如图12中步骤201至步骤205所示。
163.在步骤201中,对视频文件进行解复用处理,得到多个视频帧。
164.在步骤202中,查询gop缓存队列,判断当前视频帧是否为i帧,若当前视频帧是i帧,执行步骤203;若当前视频帧不是i帧,执行步骤204。
165.在步骤203中,清空gop缓存队列,并将当前视频帧存储至gop缓存队列的队尾。
166.在步骤204中,将当前视频帧存储至gop缓存队列的队尾。
167.在步骤205中,对gop缓存队列中的视频帧进行解码处理,将解码得到的视频帧作为截图结果。
168.其中,在步骤202中,将步骤201中得到的多个视频帧一一发送到gop缓存队列,根据nal的帧头结构来判断当前视频帧是否为i帧。当采用h.264进行视频编码时,若unit_type数值为5,视频帧为i帧。当采用hevc进行视频编码时,若unit_type数值在16~23之间,则视频者为i帧。
169.如果当前视频帧是i帧,则先清空gop缓存队列,目的是保证gop缓存队列里最多不会存储超过一个gop的数据。将当前视频帧送入解码器中解码,解码得到的可能是yuv数据(裸数据),也可能仅含有yuv数据的索引值。
170.需要说明的是,在外部截图时,响应于截图指令,会将解码线程对应的第二视频帧队列中的数据复制到gop缓存队列,同时启动新的线程,即截图线程,以异步执行截图过程。这是因为视频的解码线程还在执行,所以需要将第二视频帧队列中的数据复制到gop缓存队列中,避免截图线程执行的过程中,解码线程对gop缓存队列中的数据进行增删操作而导致截图结果不准确,同时,也可以避免阻塞当前视频的解码线程。
171.之后,启动软解码器,如图13所示,从gop缓存队列的队首遍历至队尾倒数第二帧,
若当前视频帧为gop缓存队列中最后一帧的非参考帧,丢弃非参考帧,不送入软解码器,继续判断下一帧;若当前视频帧为最后一帧的参考帧,将参考帧送入软解码器进行解码,从而得到最后一帧对应的解码后的视频帧,将其作为截图输出。由于使用的是软解码器,可以保证解码后得到的是yuv数据而非数据索引。
172.最后,清除gop缓存队列中的数据,关闭软解码器和截图线程。
173.可以看出,本技术实施例通过将第二视频帧队列中的数据复制到gop缓存队列,并异步执行截图线程,从而避免了解码线程和截图线程的相互影响,提高了截图的精确性,且无需额外的网络开销;在对截图相关的视频帧进行解码处理的过程中调用软解码器,直接获取yuv数据,保证截图线程的正常进行;跳过非参考帧不解码,提高了解码的效率。因为在截图过程中,不需要同步对应的音频,保证输出的截图一定是当前的视频帧,提高了截图的精确性。
174.下面继续说明本技术实施例提供的视频截图装置455实施为软件模块的示例性结构。在一些实施例中,如图4所示,存储在存储器450的视频截图装置455中的软件模块可以包括:接收模块4551、缓存模块4552、查询模块4553和解码模块4554。
175.接收模块4551,用于接收针对视频的截图指令;缓存模块4552,用于基于第一视频帧队列缓存视频的播放过程中的视频帧;查询模块4553,用于查询第一视频帧队列,以确定与截图指令的时间戳对应的目标帧、以及与目标帧对应的参考帧;解码模块4554,用于调用软解码器,以基于参考帧对目标帧进行解码处理,并将解码得到的视频帧作为响应截图指令的截图结果输出。
176.在一些实施例中,缓存模块4552,还用于对视频的文件进行解复用处理,得到多个视频帧;将属于同一序列的视频帧缓存到第二视频帧队列,其中,第二视频帧队列用于供解码线程调用硬解码器或软解码器进行解码播放。
177.在一些实施例中,缓存模块4552,还用于将第二视频帧队列中的视频帧复制到第一视频帧队列。
178.在一些实施例中,缓存模块4552,还用于当接收到截图指令时,启动截图线程,其中,截图线程区别于解码线程;通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列。
179.在一些实施例中,缓存模块4552,还用于当视频播放到视频的感兴趣的时间点时,启动截图线程,截图线程区别于解码线程;通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列;其中,感兴趣的时间点包括以下至少之一:根据多个用户的观看数据统计得到的多个用户均感兴趣的时间点、视频中与用户画像匹配的时间点。
180.在一些实施例中,缓存模块4552,还用于当视频播放到预设的时间点时,启动截图线程,截图线程区别于解码线程;通过截图线程将第二视频帧队列中的视频帧复制到第一视频帧队列;其中,视频中均匀分布有多个预设的时间点,或者,视频的每个部分设置有数量与部分的信息量正相关的预设的时间点。
181.在一些实施例中,缓存模块4552,还用于立即释放截图线程;或者,继续运行截图线程,当视频播放到最后一个预设的时间点时释放截图线程。
182.在一些实施例中,缓存模块4552,还用于当视频帧为帧内编码帧时,清空第一视频帧队列中的视频帧,并将所述视频帧存储至所述第一视频帧队列中;当视频帧为前向预测
编码帧或双向预测编码帧时,将视频帧存储至第一视频帧队列的队尾。
183.在一些实施例中,软解码器是通过截图线程调用的;解码模块4554,还用于当视频的解码线程是通过调用软解码器进行解码播放时,通过截图线程释放软解码器,以使解码线程调用软解码器进行解码播放;当视频的解码线程是通过硬解码器进行解码播放时,通过截图线程释放软解码器。
184.在一些实施例中,查询模块4553,还用于确定第一视频帧队列中与截图指令的时间戳一致的时间戳所对应的目标帧;当目标帧的类型为前向预测编码帧时,将目标帧前向的帧内编码帧或前向预测编码帧作为目标帧的参考帧;当目标帧的类型为双向预测编码帧时,将目标帧前向的视频帧和/或目标帧后向的视频帧作为目标帧的参考帧;其中,第一视频帧队列包括目标帧、参考帧以及目标帧的非参考帧,非参考帧是在对目标帧进行解码处理的过程中不需要解码的视频帧。
185.在一些实施例中,解码模块4554,还用于根据目标帧中每个像素点的运动矢量,确定参考帧中对应像素点的向量坐标;将目标帧中每个像素点的预测差值与参考帧中对应像素点的向量坐标相加,得到目标帧中每个像素点的向量坐标。
186.在一些实施例中,解码模块4554,还用于当目标帧的类型为帧内编码帧时,通过软解码器对帧内编码帧进行解码处理,将解码得到的视频帧作为响应截图指令的截图结果输出。
187.在一些实施例中,当截图指令用于获取动图时,解码模块4554,还用于根据动图的时长确定需要解码的视频帧的目标帧数、以及截图的间隔时长;根据间隔时长,通过软解码器对第一视频帧队列中的目标帧进行解码处理,直至解码得到的目标帧数的视频帧的帧数达到目标帧数;将解码得到的视频帧合成为动图输出。
188.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行本技术实施例上述的视频截图方法。
189.本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的视频截图方法,例如,如图5示出的视频截图方法。
190.在一些实施例中,计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、闪存、磁表面存储器、光盘、或cd

rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
191.在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
192.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
193.作为示例,可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
194.综上所述,本技术实施例通过将第二视频帧队列中的数据复制到gop缓存队列,并异步执行截图线程,从而避免了解码线程和截图线程的相互影响,提高了截图的精确性;当在线播放视频时,截图无需再次请求视频文件,可减少网络开销;在对截图相关的视频帧进行解码处理的过程中调用软解码器,直接获取yuv数据,保证截图线程的正常进行;跳过非参考帧不解码,提高了解码的效率。因为在截图过程中,不需要同步对应的音频,保证了输出的目标帧是符合截图意图的,提高了截图的精确性。
195.以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献