本发明属于计算机软件开发,具体涉及一种基于会话复用的多路视频解码方法。
背景技术:
1、目前安卓云、图形云及多路视频等服务器的广泛使用对gpu的解码性能提出了更高的要求。在使用安卓云、图形云及多路视频等服务器时,往往会产生由同一gpu并行执行多个进程视频解码的需求,然而,大部分gpu存在可支持的并发解码会话数量的限制,通常情况下gpu中会话与待解码的视频流之间为一一对应的关系,因此会话数量的限制也就间接地限制了gpu处理解码任务的数量,这一限制难以满足逐渐增大的安卓云、图形云及多路视频等服务器对gpu解码能力的需求。
技术实现思路
1、有鉴于此,本发明提供了一种基于会话复用的多路视频解码方法,实现了基于解码会话复用的更多视频流的解码,突破了gpu对解码会话数量的限制。
2、本发明提供的一种基于会话复用的多路视频解码方法,包括以下步骤:
3、步骤1、由编解码引擎打开待解码视频流,获取待解码视频流的编码格式及分辨率,并为待解码视频流增加流标识;
4、步骤2、编解码引擎获取gpu当前已建立的解码会话总数,若解码会话总数小于数量上限则执行步骤3,否则执行步骤4;
5、步骤3、为待解码视频流创建新的解码会话及解码历史信息,并为该解码会话绑定解码器和上下文,再执行标准的解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程;
6、步骤4、在当前已建立的解码会话中查找与待解码视频流的编码格式相同且分辨率不小于待解码视频流分辨率的解码会话,若存在则将其作为基线视频流,将待解码视频流作为被合并视频流执行步骤6,若不存在则执行步骤5;
7、步骤5、在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中选取两个解码会话分别作为基线视频流和被合并视频流,将被合并视频流的待解码帧添加到基线视频流后形成新的待解码视频流,执行步骤3;若不存在,则报错并结束本流程;
8、步骤6、将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,对待解码视频流执行解码操作,并将解码过程中待解码帧的编号及流标识保存在解码历史信息中,结束本流程。
9、进一步地,所述编解码引擎为ffmpeg或gstreamer。
10、进一步地,所述步骤2中所述数量上限为gpu的解码会话数量的上限。
11、进一步地,所述步骤4还包括:
12、步骤4.1、在当前已建立的解码会话中查找与待解码视频流的编码格式相同的解码会话,若存在则执行步骤4.2,否则执行步骤5;
13、步骤4.2、在具有相同编码格式的解码会话中,判断是否存在与待解码视频流的分辨率相同的解码会话,若存在则将查找到的解码会话作为备选会话执行步骤4.3;若不存在则判断是否存在分辨率不小于待解码视频流的解码会话,若存在则将其中分辨率与待解码视频流的分辨率的差值小于第一阈值的解码会话作为备选会话执行步骤4.3,若不存在则执行步骤5;
14、步骤4.3、若备选会话为多个,则按照第一优先顺序确定可复用的解码会话,将该解码会话作为基线视频流、待解码视频流作为被合并视频流,执行步骤6;若按照第一优先顺序未得到可复用的解码会话,则随机从备选会话中选取一个解码会话作为基线视频流、待解码视频流作为被合并视频流,执行步骤6。
15、进一步地,所述步骤4.3中所述第一优先顺序为依次按照从与待解码视频流的编码码率之差小于第二阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且b帧最少的解码会话、存在解码历史信息且p帧最少的解码会话到剩余解码帧数最少的解码会话的条件进行选择。
16、进一步地,所述步骤5还包括:在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中按照第二优先顺序选择两个解码会话分别作为基线视频流和被合并视频流;若按照第二优先顺序未选出两个解码会话则随机从当前已建立的解码会话中选取两个解码会话分别作为基线视频流和被合并视频流。
17、进一步地,所述第二优先顺序为依次按照从分辨率相同、分辨率之差小于第一阈值、编码码率之差小于第二阈值、存在解码历史信息且b帧最少、存在解码历史信息且p帧最少到剩余解码帧数之和最小的条件进行选择。
18、进一步地,所述将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,还包括:
19、若当前待解码帧为i帧,则记录当前待解码帧的原始编号及流标识,顺序为当前待解码帧分配连续编号;若当前待解码帧为p帧,则记录当前待解码帧的原始编号及流标识,并根据其依赖i帧的原始编号及流标识确定该i帧的连续编号,顺序为当前待解码帧分配连续编号并将其依赖i帧的编号修改为连续编号;若当前待解码帧为b帧,则记录当前待解码帧的原始编号及流标识,并根据其依赖的前向i帧和后向i帧的原始编号及流标识确定前向i帧和后向i帧的连续编号,顺序为当前待解码帧分配连续编号并将其依赖的前向i帧和后向i帧的编号修改为连续编号。
20、进一步地,所述将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,还包括:
21、当被合并视频流的分辨率与基线视频流的分辨率不同时,按照基线视频流的分辨率重新分配解码结果空间a,并将被合并视频流的分辨率修改为基线视频流的分辨率;否则使用原始解码结果空间。
22、进一步地,所述对待解码视频流执行解码操作,还包括:待解码操作执行完毕后将解码结果空间a中的解码结果复制到被合并视频流的原始解码结果空间中。
23、有益效果
24、本发明根据gpu当前已建立的解码会话数量与解码会话数量约束之间的关系,确定为待解码视频流分配解码会话的方式,在当前已建立的解码会话数量小于约束时建立新的解码会话,反之则复用已建立的解码会话,由此实现了在不增加gpu硬件的情况下运行更多的视频解码任务,显著提升了安卓云、图形云及多路视频的服务器的视频应用规模。
1.一种基于会话复用的多路视频解码方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的多路视频解码方法,其特征在于,所述编解码引擎为ffmpeg或gstreamer。
3.根据权利要求1所述的多路视频解码方法,其特征在于,所述步骤2中所述数量上限为gpu的解码会话数量的上限。
4.根据权利要求1所述的多路视频解码方法,其特征在于,所述步骤4还包括:
5.根据权利要求4所述的多路视频解码方法,其特征在于,所述步骤4.3中所述第一优先顺序为依次按照从与待解码视频流的编码码率之差小于第二阈值的解码会话、类型为网络视频流的解码会话、存在解码历史信息且b帧最少的解码会话、存在解码历史信息且p帧最少的解码会话到剩余解码帧数最少的解码会话的条件进行选择。
6.根据权利要求1所述的多路视频解码方法,其特征在于,所述步骤5还包括:在当前已建立的解码会话中,判断是否存在具有相同编码格式的解码会话,若存在则在其中按照第二优先顺序选择两个解码会话分别作为基线视频流和被合并视频流;若按照第二优先顺序未选出两个解码会话则随机从当前已建立的解码会话中选取两个解码会话分别作为基线视频流和被合并视频流。
7.根据权利要求6所述的多路视频解码方法,其特征在于,所述第二优先顺序为依次按照从分辨率相同、分辨率之差小于第一阈值、编码码率之差小于第二阈值、存在解码历史信息且b帧最少、存在解码历史信息且p帧最少到剩余解码帧数之和最小的条件进行选择。
8.根据权利要求1所述的多路视频解码方法,其特征在于,所述将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,还包括:
9.根据权利要求1所述的多路视频解码方法,其特征在于,所述将被合并视频流的待解码帧添加到基线视频流中形成新的待解码视频流,还包括:
10.根据权利要求9所述的多路视频解码方法,其特征在于,所述对待解码视频流执行解码操作,还包括:待解码操作执行完毕后将解码结果空间a中的解码结果复制到被合并视频流的原始解码结果空间中。