CN115209216A - 视频的播放方法、装置及电子设备 - Google Patents

视频的播放方法、装置及电子设备 Download PDF

Info

Publication number
CN115209216A
CN115209216A CN202210715730.4A CN202210715730A CN115209216A CN 115209216 A CN115209216 A CN 115209216A CN 202210715730 A CN202210715730 A CN 202210715730A CN 115209216 A CN115209216 A CN 115209216A
Authority
CN
China
Prior art keywords
decoding
video
thread
queue
rendering
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.)
Pending
Application number
CN202210715730.4A
Other languages
English (en)
Inventor
刘畅
黄诚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Uniview Technologies Co Ltd
Original Assignee
Zhejiang Uniview Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Uniview Technologies Co Ltd filed Critical Zhejiang Uniview Technologies Co Ltd
Priority to CN202210715730.4A priority Critical patent/CN115209216A/zh
Publication of CN115209216A publication Critical patent/CN115209216A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44004Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/41Structure of client; Structure of client peripherals
    • H04N21/426Internal components of the client ; Characteristics thereof
    • H04N21/42607Internal components of the client ; Characteristics thereof for processing the incoming bitstream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4331Caching operations, e.g. of an advertisement for later insertion during playback
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本申请公开了一种视频的播放方法、装置及电子设备,属于多媒体技术领域。该方法包括:通过解码线程对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据;将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,缓存空间是解码过程中用于缓存解码数据的空间,虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;在执行渲染线程的过程中,通过渲染线程基于虚拟缓存队列,对第一解码数据进行读取并渲染,得到视频画面;播放视频画面。本申请实施例不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗。

Description

视频的播放方法、装置及电子设备
技术领域
本申请涉及多媒体技术领域,特别涉及一种视频的播放方法、装置及电子设备。
背景技术
随着多媒体信息技术的发展,视频逐步走向高清晰度、高流畅性能的发展方向,即视频的分辨率和帧率越来越高。在一些场景中,电子设备可以通过GPU(GraphicProcessing Unit,图形处理器)进行视频播放。
目前,在通过GPU进行视频播放的过程中,通常是通过解码线程对待解码的视频帧进行解码,得到解码数据,然后将解码数据转存至转存空间中,通过渲染线程从转存空间中读取解码数据,渲染解码数据,得到视频画面,播放该视频画面,从而完成视频播放。
但是,由于需要将解码数据进行转存,该操作涉及到对数据的拷贝,从而增加了解码线程的负担,降低了处理效率。
发明内容
本申请实施例提供了一种视频的播放方法、装置及电子设备可以解决相关技术中解码线程负担重,导致处理效率低的问题。所述技术方案如下:
第一方面,提供了一种视频的播放方法,所述方法包括:
通过解码线程对视频流中待解码的视频帧进行解码,得到所述视频帧的第一解码数据;
将所述第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,所述缓存空间是解码过程中用于缓存解码数据的空间,所述虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;
在执行渲染线程的过程中,通过所述渲染线程基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面;
播放所述视频画面。
作为本申请的一个示例,所述在执行渲染线程的过程中,基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面,包括:
在执行所述渲染线程的过程中,从所述虚拟缓存队列中读取所述目标缓存位置标识;
从所述目标缓存位置标识指示的缓存空间中获取所述第一解码数据;
通过所述渲染线程对所述第一解码数据进行渲染,得到所述视频画面。
作为本申请的一个示例,所述方法还包括:
在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时;
基于所述历史最大解码耗时、所述视频流的帧率和预设数量,确定第一数值,所述第一数值是对所述虚拟缓存队列的大小进行调整后,所述虚拟缓存队列所需占用的显存空间的数量,所述预设数量为在所述虚拟缓存队列中冗余设置的显存空间的数量;
根据所述第一数值,调整所述虚拟缓存队列的大小。
作为本申请的一个示例,所述在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时,包括:
在视频播放过程中,若所述解码条件未发生变化,则将在第一时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第一时长内至少解码至少一个I帧;在视频播放过程中,若所述解码条件发生变化,则确定解码超时次数和/或空队列出现次数,所述解码超时次数是在第二时长内出现解码耗时大于在所述解码条件未发生变化情况下的历史最大解码耗时的次数,所述空队列出现次数是在所述第二时长内进行渲染时所述虚拟缓存队列为空的次数;
在确定所述解码超时次数和所述空队列出现次数的情况下,若所述解码超时次数大于或等于第一次数阈值,和/或,所述空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时。
作为本申请的一个示例,所述若所述解码超时次数大于或等于第一次数阈值,和/或,所述空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时,包括:
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第二时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时;或者,
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第三时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第三时长为解码条件发生变化后选取的时长。
作为本申请的一个示例,所述基于所述历史最大解码耗时、所述视频流的帧率和预设数量,确定第一数值,包括:
基于所述历史最大解码耗时、所述视频流的帧率和所述预设数量,通过第一公式确定所述第一数值,所述第一公式为:
N=TD max/(1000/Rate)+X
其中,所述N为所述第一数值,所述Rate为所述视频流的帧率,所述TD max为所述历史最大解码耗时,所述X为所述预设数量。
作为本申请的一个示例,通过解码线程对视频流中待解码的视频帧进行解码之前,还包括:
获取第二数值,所述第二数值是所述虚拟缓存队列中当前缓存的解码数据的个数;
在所述第二数值小于第一数量阈值或大于第二数量阈值的情况下,基于基准帧间间隔、所述第二数值以及第一数值,确定所述解码线程的处理时间间隔以及确定所述渲染线程的处理时间间隔,所述基准帧间间隔基于所述视频流的帧率确定,所述第一数值是所述虚拟缓存队列当前所占用的显存空间的数量,所述处理时间间隔是线程处理两个相邻视频帧的间隔时间;
按照所述解码线程的处理时间间隔,调整所述解码线程;
所述在执行渲染线程的过程中,基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染之前,还包括:
按照所述渲染线程的处理时间间隔,调整所述渲染线程。
作为本申请的一个示例,所述基于基准帧间间隔、所述第二数值以及第一数值,确定所述解码线程的处理时间间隔以及确定所述渲染线程的处理时间间隔,包括:
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第二公式确定所述解码线程的处理时间间隔,所述第二公式为:
TDspan=Ts-[(N-X-Cnt)*Ts]/ScaleD
其中,所述TDspan为所述解码线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleD为第一调控系数,所述X为预设数量。
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第三公式确定所述渲染线程的处理时间间隔,所述第三公式为:
TRspan=Ts+[(N-X-Cnt)*Ts]/ScaleR
其中,所述TRspan为所述渲染线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleR为第二调控系数,所述X为所述预设数量。
另一方面,提供了一种视频的播放装置,所述装置包括:
解码模块,用于通过解码线程对视频流中待解码的视频帧进行解码,得到所述视频帧的第一解码数据;
映射模块,用于将所述第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,所述缓存空间是解码过程中用于缓存解码数据的空间,所述虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;
渲染模块,用于在执行渲染线程的过程中,通过所述渲染线程基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面;
播放模块,用于播放所述视频画面。
作为本申请的一个示例,所述渲染模块包括:
读取子模块,用于在执行所述渲染线程的过程中,从所述虚拟缓存队列中读取所述目标缓存位置标识;
获取子模块,用于从所述目标缓存位置标识指示的缓存空间中获取所述第一解码数据;
渲染子模块,用于通过所述渲染线程对所述第一解码数据进行渲染,得到所述视频画面。
作为本申请的一个示例,所述装置还包括:
第一确定模块,用于在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时;
第二确定模块,用于基于所述历史最大解码耗时、所述视频流的帧率和预设数量,确定第一数值,所述第一数值是对所述虚拟缓存队列的大小进行调整后,所述虚拟缓存队列所需占用的显存空间的数量,所述预设数量为在所述虚拟缓存队列中冗余设置的显存空间的数量;
第一调整模块,用于根据所述第一数值,调整所述虚拟缓存队列的大小。
作为本申请的一个示例,所述第一确定模块用于:
在视频播放过程中,若所述解码条件未发生变化,则将在第一时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第一时长内至少解码至少一个I帧;在视频播放过程中,若所述解码条件发生变化,则确定解码超时次数和/或空队列出现次数,所述解码超时次数是在第二时长内出现解码耗时大于在所述解码条件未发生变化情况下的历史最大解码耗时的次数,所述空队列出现次数是在所述第二时长内进行渲染时所述虚拟缓存队列为空的次数;
在确定所述解码超时次数和所述空队列出现次数的情况下,若所述解码超时次数大于或等于第一次数阈值,和/或,所述空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时。
作为本申请的一个示例,所述第一确定模块用于:
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第二时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时;或者,
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第三时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第三时长为解码条件发生变化后选取的时长。
作为本申请的一个示例,所述第二确定模块用于:
基于所述历史最大解码耗时、所述视频流的帧率和所述预设数量,通过第一公式确定所述第一数值,所述第一公式为:
N=TD max/(1000/Rate)+X
其中,所述N为所述第一数值,所述Rate为所述视频流的帧率,所述TD max为所述历史最大解码耗时,所述X为所述预设数量。
作为本申请的一个示例,所述装置还包括:
获取模块,用于获取第二数值,所述第二数值是所述虚拟缓存队列中当前缓存的解码数据的个数;
第三确定模块,用于在所述第二数值小于第一数量阈值或大于第二数量阈值的情况下,基于基准帧间间隔、所述第二数值以及第一数值,确定所述解码线程的处理时间间隔以及确定所述渲染线程的处理时间间隔,所述基准帧间间隔基于所述视频流的帧率确定,所述第一数值是所述虚拟缓存队列当前所占用的显存空间的数量,所述处理时间间隔是线程处理两个相邻视频帧的间隔时间;
第二调整模块,用于按照所述解码线程的处理时间间隔,调整所述解码线程;
所述装置还包括:
第三调整模块,用于按照所述渲染线程的处理时间间隔,调整所述渲染线程。
作为本申请的一个示例,所述第三确定模块用于:
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第二公式确定所述解码线程的处理时间间隔,所述第二公式为:
TDspan=Ts-[(N-X-Cnt)*Ts]/ScaleD
其中,所述TDspan为所述解码线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleD为第一调控系数,所述X为预设数量。
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第三公式确定所述渲染线程的处理时间间隔,所述第三公式为:
TRspan=Ts+[(N-X-Cnt)*Ts]/ScaleR
其中,所述TRspan为渲染线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleR为第二调控系数,所述X为所述预设数量。
第三方面,提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的用于视频的播放的方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述第一方面所述的用于视频的播放的方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的用于视频的播放的方法。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
本申请实施例提供的技术方案带来的有益效果是:
在本申请实施例中,由于在进行视频播放过程中,在得到第一解码数据后,并不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗,同时还提高了处理效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的一种视频的播放方法流程图。
图2是根据一示例性实施例示出的一种对虚拟缓存队列的大小进行调整的流程图。
图3是根据另一示例性实施例示出的一种视频的播放方法流程图。
图4是根据另一示例性实施例示出的一种视频的播放方法流程图。
图5是根据一示例性实施例示出的一种视频的播放装置的结构示意图。
图6是根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
应当理解的是,本申请提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一种实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
在对本申请实施例提供的一种视频的播放方法进行详细地解释说明之前,先对本申请实施例涉及的应用场景进行解释说明。
随着多媒体技术的发展,视频的应用领域越来越广泛,比如,可以应用于网络监控、视频直播等各个领域,与此同时,视频也在逐步向高清晰度、高流畅性方向发展,即视频分辨率、帧率越来越高。比如,视频的分辨率从标清向高清、超高清演变,帧率从25fps(Frames Per Second,每秒传输帧数)上调至50fps/60fps。而越来越高的分辨率和帧率对视频的解码器的运算能力提出了更高的要求。由于GPU(Graphic Processing Unit,图形处理器)在对视频解码时,有着运算速度快、解码效率高的特点,因此,为了使得对视频解码效率更高,通常会通过GPU对视频进行播放。
在使用GPU播放视频的过程中,GPU可以通过解码线程对待解码的视频帧进行解码,得到解码数据,然后将解码数据转存至转存空间中,通过渲染线程从转存空间中读取解码数据,渲染解码数据,得到视频画面,播放该视频画面,从而完成视频播放。
但是,由于需要将解码数据进行转存,该操作涉及到对数据的拷贝,而解码数据包括大量的图像数据,因此,拷贝操作将会增加解码线程的负担,造成GPU性能消耗,进而降低了处理效率。另外,由于在视频播放过程中,可能没有缓存足够多的解码数据,从而导致视频播放出现卡顿、视频画面出现不完整的现象。再者,由于渲染线程在进行渲染时,可能会渲染不及时,从而造成缓存空间写满,一方面降低了处理效率,另一方面导致解码前的收流业务受阻,进而导致丢失关键帧,后续出现画面跳变的情况。
基于这样的应用场景,本申请实施例提供了一种能够降低解码线程负担,提高处理效率的视频的播放方法。
图1是根据一示例性实施例示出的一种视频的播放方法流程图,本实施例以该视频的播放方法应用于电子设备中进行举例说明,该视频的播放方法可以包括如下几个步骤:
步骤101:电子设备通过解码线程对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据。
由于电子设备在通过解码线程对视频帧进行解码的过程中,通常是在解码线程对应的解码空间中进行的,而解码空间可以是由多个显存空间合并后得到,因此,电子设备在通过解码线程对视频帧进行解码的过程中,可以从解码线程对应的解码空间中,获取处于空闲(Free)状态的目标显存空间,并将该目标显存空间进行标记,以标识占用该目标显存空间,此时该目标显存空间的状态由空闲状态切换为占用(lock)状态。
需要说明的是,在目标显存空间处于占用状态的情况下,该目标显存空间可以用于存储解码过程的中间数据,在目标显存空间被标识为占用状态后,该目标显存空间处于解码线程的控制下,外部线程不可对该目标显存空间进行访问。
在一种实施例中,电子设备通过解码线程在目标显存空间中对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据后,该第一解码数据缓存在目标显存空间中,同时电子设备可以将目标显存空间的状态由占用状态切换为数据(data)状态。
需要说明的是,在目标显存空间的状态切换为数据状态后,解码线程释放对该目标显存空间的控制,目标显存空间可用于下一步地存储操作和渲染操作。
在一种实施例中,该目标显存空间的数量可以为一个也可以为多个,且电子设备在通过解码线程对视频帧进行解码的过程中,可以从解码线程对应的解码空间中先获取一个空闲状态的显存空间,在解码过程中如果需要更多的显存空间,则继续从解码线程的解码空间中获取处于空闲状态的其他显存空间。
需要说明的是,电子设备通过解码线程对视频帧进行解码的具体操作可以参考相关技术,本申请实施例对此不再进行一一赘述。
由于不同的解码线程所对应的解码空间的大小不同,因此,电子设备在将视频流中待解码的视频帧行解码之前,还可以设置解码线程对应的解码空间的大小。
作为一种示例,由于每个视频流都具有数据头,且数据头包括视频流的编码信息、视频流的帧率等信息。因此,电子设备可以基于视频流的数据头,初始化执行解码线程的硬件设备的参数;基于该硬件设备的参数,查询解码线程进行解码时所需的解码空间的大小;按照查询到的解码时所需解码空间的大小,为解码线程分配对应大小的解码空间。
由于解码空间可以是由多个显存空间合并后得到,因此,本申请实施例中可以通过显存空间的数量来反映解码空间的大小。即查询解码线程进行解码时所需的解码空间的大小可以为查询解码时所需的显存空间的个数。
在一种实施环境中,执行解码线程的硬件设备可以为电子设备中的解码器,电子设备在通过解码线程对视频帧进行解码之前,可以初始化解码会话,然后创建硬件设备,将硬件句柄共享给解码会话,并初始化通用分配器;基于解码会话创建解码器,并获取解码视频流的数据头,然后基于视频流的数据头初始化解码器参数;根据解码器的参数查询并分配一定数量的显存空间,然后使用解码器参数初始化解码器。
在一种实施环境中,电子设备初始化解码会话的程序可以为:MFXInit(impl,ver,&m_session);电子设备基于视频流的数据头初始化解码器参数的程序可以为:MFXVideoDECODE_DecodeHeader(m_session,bs,par);电子设备根据解码器的参数查询并分配一定数量的显存空间的程序可以为:MFXVideoDECODE_QueryIOSurf(m_session,par,request);电子设备使用解码器的参数初始化解码器的程序可以为:MFXVideoDECODE_Init(m_session,par)。
在一种实施环境中,电子设备获取待解码的视频帧,获取空闲状态的目标显存空间,并在解码完成后释放对目标显存空间的控制的程序可以为:MFXVideoDECODE_DecodeFrameAsync(m_session,bs,surface_work,surface_out,syncp)。
步骤102:电子设备将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中。
需要说明的是,缓存空间是解码过程中用于缓存解码数据的空间,虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识。且该缓存空间为解码线程对应的解码空间中的一部分空间。
还需要说明的是,该缓存位置标识用于标识未渲染的解码数据所在的缓存空间的位置,该缓存位置标识可以为未渲染的解码数据所在缓存空间的缓存地址、资源标识符等中的至少一个。
由上述可知,目标显存空间可能包括一个显存空间,也可能包括多个显存空间,因此,缓存空间包括的显存空间的数量可能为一个也可能为多个。
为了避免对解码数据进行转存,也为了在执行渲染线程的过程中,能够快速获取到第一解码数据,电子设备可以将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中。
在一种实施例中,该虚拟缓存队列中可以包括写指针和缓存帧计数器等关键字段。写指针用于指示第一解码数据所在的缓存空间的目标缓存位置标识写入虚拟缓存队列中的位置;缓存帧计数器用于记录映射至虚拟缓存队列中的缓存位置标识的数量。
由于虚拟缓存队列中可以包括写指针,因此,电子设备可以将第一解码数据所在的缓存空间的目标缓存位置标识写入写指针所指示的位置上。
由于写指针用于指示第一解码数据所在的缓存空间的目标缓存位置标识写入虚拟缓存队列中的位置,因此,为了将下一次解码得到解码数据所在的缓存空间的缓存位置标识顺利写入虚拟缓存队列,电子设备在将第一解码数据所在缓存空间的目标缓存位置标识写入虚拟缓存队列后,将写指针的位置按照虚拟缓存队列的队列顺序向后移动一位。该队列顺序为队头向队尾的方向。
为了清楚当前虚拟缓存队列中记录的未渲染的缓存位置标识的数量,在虚拟缓存队列中每写入一个缓存位置标识,即写指针每移动一位,可以将缓存帧计数器在当前记录的数值上加一。
在一种实施例中,电子设备将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中的过程中,还可以对缓存空间的状态进行管理,即电子设备可以将缓存空间包括的显存空间的状态由数据状态切换为控制(Ctrl)状态。
需要说明的是,在缓存空间包括的显存空间的状态为控制状态的情况下,该缓存空间中的显存空间不可以被解码线程使用。
在一种实施例中,电子设备通过解码线程对视频流中待解码的视频帧进行解码的操作之前,还可以先创建虚拟缓存队列,该虚拟缓存队列可以为环形缓存队列。
需要说明的是,虚拟缓存队列所需的空间大小可以根据经验事先进行设置,且由于可以通过显存空间数量反应虚拟队列所需的空间大小,因此,虚拟缓存队列的空间大小可以为预设参考数值个显存空间的空间大小,该预设参考数值可以为3、4、5等等。该预设参考数值个显存空间中,设置有预设数量个冗余的显存空间。该预设数量个冗余的显存空间中,a个显存空间可以用于渲染解码数据时被占用,b个显存空间可以用于应对线程抖动,预设参考数值个显存空间中剩余显存空间可以用于抵抗解码抖动。
在一种实施例中,该预设数量个显存空间不仅可以被渲染线程所占用,在预设参考数值个显存空间中剩余显存空间不足以抵抗解码抖动的情况下,该预设数量个显存空间中的部分或全部显存空间可以用于抵抗解码抖动。
在一种实施例中,虚拟缓存队列所需空间可以从解码线程进行解码时所需的解码空间中分配。但是为了保证在进行解码的过程中,解码线程具有足够大的解码空间,也为了能够有足够大的空间创建虚拟缓存队列,电子设备在设置解码线程对应的解码空间的大小时,不仅可以按照上述方式查询到的解码时所需解码空间的大小为解码线程分配解码空间,还可以按照查询到的解码时所需的解码空间的大小,以及虚拟缓存队列所需的空间大小为解码线程分配对应的解码空间。
步骤103:电子设备在执行渲染线程的过程中,通过渲染线程基于虚拟缓存队列,对第一解码数据进行读取并渲染,得到视频画面。
由于虚拟缓存队列中存储有未渲染的解码数据的缓存位置标识,因此,电子设备在执行渲染线程的过程中,需要通过渲染线程基于虚拟缓存队列,对第一解码数据进行读取,并在读取第一解码数据后,基于第一解码数据进行渲染。
作为一种示例,电子设备在执行渲染线程的过程中,基于虚拟缓存队列,对第一解码数据进行读取并渲染,得到视频画面的操作包括:在执行渲染线程的过程中,从虚拟缓存队列中读取目标缓存位置标识;从目标缓存位置标识指示的缓存空间中获取第一解码数据;通过渲染线程对第一解码数据进行渲染,得到视频画面。
需要说明的是,该虚拟缓存队列中还包括读指针,因此,电子设备执行渲染线程的过程中,可以获取虚拟缓存队列中的读指针所指示的位置;从位置中读取目标缓存位置标识。
在一种实施例中,为了顺利读取下一次渲染时所需的虚拟数据,电子设备在从读指针所指示的位置中读取目标缓存位置标识后,可以将读指针的位置按照虚拟缓存队列的队列顺序向后移动一位。
为了清楚当前虚拟缓存队列中记录的未渲染的解码数据所在缓存空间的缓存位置标识的数量,电子设备每读取一个缓存位置标识,即读指针每移动一位,通过该缓存帧计数器将当前记录的数值减一。
需要说明的是,在缓存空间包括的显存空间的状态为控制状态的情况下,渲染线程可以从缓存空间包括的显存空间中读取第一解码数据,并在读取完成后,将缓存空间的状态切换为空闲状态。
在一种实施例中,电子设备通过渲染线程对第一解码数据进行渲染,得到视频画面的操作可以参考相关技术,本申请实施例对此不再进行一一赘述。
步骤104:电子设备播放视频画面。
需要说明的是,电子设备播放视频画面的操作可以参考相关技术,本申请实施例对此不再进行一一赘述。
在本申请实施例中,由于在进行视频播放过程中,电子设备在得到第一解码数据后,并不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗,同时还提高了处理效率。
由于电子设备在进行视频播放过程中,虚拟缓存队列当前的空间大小可能无法抵抗解码抖动,因此,电子设备可以在视频播放过程中对虚拟缓存队列的大小进行调整。参见图2,该调整过程包括如下步骤。
步骤201:在视频播放过程中,电子设备根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时。
作为一种示例,该解码条件的变化情况包括解码参数和/或视频场景是否发生变化。
由于解码耗时与解码抖动相关,解码耗时越长越可能发生解码抖动,且解码耗时越长说明数据量大,所需缓存空间越大,对应的缓存位置标识数量也越多,所需虚拟缓存队列的空间较多。而且在不同的解码条件的情况下,电子设备解码一帧视频帧的历史最大解码耗时不同。因此,电子设备需要根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时。
作为一种示例,电子设备在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时的操作包括:在视频播放过程中,若解码条件未发生变化,则将在第一时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时,该第一时长内至少解码至少一个I帧且所述第一时长内解码条件不变;在视频播放过程中,若解码条件发生变化,则确定解码超时次数和/或空队列出现次数,该解码超时次数是在第二时长内出现解码耗时大于在解码条件未发生变化情况下的历史最大解码耗时的次数,空队列出现次数是在第二时长内进行渲染时虚拟缓存队列为空的次数;在确定解码超时次数和空队列出现次数的情况下,若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则重新确定解码条件发生变化后对应的历史最大解码耗时。
由于I帧包含一帧图像的完整编码信息,解码I帧的解码耗时相对较长,容易成为解码抖动的关键点,因此,可以选择至少解码至少一个I帧的时长为第一时长。
在一种实施例中,电子设备可以确定解码超时次数和/或空队列出现次数,在电子设备确定解码超时次数,未确定空队列次数的情况下,若解码超时次数大于或等于第一次数阈值,则重新确定解码条件发生变化后对应的历史最大解码耗时。在电子设备确定空队列出现次数,未确定解码超时次数的情况下,若空队列出现次数大于或等于第二次数阈值,则重新确定解码条件发生变化后对应的历史最大解码耗时。
由于通常情况下,解码耗时会稳定在一定范围内,若解码条件发生变化,则解码过程中可能出现解码耗时大于解码条件未发生变化情况下的历史最大解码耗时的情况,这样的情况下,可能会导致虚拟缓存队列出现空队列的情况。如果出现解码超时的次数较多和/或空队列出现的次数较多,则说明解码不稳定,需要重新确定历史最大解码耗时。
需要说明的是,第一次数阈值和第二次数阈值均根据需求事先进行设置,比如,该第一次数阈值可以为3次、5次等等,第二次数阈值可以为3次、5次等等。且第一次数阈值可以与第二次数阈值相同,也可以不相同。
由上述可知,虚拟缓存队列中包括写指针、读指针和缓存帧计数器等关键字段,因此,电子设备可以在写指针与读指针均指向相同的位置的情况下,确定虚拟缓存队列为空队列。或者,电子设备在虚拟缓存队列中未读取到任何缓存位置标识的情况下,确定虚拟缓存队列为空队列。或者,电子设备可以在缓存帧计数器所记录的数值为0的情况下,确定虚拟缓存队列为空队列。
在一种实施例中,若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则电子设备可以将在第二时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时;或者,若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则电子设备可以将在第三时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时,该第三时长为解码条件发生变化后选取的时长。
需要说明的是,第三时长可以与第二时长重叠,也可以不与得让时长重叠,本申请实施例对此不做具体限制。
步骤202:电子设备基于历史最大解码耗时、视频流的帧率和预设数量,确定第一数值。
需要说明的是,该第一数值是对虚拟缓存队列的大小进行调整后,该虚拟缓存队列所需占用的显存空间的数量,该预设数量为在虚拟缓存队列中冗余设置的显存空间的数量。
作为一种示例,电子设备可以基于历史最大解码耗时、视频流的帧率和预设数量,通过第一公式(1)确定第一数值,该第一公式为:
N=TD max/(1000/Rate)+X (1)
需要说明的是,在上述第一公式(1)中,N为第一数值,Rate为视频流的帧率,TD max为历史最大解码耗时,X为预设数量。
步骤203:电子设备根据第一数值,调整虚拟缓存队列的大小。
由于第一数值是指对虚拟缓存队列的大小进行调整后,该虚拟缓存队列所需占用的显存空间的数量,因此,电子设备可以在虚拟缓存队列当前所占的显存空间的数量基础上,将显存空间的数量增加至第一数值。
在一种实施例中,由于虚拟缓存队列所占空间大小与解码线程对应的解码空间的大小有关,因此,电子设备根据第一数值,调整虚拟缓存队列的大小的同时,也可以同步调整解码线程对应的解码空间的大小。
在本申请实施例中,由于可以根据解码线程在预设时间内解码一帧视频帧的历史最大解码耗时动态调整虚拟缓存队列的大小,并在解码参数和/或视频场景是否发生变化的情况下,对虚拟缓存队列的空间进行扩展,从而合理化分配缓存资源,并改善了视频播放效果,达到视频流畅播放的效果。
图3是根据另一示例性实施例示出的一种视频的播放方法流程图,本实施例以该视频的播放方法应用于电子设备中进行举例说明,该视频的播放方法可以包括如下几个步骤:
步骤301:电子设备获取第二数值,该第二数值是虚拟缓存队列中当前缓存的解码数据的个数。
由上述可知,虚拟缓存队列中可以包括缓存帧计数器,且缓存帧计数器用于记录虚拟缓存队列中存储的未渲染的缓存位置标识的个数,因此,电子设备可以直接获取缓存帧计数器所记录的数值,将获取到的数值确定为第二数值。
在一种实施例中,电子设备不仅可以通过上述方式获取第二数值,还可以通过其他方式获取,比如,电子设备可以对虚拟缓存队列中存储的缓存位置标识进行遍历,得到第二数值。
步骤302:在第二数值小于第一数量阈值或大于第二数量阈值的情况下,电子设备确定解码线程的处理时间间隔以及确定渲染线程的处理时间间隔,该处理时间间隔是线程处理两个相邻视频帧的间隔时间。
由于视频的流畅播放与解码线程的处理时间间隔和渲染线程的处理时间间隔有关,且在第二数值小于第一数量阈值的情况下,说明当前渲染较快,而解码较慢,这样的情况可以会导致视频播放出现卡顿或跳帧的情况,在第二数值大于第二数量阈值的情况下,说明渲染较慢,而解码较快,这样的情况很容易造成虚拟缓存队列拥堵,从而出现视频播放跳帧的情况。因此,为了视频播放的流畅,电子设备可以确定解码线程的处理时间间隔以及确定渲染线程的处理时间间隔。
需要说明的是,该第一数量阈值和第二数量阈值根据需求事先进行设置,比如,该第一数量阈值可以为1、2、3等等,该第二数量阈值可以为7、8、9等等。
作为一种示例,电子设备确定解码线程的处理时间间隔的操作包括:基于基准帧间间隔、第二数值以及第一数值,确定解码线程的处理时间间隔,基准帧间间隔基于视频流的帧率确定,第一数值是虚拟缓存队列当前所占用的显存空间的数量。
作为一种示例,电子设备可以基于基准帧间间隔、第二数值以及第一数值,通过下述第二公式(2)确定解码线程的处理时间间隔,该第二公式为:
TDspan=Ts-[(N-X-Cnt)*Ts]/ScaleD (2)
需要说明的是,TDspan为解码线程的处理时间间隔,Ts为基准帧间间隔,Cnt为第二数值,N为第一数值,ScaleD为第一调控系数,X为预设数量。
作为一种示例,电子设备确定渲染线程的处理时间间隔的操作包括:基于基准帧间间隔、第二数值以及第一数值,确定渲染线程的处理时间间隔,基准帧间间隔基于视频流的帧率确定,第一数值是虚拟缓存队列所占用的显存空间的数量。
作为一种示例,电子设备基于基准帧间间隔、第二数值以及第一数值,通过下述第三公式(3)确定渲染线程的处理时间间隔,该第三公式为:
TRspan=Ts+[N-X-Cnt)*Ts]/ScaleR (3)
需要说明的是,述TRspan为渲染线程的处理时间间隔,Ts为基准帧间间隔,Cnt为第二数值,N为第一数值,ScaleR为第二调控系数,X为预设数量。
由上述可知,虚拟缓存队列所占用的显存空间的数量可能会发生调整,即第一数值N的具体取值会发生变动,因此,电子设备在确定解码线程的处理时间间隔和渲染线程的处理时间间隔的情况下,还需要确定虚拟缓存队列当前情况下所占用的显存空间的数量。
由于视频流的帧率是确定的,因此,电子设备可以基于视频流的帧率,通过下述第四公式(4)确定基准帧间间隔,该第四公式为:
Ts=1000/Rate (4)
需要说明的是,在上述第四公式(4)中,Ts为基准帧间间隔,单位为ms(毫秒),Rate为视频流的帧率。
在一种实施环境中,若视频流的帧率为25fps,则基准帧间间隔为40ms,在虚拟缓存队列中当前缓存的解码数据的个数为0时,电子设备需要将解码线程的处理时间间隔较大幅度地进行调整,比如,按照上述第二公式将解码线程的处理时间间隔调整至32ms之间,电子设备可以将渲染线程的处理时间间隔较小幅度地进行调整,比如,按照上述第三公式,将渲染线程的处理时间间隔调整至42ms,以便应对下一次的解码抖动。
步骤303:电子设备按照解码线程的处理时间间隔,调整解码线程。
在一种实施例中,电子设备按照解码线程的处理时间间隔,调整解码线程是指每个解码线程执行一次解码任务,在完成一次解码任务后,经过解码时长的处理时间间隔,再次启动解码线程。
步骤304:电子设备通过解码线程对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据。
步骤305:电子设备将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中。
需要说明的是,缓存空间是解码过程中用于缓存解码数据的空间,该虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识。
还需要说明的是,上述步骤304的操作可以参考上述步骤101的操作,步骤305的操作可以参考上述步骤102的操作,本申请实施例对此不再进行一一赘述。
步骤306:电子设备按照渲染线程的处理时间间隔,调整渲染线程。
在一种实施例中,电子设备按照渲染线程的处理时间间隔,调整渲染线程是指每个渲染线程执行一次渲染任务,在完成一次渲染任务后,经过渲染线程的处理时间间隔,再次启动渲染线程。
步骤307:电子设备在执行渲染线程的过程中,通过该渲染线程基于该虚拟缓存队列,对该第一解码数据进行读取并渲染,得到视频画面。
步骤308:电子设备播放视频画面。
需要说明的是,上述步骤307的操作可以参考上述步骤103的操作,步骤308的操作可以参考上述步骤104的操作,本申请实施例对此不再进行一一赘述。
在本申请实施例中,由于在进行视频播放过程中,电子设备在得到第一解码数据后,并不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗,同时还提高了处理效率。同时,由于可以基于虚拟缓存队列中存储的缓存位置标识的数量动态调整解码线程的处理时间间隔和渲染线程的处理时间间隔,在两个线程的共同调控下,可以使虚拟缓存队列中存储的缓存位置标识的数量维持在一定范围内,改善了视频播放过程中出现跳帧、画面不完整的情况,保证了视频播放效果。
图4是本申请实施例提供的一种视频的播放方法流程图,本实施例以该视频的播放方法应用于电子设备中进行举例说明,该视频的播放方法可以包括如下几个步骤:
解码线程处理过程包括:
D1、确定解码器是否创建,如果解码器未创建,则初始化解码会话,创建执行解码线程的硬件设备,并为解码线程分配对应解码空间,该解码空间包括解码所需解码空间和虚拟缓存队列所需显存空间的个数;如果解码线程已创建,则根据解码线程的处理时间间隔,进行解码延时等待,在达到解码线程的处理时间间隔后,执行D2的操作。
D2、通过解码线程对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据。其中,电子设备在通过解码线程对视频帧进行解码的过程中,可以从解码线程对应的解码空间中先获取一个空闲状态的显存空间,在获取的空闲状态的显存空间中进行解码操作,如果解码不成功,则继续从解码线程的解码空间中获取处于空闲状态的其他显存空间。在解码成功后执行D3的操作。
D3、将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中。
D4、在视频播放过程中,对虚拟缓存队列的大小进行调整,在调整完毕后,循环执行下一次的解码流程。
渲染线程处理过程包括:
R1、根据渲染线程的处理时间间隔,进行渲染延时等待,在达到渲染线程的处理时间间隔后,执行R2。
R2、通过渲染线程基于虚拟缓存队列,获取第一解码数据。
R3、对第一解码数据进行渲染,得到视频画面。之后播放视频画面,并执行R1,循环执行下一次的渲染流程。
在本申请实施例中,由于在进行视频播放过程中,电子设备在得到第一解码数据后,并不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗,同时还提高了处理效率。同时,由于可以基于虚拟缓存队列中存储的缓存位置标识的数量动态调整解码线程的处理时间间隔和渲染线程的处理时间间隔,在两个线程的共同调控下,可以使虚拟缓存队列中存储的缓存位置标识的数量维持在一定范围内,改善了视频播放过程中出现跳帧、画面不完整的情况,保证了视频播放效果。
应理解,上述实施例中各步骤的序号并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图5是根据一示例性实施例示出的一种视频的播放装置的结构示意图,该视频的播放装置可以由软件、硬件或者两者的结合实现。该视频的播放装置可以包括:解码模块501、映射模块502、渲染模块503和播放模块504。
解码模块501,用于通过解码线程对视频流中待解码的视频帧进行解码,得到视频帧的第一解码数据;
映射模块502,用于将第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,缓存空间是解码过程中用于缓存解码数据的空间,虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;
渲染模块503,用于在执行渲染线程的过程中,通过渲染线程基于虚拟缓存队列,对第一解码数据进行读取并渲染,得到视频画面;
播放模块504,用于播放视频画面。
作为本申请的一个示例,渲染模块包括:
读取子模块,用于在执行渲染线程的过程中,从虚拟缓存队列中读取所述目标缓存位置标识;
获取子模块,用于从目标缓存位置标识指示的缓存空间中获取第一解码数据;
渲染子模块,用于通过渲染线程对第一解码数据进行渲染,得到视频画面。
作为本申请的一个示例,装置还包括:
第一确定模块,用于在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时;
第二确定模块,用于基于历史最大解码耗时、视频流的帧率和预设数量,确定第一数值,第一数值是对虚拟缓存队列的大小进行调整后,虚拟缓存队列所需占用的显存空间的数量,预设数量为在虚拟缓存队列中冗余设置的显存空间的数量;
第一调整模块,用于根据第一数值,调整虚拟缓存队列的大小。
作为本申请的一个示例,第一确定模块用于:
在视频播放过程中,若解码条件未发生变化,则将在第一时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时,第一时长内至少解码至少一个I帧;在视频播放过程中,若解码条件发生变化,则确定解码超时次数和/或空队列出现次数,解码超时次数是在第二时长内出现解码耗时大于在解码条件未发生变化情况下的历史最大解码耗时的次数,空队列出现次数是在第二时长内进行渲染时虚拟缓存队列为空的次数;
在确定解码超时次数和空队列出现次数的情况下,若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时。
作为本申请的一个示例,第一确定模块用于:
若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则将在第二时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时;或者,若解码超时次数大于或等于第一次数阈值,和/或,空列队出现次数大于或等于第二次数阈值,则将在第三时长内对视频流进行解码的最大解码耗时确定为历史最大解码耗时,第三时长为解码条件发生变化后选取的时长。
作为本申请的一个示例,第二确定模块用于:
基于历史最大解码耗时、视频流的帧率和预设数量,通过第一公式确定第一数值,所述第一公式为:
N=TD max/(1000/Rate)+X
其中,N为第一数值,Rate为视频流的帧率,TD max为历史最大解码耗时,X为预设数量。
作为本申请的一个示例,该装置还包括:
获取模块,用于获取第二数值,第二数值是虚拟缓存队列中当前缓存的解码数据的个数;
第三确定模块,用于在第二数值小于第一数量阈值或大于第二数量阈值的情况下,基于基准帧间间隔、第二数值以及第一数值,确定解码线程的处理时间间隔以及确定渲染线程的处理时间间隔,基准帧间间隔基于视频流的帧率确定,第一数值是虚拟缓存队列当前所占用的显存空间的数量,处理时间间隔是对应的线程处理两个相邻视频帧的间隔时间;
第二调整模块,用于按照解码线程的处理时间间隔,调整解码线程;
该装置还包括:
第三调整模块,用于按照渲染线程的处理时间间隔,调整渲染线程。
作为本申请的一个示例,第三确定模块用于:
基于基准帧间间隔、第二数值以及第一数值,通过第二公式确定解码线程的处理时间间隔,第二公式为:
TDspan=Ts-[(N-X-Cnt)*Ts]/ScaleD
其中,TDspan为解码线程的处理时间间隔,所述Ts为所述基准帧间间隔,Cnt为第二数值,N为第一数值,ScaleD为第一调控系数,X为预设数量。
基于基准帧间间隔、第二数值以及第一数值,通过第三公式确定渲染线程的处理时间间隔,第三公式为:
TRspan=Ts+[(N-X-Cnt)*Ts]/ScaleR
其中,TRspan为渲染线程的处理时间间隔,Ts为基准帧间间隔,Cnt为第二数值,N为第一数值,ScaleR为第二调控系数,X为预设数量。
在本申请实施例中,由于在进行视频播放过程中,电子设备在得到第一解码数据后,并不需要对第一解码数据进行拷贝并转存,而是将第一解码数据所在缓存空间的目标缓存位置标识映射至虚拟缓存队列中,从而没有对解码线程造成性能消耗,同时还提高了处理效率。同时,由于可以基于虚拟缓存队列中存储的缓存位置标识的数量动态调整解码线程的处理时间间隔和渲染线程的处理时间间隔,在两个线程的共同调控下,可以使虚拟缓存队列中存储的缓存位置标识的数量维持在一定范围内,改善了视频播放过程中出现跳帧、画面不完整的情况,保证了视频播放效果。
图6为本申请一实施例提供的电子设备的结构示意图。如图6所示,该实施例的电子设备6包括:至少一个处理器60(图6中仅示出一个)、存储器61以及存储在所述存储器61中并可在所述至少一个处理器60上运行的计算机程序62,所述处理器60执行所述计算机程序62时实现上述任意各个方法实施例中的步骤。
所述电子设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是电子设备6的举例,并不构成对电子设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器60可以是GPU(Graphic Processing Unit,图形处理器),该处理器60还可以是其他通用处理器、DSP(Digital Signal Processor,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现成可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61在一种实施例中可以是所述电子设备6的内部存储单元,例如电子设备6的硬盘或内存。所述存储器61在另一些实施例中也可以是所述电子设备6的外部存储设备,例如所述电子设备6上配备的插接式硬盘,SMC(Smart Media Card,智能存储卡),SD(Secure Digital,安全数字)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述电子设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种视频的播放方法,其特征在于,所述方法包括:
通过解码线程对视频流中待解码的视频帧进行解码,得到所述视频帧的第一解码数据;
将所述第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,所述缓存空间是解码过程中用于缓存解码数据的空间,所述虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;
在执行渲染线程的过程中,通过所述渲染线程基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面;
播放所述视频画面。
2.如权利要求1所述的方法,其特征在于,所述在执行渲染线程的过程中,基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面,包括:
在执行所述渲染线程的过程中,从所述虚拟缓存队列中读取所述目标缓存位置标识;
从所述目标缓存位置标识指示的缓存空间中获取所述第一解码数据;
通过所述渲染线程对所述第一解码数据进行渲染,得到所述视频画面。
3.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时;
基于所述历史最大解码耗时、所述视频流的帧率和预设数量,确定第一数值,所述第一数值是对所述虚拟缓存队列的大小进行调整后所述虚拟缓存队列所需占用的显存空间的数量,所述预设数量为在所述虚拟缓存队列中冗余设置的显存空间的数量;
根据所述第一数值,调整所述虚拟缓存队列的大小。
4.如权利要求3所述的方法,其特征在于,所述在视频播放过程中,根据解码条件的变化情况,确定预设时间内解码一帧视频帧的历史最大解码耗时,包括:
在视频播放过程中,若所述解码条件未发生变化,则将在第一时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第一时长内至少解码至少一个I帧;在视频播放过程中,若所述解码条件发生变化,则确定解码超时次数和/或空队列出现次数,所述解码超时次数是在第二时长内出现解码耗时大于在所述解码条件未发生变化情况下的历史最大解码耗时的次数,所述空队列出现次数是在所述第二时长内进行渲染时所述虚拟缓存队列为空的次数;
在确定所述解码超时次数和所述空队列出现次数的情况下,若所述解码超时次数大于或等于第一次数阈值,和/或,所述空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时。
5.如权利要求4所述的方法,其特征在于,所述若所述解码超时次数大于或等于第一次数阈值,和/或,所述空列队出现次数大于或等于第二次数阈值,则重新确定所述解码条件发生变化后对应的历史最大解码耗时,包括:
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第二时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时;或者,
若所述解码超时次数大于或等于所述第一次数阈值,和/或,所述空列队出现次数大于或等于所述第二次数阈值,则将在第三时长内对所述视频流进行解码的最大解码耗时确定为所述历史最大解码耗时,所述第三时长为解码条件发生变化后选取的时长。
6.如权利要求4或5所述的方法,其特征在于,所述基于所述历史最大解码耗时、所述视频流的帧率和预设数量,确定第一数值,包括:
基于所述历史最大解码耗时、所述视频流的帧率和所述预设数量,通过第一公式确定所述第一数值,所述第一公式为:
N=TDmax/(1000/Rate)+X
其中,所述N为所述第一数值,所述Rate为所述视频流的帧率,所述TDmax为所述历史最大解码耗时,所述X为所述预设数量。
7.如权利要求1或2所述的方法,其特征在于,通过解码线程对视频流中待解码的视频帧进行解码之前,还包括:
获取第二数值,所述第二数值是所述虚拟缓存队列中当前缓存的解码数据的个数;
在所述第二数值小于第一数量阈值或大于第二数量阈值的情况下,基于基准帧间间隔、所述第二数值以及第一数值,确定所述解码线程的处理时间间隔以及确定所述渲染线程的处理时间间隔,所述基准帧间间隔基于所述视频流的帧率确定,所述第一数值是所述虚拟缓存队列当前所占用的显存空间的数量,所述处理时间间隔是线程处理两个相邻视频帧的间隔时间;
按照所述解码线程的处理时间间隔,调整所述解码线程;
所述在执行渲染线程的过程中,基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染之前,还包括:
按照所述渲染线程的处理时间间隔,调整所述渲染线程。
8.如权利要求7所述的方法,其特征在于,所述基于基准帧间间隔、所述第二数值以及第一数值,确定所述解码线程的处理时间间隔以及确定所述渲染线程的处理时间间隔,包括:
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第二公式确定所述解码线程的处理时间间隔,所述第二公式为:
TDspan=Ts-[(N-X-Cnt)*Ts]/ScaleD
其中,所述TDspan为所述解码线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleD为第一调控系数,所述X为预设数量;
基于所述基准帧间间隔、所述第二数值以及所述第一数值,通过第三公式确定所述渲染线程的处理时间间隔,所述第三公式为:
TRspan=Ts+[(N-X-Cnt)*Ts]/ScaleR
其中,所述TRspan为所述渲染线程的处理时间间隔,所述Ts为所述基准帧间间隔,所述Cnt为所述第二数值,所述N为所述第一数值,所述ScaleR为第二调控系数,所述X为所述预设数量。
9.一种视频的播放装置,其特征在于,所述装置包括:
解码模块,用于通过解码线程对视频流中待解码的视频帧进行解码,得到所述视频帧的第一解码数据;
映射模块,用于将所述第一解码数据所在的缓存空间的目标缓存位置标识映射至虚拟缓存队列中,所述缓存空间是解码过程中用于缓存解码数据的空间,所述虚拟缓存队列用于存储未渲染的解码数据的缓存位置标识;
渲染模块,用于在执行渲染线程的过程中,通过所述渲染线程基于所述虚拟缓存队列,对所述第一解码数据进行读取并渲染,得到视频画面;
播放模块,用于播放所述视频画面。
10.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8任一项所述的方法。
CN202210715730.4A 2022-06-22 2022-06-22 视频的播放方法、装置及电子设备 Pending CN115209216A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210715730.4A CN115209216A (zh) 2022-06-22 2022-06-22 视频的播放方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210715730.4A CN115209216A (zh) 2022-06-22 2022-06-22 视频的播放方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN115209216A true CN115209216A (zh) 2022-10-18

Family

ID=83577469

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210715730.4A Pending CN115209216A (zh) 2022-06-22 2022-06-22 视频的播放方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN115209216A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116916095A (zh) * 2023-09-12 2023-10-20 深圳云天畅想信息科技有限公司 一种云视频的平滑显示方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107948735A (zh) * 2017-12-06 2018-04-20 北京金山安全软件有限公司 一种视频播放方法、装置及电子设备
CN109194960A (zh) * 2018-11-13 2019-01-11 北京奇艺世纪科技有限公司 一种图像帧渲染方法、装置及电子设备
CN109996104A (zh) * 2019-04-22 2019-07-09 北京奇艺世纪科技有限公司 一种视频播放方法、装置及电子设备
CN113347488A (zh) * 2021-08-04 2021-09-03 腾讯科技(深圳)有限公司 视频渲染方法、装置、设备及存储介质
CN113407138A (zh) * 2021-06-30 2021-09-17 腾讯科技(深圳)有限公司 应用程序的画面处理方法、装置、电子设备及存储介质
CN113873345A (zh) * 2021-09-27 2021-12-31 中国电子科技集团公司第二十八研究所 一种分布式的超高清视频同步处理方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107948735A (zh) * 2017-12-06 2018-04-20 北京金山安全软件有限公司 一种视频播放方法、装置及电子设备
CN109194960A (zh) * 2018-11-13 2019-01-11 北京奇艺世纪科技有限公司 一种图像帧渲染方法、装置及电子设备
CN109996104A (zh) * 2019-04-22 2019-07-09 北京奇艺世纪科技有限公司 一种视频播放方法、装置及电子设备
CN113407138A (zh) * 2021-06-30 2021-09-17 腾讯科技(深圳)有限公司 应用程序的画面处理方法、装置、电子设备及存储介质
CN113347488A (zh) * 2021-08-04 2021-09-03 腾讯科技(深圳)有限公司 视频渲染方法、装置、设备及存储介质
CN113873345A (zh) * 2021-09-27 2021-12-31 中国电子科技集团公司第二十八研究所 一种分布式的超高清视频同步处理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116916095A (zh) * 2023-09-12 2023-10-20 深圳云天畅想信息科技有限公司 一种云视频的平滑显示方法、装置、设备及存储介质
CN116916095B (zh) * 2023-09-12 2024-01-12 深圳云天畅想信息科技有限公司 一种云视频的平滑显示方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US7752413B2 (en) Method and apparatus for communicating between threads
US8477852B2 (en) Uniform video decoding and display
US20150271238A1 (en) Interfaces for digital media processing
KR101475544B1 (ko) 공유 메모리 풀을 사용한 디지털 데이터 관리
US20110317763A1 (en) Information processing apparatus and information processing method
CN108093292B (zh) 用于管理缓存的方法、装置及系统
US20170220283A1 (en) Reducing memory usage by a decoder during a format change
US20060088279A1 (en) Reproduction apparatus, data processing system, reproduction method, program, and storage medium
CN110708609A (zh) 一种视频播放方法及装置
CN115209216A (zh) 视频的播放方法、装置及电子设备
US7725905B1 (en) Media accelerator interface API
JP4754585B2 (ja) データ配信およびバッファリング
US7751687B2 (en) Data processing apparatus, data processing method, data processing system, program, and storage medium
WO2023083064A1 (zh) 视频处理方法、装置、电子设备及可读存储介质
JP2004535089A (ja) 記憶媒体へのアクセスを管理する装置及び方法
US7729591B2 (en) Data processing apparatus, reproduction apparatus, data processing system, reproduction method, program, and storage medium
US7577762B1 (en) Cooperative scheduling for multiple consumers
US9547612B2 (en) Method and architecture for data channel virtualization in an embedded system
CN111343404B (zh) 成像数据处理方法及装置
CN114071225B (zh) 一种帧动画播放方法、装置和系统
US20030233338A1 (en) Access to a collective resource
US7627232B2 (en) Reproduction apparatus, data processing system, reproduction method, program, and storage medium
JPH10322643A (ja) 画像データ処理方法及び装置
CN117687810A (zh) 一种跨进程内存共享方法、装置、设备及存储介质
CN110913228A (zh) 视频处理系统及视频处理方法

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