CN116320448B - 一种基于动态自适应分辨率的视频解码会话复用优化方法 - Google Patents

一种基于动态自适应分辨率的视频解码会话复用优化方法 Download PDF

Info

Publication number
CN116320448B
CN116320448B CN202310565065.XA CN202310565065A CN116320448B CN 116320448 B CN116320448 B CN 116320448B CN 202310565065 A CN202310565065 A CN 202310565065A CN 116320448 B CN116320448 B CN 116320448B
Authority
CN
China
Prior art keywords
decoding
video stream
decoded
session
frame
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.)
Active
Application number
CN202310565065.XA
Other languages
English (en)
Other versions
CN116320448A (zh
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.)
Beijing Linzhuo Information Technology Co Ltd
Original Assignee
Beijing Linzhuo Information Technology 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 Beijing Linzhuo Information Technology Co Ltd filed Critical Beijing Linzhuo Information Technology Co Ltd
Priority to CN202310565065.XA priority Critical patent/CN116320448B/zh
Publication of CN116320448A publication Critical patent/CN116320448A/zh
Application granted granted Critical
Publication of CN116320448B publication Critical patent/CN116320448B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/177Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a group of pictures [GOP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/20Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding
    • H04N19/21Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding with binary alpha-plane coding for video objects, e.g. context-based arithmetic encoding [CAE]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/23406Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving management of server-side video buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/2343Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements
    • H04N21/234381Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements by altering the temporal resolution, e.g. decreasing the frame rate by frame skipping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/236Assembling of a multiplex stream, e.g. transport stream, by combining a video stream with other content or additional data, e.g. inserting a URL [Uniform Resource Locator] into a video stream, multiplexing software data into a video stream; Remultiplexing of multiplex streams; Insertion of stuffing bits into the multiplex stream, e.g. to obtain a constant bit-rate; Assembling of a packetised elementary stream
    • H04N21/2365Multiplexing of several video streams

Landscapes

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

Abstract

本发明公开了一种基于动态自适应分辨率的视频解码会话复用优化方法,根据GPU当前已建立的解码会话数量与解码会话数量约束之间的关系,确定为待解码视频流分配解码会话的方式,在当前已建立的解码会话数量小于约束时建立新的解码会话,反之则复用已建立的解码会话,在此基础上针对待解码视频流的分辨率高于基线视频流的分辨率时能够自适应的调整基线视频流的分辨率以合并待解码视频流,由此实现了在运行更多的视频解码任务的同时,进一步提高了解码会话复用的适应性。

Description

一种基于动态自适应分辨率的视频解码会话复用优化方法
技术领域
本发明属于计算机软件开发技术领域,具体涉及一种基于动态自适应分辨率的视频解码会话复用优化方法。
背景技术
目前安卓云、图形云及多路视频等服务器的广泛使用对GPU的解码性能提出了更高的要求。在使用安卓云、图形云及多路视频等服务器时,往往会产生由同一GPU并行执行多个进程视频解码的需求,然而,大部分GPU存在可支持的并发解码会话数量的限制,通常情况下GPU中会话与待解码的视频流之间为一一对应的关系,因此会话数量的限制也就间接地限制了GPU处理解码任务的数量,这一限制难以满足逐渐增大的安卓云、图形云及多路视频等服务器对GPU解码能力的需求。
发明内容
有鉴于此,本发明提供了一种基于动态自适应分辨率的视频解码会话复用优化方法,实现了基于解码会话复用的更多视频流的解码,同时能够根据待解码视频流的分辨率自适应的调整基线视频流的分辨率,以使分辨率较高的视频流合并到分辨率较低的解码会话中,有效突破了GPU对解码会话数量的限制。
本发明提供的一种基于动态自适应分辨率的视频解码会话复用优化方法,包括以下步骤:
步骤1、由编解码引擎打开待解码视频流,获取待解码视频流的编码格式及分辨率,并为待解码视频流增加流标识;
步骤2、编解码引擎获取GPU当前已建立的解码会话总数,若解码会话总数小于数量上限则执行步骤3,否则执行步骤4;
步骤3、为待解码视频流创建新的解码会话及解码历史信息,并为该解码会话绑定解码器和上下文,再执行标准的解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程;
步骤4、在当前已建立的解码会话中查找与待解码视频流的编码格式相同的解码会话,若存在则作为备选解码会话执行步骤5;否则执行步骤6;
步骤5、若备选解码会话中存在分辨率不小于待解码视频流分辨率的解码会话,则将其作为基线视频流,将待解码视频流作为被合并视频流执行步骤9;否则在具有相同编码格式的解码会话中选取解码会话作为基线视频流后执行步骤7;
步骤6、在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中选取两个解码会话分别作为基线视频流和被合并视频流,将被合并视频流的待解码帧添加到基线视频流后形成新的待解码视频流,执行步骤3;若不存在,则报错并结束本流程;
步骤7、将待解码视频流作为被合并视频流,读取基线视频流中当前处理帧的后N帧数据的帧信息,若在该N帧数据内存在IDR帧则在该IDR帧完成解码后执行步骤8,否则删除当前内存中的帧数据后执行步骤8;
步骤8、销毁GPU中的基线视频流,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中与基线视频流相关的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流,以完成将基线视频流对应的应用与新基线视频流的绑定;
步骤9、将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,对待解码视频流执行解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程。
进一步地,所述步骤6之后与所述步骤7之前还包括:
若基线视频流中存在正在由GPU执行解码操作的I帧队列,则将I帧队列中所有I帧的分辨率修改为新分辨率,并重新分配内存,将原始帧数据复制到新分配的内存后释放原始内存,再执行步骤7;否则执行步骤7。
进一步地,所述步骤9中所述对待解码视频流执行解码操作还包括:
步骤9.1、若解码操作产生错误且错误位于当前GOP内则执行步骤9.2,若解码操作产生错误且错误位于当前GOP外则执行步骤9.4;
步骤9.2、若待解码视频流为网络视频流,则记录当前GOP信息作为解码帧信息,并缓存下一个GOP信息;若不是网络视频流,则记录当前GOP信息作为解码帧信息;
步骤9.3、销毁GPU中的待解码视频流,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中基线视频流的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流;再将被合并视频流合并到新基线视频流中得到待解码视频流,在待解码视频流中根据解码帧信息从当前GOP的第一帧开始重新解码;
步骤9.4、由编解码引擎构建IDR帧并将其插入到待解码视频流中,将待解码视频流发送至GPU,根据解码帧信息从当前GOP的第一帧开始重新解码。
进一步地,所述步骤5中所述在具有相同编码格式的解码会话中选取解码会话作为基线视频流的方式为:依次按照从与待解码视频流的编码码率之差小于阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且B帧最少的解码会话、存在解码历史信息且P帧最少的解码会话到剩余解码帧数最少的解码会话的条件进行选择。
进一步地,所述编解码引擎为FFmpeg或GStreamer。
进一步地,所述步骤2中所述数量上限为GPU的解码会话数量的上限。
有益效果
本发明根据GPU当前已建立的解码会话数量与解码会话数量约束之间的关系,确定为待解码视频流分配解码会话的方式,在当前已建立的解码会话数量小于约束时建立新的解码会话,反之则复用已建立的解码会话,在此基础上针对待解码视频流的分辨率高于基线视频流的分辨率时能够自适应的调整基线视频流的分辨率以合并待解码视频流,由此实现了在运行更多的视频解码任务的同时,进一步提高了解码会话复用的适应性。
具体实施方式
下面列举实施例,对本发明进行详细描述。
本发明提供了一种基于动态自适应分辨率的视频解码会话复用优化方法,其核心思想是:通过修改编解码引擎的解码过程,在当前已建立的解码会话数量小于约束时建立新的解码会话,反之则复用已建立的解码会话即将多个解码任务的待解码帧接入同一解码会话中,在此基础上根据待解码视频流的分辨率自适应的调整基线视频流的分辨率,以实现分辨率无差别的解码会话复用。
本发明提供的一种基于动态自适应分辨率的视频解码会话复用优化方法,具体包括以下步骤:
步骤1、由编解码引擎打开待解码视频流,获取待解码视频流的编码格式、帧分辨率等视频信息,并为待解码视频流增加流标识;编解码引擎获取GPU当前已建立的解码会话总数,若解码会话总数小于GPU的解码会话数量的上限则执行步骤2,否则执行步骤3。
步骤2、为待解码视频流创建新的解码会话及解码历史信息,并为该解码会话绑定解码器和上下文,再执行标准的解码操作,并将解码过程中待解码帧的编号、流标识等信息保存在解码历史信息中。
步骤3、在当前已建立的解码会话中查找与待解码视频流的编码格式相同的解码会话,若存在则执行步骤4,否则执行步骤8。
步骤4、在具有相同编码格式的解码会话中,判断是否存在与待解码视频流的分辨率相同的解码会话,若存在则将查找到的解码会话作为备选会话执行步骤5;若不存在则判断是否存在分辨率大于或等于待解码视频流的解码会话,若存在则将其中分辨率与待解码视频流的分辨率的差值小于第一阈值的解码会话作为备选会话执行步骤5,若不存在分辨率大于或等于待解码视频流的解码会话,则在具有相同编码格式的解码会话中选取解码会话作为基线视频流后执行步骤6。
在具有相同编码格式的解码会话中选取解码会话的方式为:依次按照从与待解码视频流的编码码率之差小于阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且B帧最少的解码会话、存在解码历史信息且P帧最少的解码会话到剩余解码帧数最少的解码会话的条件进行选择。
步骤5、若备选会话为多个,则依次按照与待解码视频流的编码码率之差小于第二阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且B帧最少的解码会话、存在解码历史信息且P帧最少的解码会话及剩余解码帧数最少的解码会话的优先顺序确定可复用的解码会话,将该解码会话作为基线视频流、待解码视频流作为被合并视频流,执行步骤8;若按照优先顺序未得到可复用的解码会话,则从备选会话中选取一个解码会话作为基线视频流、待解码视频流作为被合并视频流,执行步骤9。
步骤6、将待解码视频流作为被合并视频流,读取基线视频流中当前处理帧的后N帧数据的帧信息,若在该N帧数据内存在IDR帧则在该IDR帧完成解码后执行步骤7,否则删除当前内存中的帧数据后执行步骤7。
例如,本发明通过在FFmpeg的编解码引擎中增加读取帧信息的函数实现获取帧数据的帧信息,且不为帧数据分配用于保存数据的内存空间,其中,帧信息是指针的类型信息,包括I帧、P帧、B帧和IDR帧。
其中,IDR(Instantaneous Decoder Refresh)帧是H.264视频编码标准中的一种帧类型,是一种特殊的关键帧(I帧),用于在视频序列中定期插入一个可靠的同步点,以确保解码器可以正确地解码视频流并恢复图像质量。根据解码规范,在解码视频流的过程中当解码到IDR帧时系统会清除当前内存中的所有I帧。
步骤7、销毁GPU中的基线视频流,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中与基线视频流相关的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流,以完成将基线视频流对应的应用与新基线视频流的绑定,执行步骤9。
进一步地,为了防止基线视频流解码错误,本发明还在步骤7之前增加了以下处理过程:若基线视频流中存在正在由GPU执行解码操作的I帧队列,则将I帧队列中所有I帧的分辨率修改为新分辨率,并重新分配内存,将原始帧数据复制到新分配的内存后释放原始内存,再执行步骤7;否则执行步骤7。
步骤8、在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中选取两个解码会话分别作为基线视频流和被合并视频流,执行步骤9;若不存在,则报错并结束本流程。
步骤9、将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,对待解码视频流执行解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程。
上述步骤9中的合并过程具体为:若当前待解码帧为I帧,则记录当前待解码帧的原始编号及流标识,顺序为当前待解码帧分配连续编号,该连续编号为当前待解码帧在合并后的视频流中的编号;若当前待解码帧为P帧,则记录当前待解码帧的原始编号及流标识,并根据其依赖I帧的原始编号及流标识确定该I帧的连续编号,顺序为当前待解码帧分配连续编号并将其依赖I帧的编号修改为连续编号;若当前待解码帧为B帧,则记录当前待解码帧的原始编号及流标识,并根据其依赖的前向I帧和后向I帧的原始编号及流标识确定前向I帧和后向I帧的连续编号,顺序为当前待解码帧分配连续编号并将其依赖的前向I帧和后向I帧的编号修改为连续编号;将修改后的待解码帧的原始编号、流标识、连续编号等信息保存在解码历史信息中;
将修改后的待解码帧添加到基线视频流中执行解码操作,待解码操作执行完毕后将解码结果空间A中的解码结果复制到被合并视频流的原始解码结果空间中。
为了进一步提高解码会话复用的可靠性,本发明还增加了对合并后形成的新的待解码视频流A解码过程的监测,具体过程为:
步骤9.1、若解码错误产生于当前GOP(Group of Pictures)内则执行步骤9.2,否则执行步骤9.4。
步骤9.2、若当前待解码视频流A对应的视频流为网络视频流,则记录当前GOP信息作为解码帧信息,并缓存下一个GOP信息;若不是网络视频流,则记录当前GOP信息作为解码帧信息。
步骤9.3、销毁GPU中的待解码视频流A,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中与基线视频流相关的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流;再将被合并视频流合并到新基线视频流中,在新基线视频流中,根据解码帧信息从当前GOP的第一帧开始重新解码。
步骤9.4、由编解码引擎构建IDR帧并将其插入到待解码视频流A中,再将待解码视频流A发送至GPU进行解码,达到强制清除当前的帧队列的效果;再根据解码帧信息从当前GOP的第一帧开始重新解码。
实施例
本实施例中采用本发明提供的一种基于动态自适应分辨率的视频解码会话复用优化方法实现了分辨率无差别的GPU解码会话复用,具体包括以下步骤:
S1、读取解码历史信息。
S2、修改编解码引擎FFmpeg的解码过程,在利用GPU接口创建解码会话时,如当前已建立的解码会话总数已达到了GPU限制,则将此会话合并到当前已建立的解码会话中,可合并的解码会话必须与待解码视频流具有相同的编码格式。
S2.1、采用FFmpeg的相关API,如avformat_open_input,打开视频流,包括网络视频流或视频文件,并使用avformat_find_stream_info方法获取视频流的视频信息,如编码格式、帧分辨率等。
为当前视频流创建decodedVideoHistory,所有位初始化为0;再修改FFmpeg的帧读取函数av_read_frame和frame的数据结构AVPacket,加入对帧所在视频流的流标识ID,记为streamId。
S2.2、修改FFmpeg的初始化函数,如avcodec_find_decoder和avcodec_alloc_context3,实现对已有解码会话的复用。
如当前解码会话数没有超过GPU限制,则执行标准的解码流程,即创建新的GPU解码会话,并将新的GPU解码会话绑定到decoder和context;如当前解码会话数已达到或超过GPU限制,则在现有会话中查找具有相同编码格式的解码会话,如存在具有相同编码格式的解码会话则选择一个解码会话进行复用,选择方式如下:
首先查找分辨率相同的解码会话,若不存在则查找分辨率较大且最接近的解码会话,若不存在则执行S3;
若存在多个备选会话,则从中找出编码码率最接近的会话作为新的备选会话;如存在多个备选会话,则从中优先选择网络视频流的会话作为新的备选会话,因为网络视频流一般都不含有B帧;如存在多个备选会话,则从中选择具有decodedVideoHistory的会话且B帧最少的会话作为新的备选会话;如存在多个备选会话,则从中选取P帧最少的会话作为新的备选会话;如存在多个备选会话,则从中找出剩余解码帧数最少的会话作为新的备选会话,其中,剩余解码帧数为剩余时长与码率的乘积;如存在多个备选会话,则随机选择一个解码会话作为当前待解码视频流作为基线视频流,记为BaseStream,将待解码视频流作为待合并视频流记为MergedStream。
如不存在具有相同编码格式的解码会话则在所有已建立的解码会话中查找是否存在具有相同编码格式的解码会话,例如,现有解码会话中存在两个H.264编码格式的解码会话;如存在则选择两个编码格式相同且独立的会话进行融合,独立即为未融合其他视频流的解码会话,融合方式为:
首先找到两个分辨率相同的解码会话,如未找到则选择分辨率相差最小的两个解码会话;如存在多个备选,则从中找出编码码率最接近的两个解码会话,此处未优先考虑网络视频流,因为两路网络视频流的来源一般都不同,两个网络视频流合并解码波动较大;如存在多个备选,且存在具有decodedVideoHistory的解码会话,则从中找出B帧之和最少的两个会话;如存在多个备选,则找出P帧之和最少的两个会话;如存在多个备选,则找出剩余解码帧数之和最少的两个会话;如存在多个备选,则随机选择两个会话。
将两个解码会话进行合并后,则执行标准的后续解码流程,即创建新的GPU解码会话,并绑定到decoder和context。
如果所有已建立的解码会话中不存在具有相同编码格式的解码会话,则说明没有可用的解码会话,则解码器初始化相关函数报错退出当前解码流程。
S3、修改FFmpeg编解码引擎,在其中增加函数av_read_frame_type,该函数仅读取帧的类型信息,包括I帧、P帧、B帧及IDR帧,且不需要分配内存以保存帧数据;保存FFmpeg编解码引擎中与BaseStream对应的当前会话帧指针;调用av_read_frame_type向后读取N帧,恢复保存的会话帧指针;在N帧数据中搜索是否存在IDR帧,如存在则执行S4,如不存在则删除当前内存中的帧数据后执行S4。
S4、检查BaseStream是否存在参考帧(I帧)队列,如果存在则修改编解码器中参考帧队列中每个I帧的分辨率,并按照新分辨率重新分配内存,并将现有帧信息复制到新分配的内存,释放原始帧内存,执行S5;如果不存在则执行S5。
S5、等待IDR帧解码完毕后,重置GPU中的BaseStream,即结束当前的GPU的解码会话,并使用新分辨率创建新的GPU解码会话,以使得GPU内部后续使用新分辨率进行解码;令编解码引擎暂停解码,将FFmpeg上下文等数据结构中的分辨率修改为新分辨率,并将修改后的数据结构绑定到新的GPU解码会话。
由于编解码引擎中的context已被上层应用使用,所以本发明在编解码引擎中不直接采用新分辨率重新创建FFmpeg的context,以避免导致上层应用执行错误。
S6、本实施例通过修改FFmpeg的avcodec_send_packet函数,实现两路视频流重用一个会话。
具体为:如当前帧的分辨率与基线视频流的分辨率不同,则按照基线视频流的分辨率重新分配解码结果空间,判断当前输入的待解码帧的streamId与之前的待解码帧的previousStreamId是否相同,如不相同则向前搜索FFmpeg当前会话中的前向的、属于另一个视频流的、最近的一个I帧,将其结构中的其他视频流的帧数加1,也就是记录了一个I帧后面插入了多少个另一个视频流的帧;
再根据帧类型执行解码:如是I帧,则执行avcodec_send_packet的标准后续解码代码,记录当前帧号;如是P帧,则计算当前会话中的、当前视频流的、当前这个P帧之前的所有I帧(不含最近的I帧)的其他视频流的帧数之和,将其加到当前P帧引用的I帧的编号;如是B帧,按照前一步的计算方式算出当前B帧的前向I帧的新编号,然后计算当前会话中的、当前视频流的、当前这个B帧之前的所有I帧(含最近的那个I帧)的其他视频流的帧数之和,将其加到当前B帧引用的后向I帧的编号。
再执行后续的标准代码完成解码。
对于与基线视频流的分辨率不同的待解码帧,则将解码结果重新分配的空间按照帧的真实分辨率复制回原始解码结果空间。当前视频流解码结束后,将decodedVideoHistory写入文件。
S7、修改FFmpeg的avcodec_send_packet函数监视解码错误,若合并后在当前GOP内发生解码错误,则记录当前解码现场即当前GOP信息,销毁当前解码会话,并按照MergedStream的分辨率重建解码会话作为新的BaseStream,再将MergedStream合并到BaseStream中,并记录的GOP信息的第一帧开始解码;若在当前GOP之外出现解码错误,则构建IDR帧并将其插入到当前解码会话中,并发送至GPU视频解码器,实现强制清除之前的I帧队列的效果,再从当前出错的帧重新开始解码。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于动态自适应分辨率的视频解码会话复用优化方法,其特征在于,包括以下步骤:
步骤1、由编解码引擎打开待解码视频流,获取待解码视频流的编码格式及分辨率,并为待解码视频流增加流标识;
步骤2、编解码引擎获取GPU当前已建立的解码会话总数,若解码会话总数小于数量上限则执行步骤3,否则执行步骤4;
步骤3、为待解码视频流创建新的解码会话及解码历史信息,并为该解码会话绑定解码器和上下文,再执行标准的解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程;
步骤4、在当前已建立的解码会话中查找与待解码视频流的编码格式相同的解码会话,若存在则作为备选解码会话执行步骤5;否则执行步骤6;
步骤5、若备选解码会话中存在分辨率不小于待解码视频流分辨率的解码会话,则将其作为基线视频流,将待解码视频流作为被合并视频流执行步骤9;否则在具有相同编码格式的解码会话中选取解码会话作为基线视频流后执行步骤7;
步骤6、在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中选取两个解码会话分别作为基线视频流和被合并视频流,将被合并视频流的待解码帧添加到基线视频流后形成新的待解码视频流,执行步骤3;若不存在,则报错并结束本流程;
步骤7、将待解码视频流作为被合并视频流,读取基线视频流中当前处理帧的后N帧数据的帧信息,若在该N帧数据内存在IDR帧则在该IDR帧完成解码后执行步骤8,否则删除当前内存中的帧数据后执行步骤8;
步骤8、销毁GPU中的基线视频流,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中与基线视频流相关的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流,以完成将基线视频流对应的应用与新基线视频流的绑定;
步骤9、将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,对待解码视频流执行解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程。
2.根据权利要求1所述的视频解码会话复用优化方法,其特征在于,所述步骤6之后与所述步骤7之前还包括:
若基线视频流中存在正在由GPU执行解码操作的I帧队列,则将I帧队列中所有I帧的分辨率修改为新分辨率,并重新分配内存,将原始帧数据复制到新分配的内存后释放原始内存,再执行步骤7;否则执行步骤7。
3.根据权利要求1所述的视频解码会话复用优化方法,其特征在于,所述步骤9中所述对待解码视频流执行解码操作还包括:
步骤9.1、若解码操作产生错误且错误位于当前GOP内则执行步骤9.2,若解码操作产生错误且错误位于当前GOP外则执行步骤9.4;
步骤9.2、若待解码视频流为网络视频流,则记录当前GOP信息作为解码帧信息,并缓存下一个GOP信息;若不是网络视频流,则记录当前GOP信息作为解码帧信息;
步骤9.3、销毁GPU中的待解码视频流,将被合并视频流的分辨率作为新分辨率,以新分辨率创建新的解码会话作为新基线视频流;将编解码引擎中基线视频流的上下文中的分辨率修改为新分辨率,并将该上下文绑定到新基线视频流;再将被合并视频流合并到新基线视频流中得到待解码视频流,在待解码视频流中根据解码帧信息从当前GOP的第一帧开始重新解码;
步骤9.4、由编解码引擎构建IDR帧并将其插入到待解码视频流中,将待解码视频流发送至GPU,根据解码帧信息从当前GOP的第一帧开始重新解码。
4.根据权利要求1所述的视频解码会话复用优化方法,其特征在于,所述步骤5中所述在具有相同编码格式的解码会话中选取解码会话作为基线视频流的方式为:依次按照从与待解码视频流的编码码率之差小于阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且B帧最少的解码会话、存在解码历史信息且P帧最少的解码会话到剩余解码帧数最少的解码会话的条件进行选择。
5.根据权利要求1所述的视频解码会话复用优化方法,其特征在于,所述编解码引擎为FFmpeg或GStreamer。
6.根据权利要求1所述的视频解码会话复用优化方法,其特征在于,所述步骤2中所述数量上限为GPU的解码会话数量的上限。
CN202310565065.XA 2023-05-19 2023-05-19 一种基于动态自适应分辨率的视频解码会话复用优化方法 Active CN116320448B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310565065.XA CN116320448B (zh) 2023-05-19 2023-05-19 一种基于动态自适应分辨率的视频解码会话复用优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310565065.XA CN116320448B (zh) 2023-05-19 2023-05-19 一种基于动态自适应分辨率的视频解码会话复用优化方法

Publications (2)

Publication Number Publication Date
CN116320448A CN116320448A (zh) 2023-06-23
CN116320448B true CN116320448B (zh) 2023-07-14

Family

ID=86796373

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310565065.XA Active CN116320448B (zh) 2023-05-19 2023-05-19 一种基于动态自适应分辨率的视频解码会话复用优化方法

Country Status (1)

Country Link
CN (1) CN116320448B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116546273B (zh) * 2023-06-27 2023-08-25 北京麟卓信息科技有限公司 一种基于多解码器动态融合的视频播放优化方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1914922A (zh) * 2004-01-28 2007-02-14 日本电气株式会社 内容的编码、分发及接收的方法、装置、系统以及程序
CN110381322A (zh) * 2019-07-15 2019-10-25 腾讯科技(深圳)有限公司 视频流解码方法、装置、终端设备及存储介质
CN114245192A (zh) * 2021-12-20 2022-03-25 北京数码视讯软件技术发展有限公司 多进程解码播放方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009127961A1 (en) * 2008-04-16 2009-10-22 Nokia Corporation Decoding order recovery in session multiplexing
US20100104006A1 (en) * 2008-10-28 2010-04-29 Pixel8 Networks, Inc. Real-time network video processing
US9075560B2 (en) * 2009-12-10 2015-07-07 Microsoft Technology Licensing, Llc Real-time compression with GPU/CPU

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1914922A (zh) * 2004-01-28 2007-02-14 日本电气株式会社 内容的编码、分发及接收的方法、装置、系统以及程序
CN110381322A (zh) * 2019-07-15 2019-10-25 腾讯科技(深圳)有限公司 视频流解码方法、装置、终端设备及存储介质
CN114245192A (zh) * 2021-12-20 2022-03-25 北京数码视讯软件技术发展有限公司 多进程解码播放方法和装置

Also Published As

Publication number Publication date
CN116320448A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
JP5332773B2 (ja) 画像処理装置および方法
CN1756369B (zh) 在带宽有限网络上的媒体速率变换
CN105451031B (zh) 一种视频转码方法和系统
EP3142381B1 (en) Network video playing method and device
BR122022001681B1 (pt) Sistema de computação, método em um sistema de computação que implementa um decodificador de vídeo e meio de armazenamento legível por computador
CN106131550B (zh) 播放多媒体文件的方法及装置
CN107484011B (zh) 一种视频资源解码方法及装置
CN116320448B (zh) 一种基于动态自适应分辨率的视频解码会话复用优化方法
CN113596518B (zh) 一种用于提升倍速播放性能的视频存取方法
CN109412755B (zh) 一种多媒体数据处理方法、装置及存储介质
CN108449634B (zh) 一种多进程解码的播放方法、计算机设备和存储介质
CN114339408A (zh) 一种视频解码方法
US10116415B2 (en) Transmission device, receiving device, transmission method, and receiving method
JPH10164522A (ja) テレテキストページ内のデータ処理方法及びデコーダ
US11323730B2 (en) Temporally-overlapped video encoding, video decoding and video rendering techniques therefor
KR20160023777A (ko) 그래픽 처리기를 이용한 비디오 디코딩에 대한 픽처 참조 제어
CN116248884B (zh) 一种基于会话复用的多路视频解码方法
CN114615549B (zh) 流媒体seek方法、客户端、存储介质和移动设备
US9070403B2 (en) Processing of scalable compressed video data formats for nonlinear video editing systems
CN112423096B (zh) 播放优化方法及系统
CN106534137B (zh) 媒体流传输方法及装置
CN110636368B (zh) 媒体播放方法、系统、装置及存储介质
CN113259621A (zh) 一种云会议分步录制方法及系统
US12022088B2 (en) Method and apparatus for constructing motion information list in video encoding and decoding and device
CN111010575B (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
GR01 Patent grant
GR01 Patent grant