一种多路视频合成方法、引擎、装置及可读存储介质与流程

文档序号:26588197发布日期:2021-09-10 20:00阅读:212来源:国知局
一种多路视频合成方法、引擎、装置及可读存储介质与流程

1.本发明涉及视频合成技术领域,具体涉及一种多路视频合成方法、引擎、装置及可读存储介质。


背景技术:

2.在直播与视频会议领域,通常需要将多路视频画面按照指定的位置、大小以及上下顺序叠放在一起,合成为一路视频画面。合成的视频画面上一般还会叠加台标、字幕等其它素材。当用户需要改变当前合成画面布局或内容时,为了视觉效果,通常会在切换过程中使用转场动画,比如:淡入淡出、百叶窗擦除、旋转飞入等,但转场效果单一且固定。
3.现有多路视频实时合成的方法与系统通常是基于专用硬件设备,价格昂贵且功能有限,无法灵活地支持自定义画面布局和转场效果。


技术实现要素:

4.发明目的:本发明旨在提供一种多路视频实时合成的技术方案,可以支持任意添加视频源,灵活自定义画面布局和转场效果。
5.技术方案:为实现上述目的,本发明提出以下技术方案:一种多路视频合成方法,所述方法包括以下步骤:(1)获取视频源,将每个视频源预处理为合成引擎规定格式的视频帧;(2)所述合成引擎基于预先创建的场景合成任务所规定的布局方式,调取来自不同视频源的视频帧,并将调取的视频帧布局在同一个画面中,得到合成画面并输出;(3)所述合成引擎在顺序所述场景合成任务的过程中,若接收到转场指令,则根据所述转场指令,将转场前后的两个合成画面的像素值分别存储为第一缓冲帧和第二缓冲帧,然后按照预先构建的处理逻辑,将第一、第二缓冲帧和转场进度值映射为转场画面的像素值,进而得到转场画面,最后,所述合成引擎依次输出当前合成画面、转场画面和转场后的合成画面。
6.针对所述多路视频合成方法,以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
7.可选的,所述步骤(1)中,预处理的具体步骤包括:将所述视频源恢复成原始未压缩的视频帧,再将所述视频帧的像素格式统一转换为所述合成引擎规定的图像格式。
8.可选的,在所述合成引擎输出所述合成画面之前,还对所述合成面进行分辨率变换以及帧率变换。
9.可选的,所述步骤(3)中,转场进度值的计算公式为:
其中,表示转场进度值,表示用户指定的转场效果持续时长,表示转场开启的时间点,表示当前时间点,表示求a和b之中的最大值。
10.可选的,所述步骤(3)中,计算转场画面的像素值的公式为:其中,表示像素点坐标,表示转场画面在坐标处的像素值,为映射函数,表示当前合成画面在坐标处的像素值,表示转场后的合成画面在坐标处的像素值。
11.本发明还提出一种多路视频实时合成引擎,所述合成引擎包括:渲染管线、色彩空间转换器、材质采样器、材质对象、帧缓冲对象;其中,所述色彩空间转换器用于将自不同视频源的视频帧转换为所述合成引擎所支持的统一格式,并将转换后的视频帧写入所述视频源相应的材质对象;所述色彩空间转换器还用于将所述渲染管线输出的合成画面进行缩放和转换;所述材质采样器用于根据用户指令从相应的材质对象中选取视频帧并送入渲染管线;所述渲染管线包括高精度时钟源、顶点着色器、布局着色器和转场着色器;所述高精度时钟源用于提供时钟信号;所述渲染管线在所述时钟信号的驱动下调用所述顶点着色器、画面布局着色器和转场效果着色器,完成所述场景合成任务;所述帧缓冲对象用于存储所述第一缓冲帧和第二缓冲帧。
12.针对所述多路视频实时合成引擎,以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
13.可选的,所述合成引擎还包括输出sink模块,用于对合成图像进行分辨率变换以及帧率变换。
14.本发明还提出一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被所述合成引擎执行时,实现所述的视频合成方法。
15.本发明还提出一种多路视频合成装置,包括解码模块、采集模块、合成引擎、控制模块、编码模块;其中,所述解码模块用于将网络上接收到的压缩视频包解码还原为未压缩的原始视频帧;所述采集模块用于采集本地视频信号,然后经过模数转换,将所述视频信号转换为计算机可处理的视频帧;所述控制模块用于接收用户指令,并依据所述用户指令控制其他模块执行相应操作;所述合成引擎用于在控制模块的控制下进行画面合成;所述编码模块用于对所述合成引擎输出的合成画面进行压缩编码后传输。
16.针对所述多路视频合成装置,以下还提供了若干可选方式,但并不作为对上述总
体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
17.可选的,所述多路视频合成装置还包括显示模块,所述显示模块用于显示所述合成画面。
18.有益效果:与现有技术相比,本发明具有以下优势:1、相对于现有视频合成技术只能按照固定格式显示合成后的视频画面,本发明能够通过预先创建场景合成任务的方式去自定义合成画面的布局方式。
19.2、本发明可以根据需求自定义转场效果。
20.3、本发明中,功能模块架构简单,通过普通的硬件即可实现,无需专用的昂贵设备,成本较低。
附图说明
21.图1为实施例1涉及的多路视频合成方法的流程图;图2为实施例2涉及的多路视频合成引擎的内部结构图;图3为实施例4涉及的多路视频合成装置的功能模块架构示意图;图4为实施例2涉及的合成引擎工作流程图。
具体实施方式
22.下面将结合附图和具体实施例对本发明作更进一步的说明。但应当理解的是,本发明可以以各种形式实施,以下在附图中出示并且在下文中描述的一些示例性和非限制性实施例,并不意图将本发明限制于所说明的具体实施例。
23.应当理解的是,在技术下可行的情况下,以下针对不同实施例所列举的技术特征可以相互组合,从而形成本发明范围内的另外的实施例。此外,本发明所述的特定示例和实施例是非限制性的,并且可以对以上所阐述的结构、步骤、顺序做出相应修改而不脱离本发明的保护范围。
24.实施例1:如图1所示,本实施例示例性地给出一种多路视频合成方法的流程图,可以支持任意添加视频源,灵活自定义画面布局和转场效果,该方法包括以下步骤:步骤1:获取视频源source,将每个视频源source预处理为合成引擎规定格式的视频帧。
25.这里的视频源source可以是来自网络的压缩码流(比如rtsp、rtmp、mpeg

ts等),也可以是本地采集的视频信号(比如sdi、hdmi)。对于网络压缩码流,则创建对应的视频解码器;视频解码器对压缩数据包进行解码,解码输出的原始未压缩的视频帧(yuv或rgb格式)送入多重缓冲队列(buffer queue)。对于每个视频源对象分配唯一的标识id,供画面布局layout配置引用。
26.步骤2:创建场景合成任务。
27.创建场景合成任务——合成场景scene,并为每个合成场景scene对象分配唯一的标识id。合成场景scene是类似“画布”的概念,这个“画布”上如何绘制画面可以通过配置实现。创建一个合成场景scene主要包括创建画面布局overlay配置和创建触发转场
transition。
28.这里的画面布局layout描述了如何在合成场景scene的“画布”上“绘制”视频源source的画面。画面布局的配置描述由顶点着色器和布局着色器实现,这两个着色器由glsl编写的片段着色器(fragment shader)代码片段构成,代码逻辑输出合成场景scene的“画面”上的每一个目标像素的颜色值。通过改变画面布局overlay配置,可以实现将视频源按照配置中指定的方式“绘制”在“画布”上。
29.转场效果transition:改变画面布局layout的同时可以指定转场效果,而转场效果transition的配置描述了如何从当前画面布局layout过渡到下一画面布局layout。转场效果transition由转场着色器实现,转场着色器的配置描述由glsl编写的片段着色器(fragment shader)代码片段构成,代码逻辑输出当前百分比的合成场景scene的“画面”上的每一个目标像素的颜色值。
30.步骤3:创建输出sink模块。
31.输出sink模块是用于对合成图像进行分辨率变换以及帧率变换,以适应显示设备的分辨率要求。输出sink模块可以是视频编码器encoder,用于将合成后的画面重新压缩编码;也可以是显示设备display,用于本地显示和监看。每一个输出sink模块从属于具体的某一个合成场景scene,而每个合成场景scene可以对应多个输出sink模块,输出sink模块对合成场景scene的“画布”进行分辨率变换以及帧率变换,以满足输出不同的输出需求。
32.步骤4:合成画面。
33.合成引擎基于预先创建的场景合成任务所规定的布局方式,调取来自不同视频源的视频帧,并将调取的视频帧布局在同一个画面中,得到合成画面并输出。合成引擎在顺序所述场景合成任务的过程中,若接收到转场指令,则根据所述转场指令,将转场前后的两个合成画面的像素值分别存储为第一缓冲帧和第二缓冲帧,然后按照预先构建的处理逻辑,将第一、第二缓冲帧和转场进度值映射为转场画面的像素值,进而得到转场画面,最后,所述合成引擎依次输出当前合成画面、转场画面和转场后的合成画面。
34.在本步骤中,转场进度值的计算公式为:其中,表示转场进度值,表示用户指定的转场效果持续时长,表示转场开启的时间点,表示当前时间点,表示求a和b之中的最大值。
35.计算转场画面的像素值的公式为:其中,表示像素点坐标,表示转场画面在坐标处的像素值,为映射函数,表示当前合成画面在坐标处的像素值,表示转场后的合成画面在坐标处的像素值。
36.步骤5:移除输出sink、合成场景scene和视频源source
用户根据需求可以随时移动已经创建或添加的sink、scene和source等对象。
37.实施例2:如图2所示,本实施例示例性地给出一种多路视频实时合成引擎,所述合成引擎包括:渲染管线、色彩空间转换器、材质采样器、材质对象、帧缓冲对象。渲染管线包括高精度时钟源、顶点着色器、布局着色器和转场着色器。渲染管线由高精度时钟源驱动,按照渲染逻辑按需调用顶点着色器、画面布局着色器和转场效果着色器。
38.高精度时钟源的定时间隔计算:对于所有添加的视频源source帧率和输出sink帧率,计算所有对象帧率的最小公倍数,即为合成引擎帧率:高精度时钟源的定时间隔(单位为微秒)为:记合成场景scene有个输出,分别为至,则合成场景scene的帧率为其所有输出sink的最小公倍数:合成场景scene的渲染步调值为:输出sink模块的处理步调值为:。
39.合成引擎在高精度时钟源的定时信号驱动下的工作流程如图4所示,按照以下步骤依次执行:s1:更新引擎循环计数器的计数值,每次递增1(初始取值为0)。
40.s2:视频源source输出视频帧的预处理:解码器或者采集设备输出的原始视频帧送入多重输入帧队列中,可根据需求配置输入帧队列深度为双缓冲或者三缓冲。依次从所有视频源source的多重缓冲队列中取得一帧原始格式的画面,利用色彩空间转换器将不同的像素格式转换为合成引擎内部统一格式(rgba32);将转换后的视频帧写入该视频源source所对应的材质对象中。
41.s3:渲染合成场景scene:依次处理所有合成场景scene;对于每一个合成场景scene,按以下步骤根据条件执行相应的操作:s31:判定是否执行渲染:更新该scene的循环计数器的计数值(
初始值为0),每次递增1;如果,则进行步骤s32,否则,对下一个合成场景scene执行步骤s31。
42.s32:判断是否有转场转场需求为用户提出,合成引擎若接收到用户的转场指令则执行有转场的渲染逻辑,否则执行无转场的渲染逻辑。
43.无转场的渲染逻辑:调用当前scene的画面布局着色器代码片段,将输出的像素值写入0号帧缓冲对象中。
44.有转场的渲染逻辑:如果转场正在进行中(进度值progress小于100%),首先调用原来的画面布局着色器代码片段,将输出的像素写入1号帧缓冲对象中;再调用新的画面布局着色器代码片段,将输出的像素写入2号帧缓冲对象中;最后调用转场着色器代码片段,将1号帧缓冲对象、2号帧缓冲对象和转场进度值作为输入参数,生成最终的像素值并写入0号帧缓冲对象中。如果转场已结束(进度值progress等于100%),则执行无转场的渲染逻辑。
45.s4:遍历所有输出sink,对于每一个输出sink,按照以下步骤根据条件执行相应的操作:s41:判定是否处理sink:如果,则进行步骤s42,否则,忽略本次处理。
46.s42:输出分辨率与格式转换。即根据sink的分辨率和像素格式配置,调用色彩空间转换器对0号帧缓冲对象中的合成画面内容进行缩放和转换,并将转换后的画面写入sink的多重缓冲队列中。
47.实施例3:本实施例还提出一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被所述合成引擎执行时,实现所述的视频合成方法。
48.实施例4:图3示例性地给出了一种多路视频合成装置的功能模块架构图,图中包括解码模块、采集模块、合成引擎、控制模块、编码模块、显示模块;其中,所述解码模块用于将网络上接收到的压缩视频包解码还原为未压缩的原始视频帧(yuv或rgb格式)。
49.所述采集模块用于采集本地视频信号(比如sdi、hdmi),然后经过模数转换,将所述视频信号转换为计算机可处理的视频帧(yuv或rgb格式)。
50.所述控制模块用于接收用户指令,经过内部处理后,控制解码、采集、合成、编码和显示模块完成用户指令功能。
51.所述合成引擎用于在控制模块的控制下,创建合成场景scene,并将解码模块或采集模块的输入视频帧按照布局和转场配置,生成合成后的视频帧。
52.所述编码模块用于对所述合成引擎输出的合成画面进行压缩编码后传输。
53.显示模块,将所述合成引擎输出的合成视频帧,按照控制模块的指令要求,输出至外部的显示设备。
54.以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1