一种多布局的云会议录制方法、系统和可读存储介质与流程

文档序号:23270926发布日期:2020-12-11 19:02阅读:144来源:国知局
一种多布局的云会议录制方法、系统和可读存储介质与流程

本申请涉及视频处理领域,更具体的,涉及一种多布局的云会议录制方法、系统和可读存储介质。



背景技术:

云会议是基于云计算技术的一种高效、便捷、低成本的会议形式,可在世界各地使用多种终端方式如电话、手机、电脑、专用终端等通过共享音频、视频、终端桌面、文档、白板等进行远程沟通和远程协助。

云端录制mp4指的是在云服务器端接收远程客户端采集的实体图像数据和音频数据,通过云计算处理之后按mp4标准封装成可播放的mp4媒体文件。在客户端采集处理后发送到服务器端的数据是mp4的源数据,此处定义的源为云会议过程中共享的音频、视频、桌面、文档、白板等实例,源数据就是这些源所产生的数据,也是本服务所接受的数据。如一个摄像头采集到的数据对应一个源,多个摄像头采集到的数据对应多个源。单个源的mp4的生成流程很简单,采集图像数据,编码成h264格式数据,把h264数据按mp4标准写成mp4文件,这样能把多个源采集到的数据生成多个mp4文件,但要想把多个源的数据融合成一个mp4文件,按当前现有技术如ffmpeg命令、视频编辑的python库moviepy,还有其他软件工具是完全可行的,但都是基于单个源生成单个可播放媒体文件之后,再二次加工多个媒体文件融合成单个可播放的媒体文件的。此过程复杂、生成速度慢、生成之后的文件大,尤其在视频数量多,并且要求适应各种布局变化的情况,或者其他更复杂的情况下是没法适用的。

多布局意味着面对的是多个源,并且每个源在电脑屏幕上显示的位置随时可能发生变化,每个源的图像随时插入到正在显示的布局中,也随时都可能从布局中关闭。录制,意味着播放的时候是要还原现场,要保证多个源之间画面的同步关系,要保证多个画面同音频的同步关系。如何做到多个源在多布局的情况下以最直接最方便的形式正确的回放,那就需要设计专门的技术方案来生成一个能通过平常的播放器能够播放的媒体文件,如mp4文件。

在云会议过程中,不只是多个视频源的数据融合,更是有桌面、文档、白板、批注、参会人说话的声音、电脑播放的声音等数据参与融合,是一个比多源视频融合更复杂的场景。



技术实现要素:

为了解决上述至少一个技术问题,本发明提出了一种多布局的云会议录制方法、系统和可读存储介质。

本发明第一方面提供了一种多布局的云会议录制方法,包括:

获取多个源视频数据;

将所述多个源视频数据进行解码,得到每个源视频数据对应的yuv数据;

将多个yuv数据按照预设的布局规则进行合成,得到第一yuv数据;

将所述第一yuv数据进行编码,得到编码后的源视频数据;

根据所述编码后的源视频数据生成视频文件。

本方案中,所述将多个yuv数据按照预设的布局规则进行合成,具体为:

获取预设布局规则的序号;

根据所述布局规则的序号查找预设的布局规则;

根据所述预设布局规则确定窗口的个数以及每个窗口对应的坐标数据信息;

确定每个窗口中每个源视频数据对应的yuv数据;

将每个源视频数据对应的yuv数据按照每个窗口坐标数据信息确定的位置进行合成,得到第一yuv数据。

本方案中,还包括:

判断预设的布局规则是否在多个源视频数据之前获取;

若否,则确定多个源视频数据的关键帧数据和对应的源视频数据的第一布局规则;

将每个源视频数据对应的yuv数据按照所述第一布局规则进行合成,并进行存储,直至获取到预设的布局规则为止。

本方案中,还包括:

检测多个源视频数据是否为文档、白板、批注中的一种或多种;

若是,则将所述源视频数据按照时间顺序生成图像数据;

将所述图像数据转换为对应的yuv数据。

本方案中,所述将多个yuv数据按照预设的布局规则进行合成,还包括:

计算当前第一yuv数据的时间和上一次生成第一yuv数据时间间隔;

判断所述时间间隔是否大于最小生成时间;

若大于最小生成时间,则触发新的第一yuv数据进行编码,得到编码后的源视频数据;

若小于最小生成时间,则将每个源视频数据对应的yuv数据进行存储。

本方案中,还包括:

获取录制开始时间和结束时间;

根据所述开始时间和结束时间生成预设单位的时间空间;

将所述时间空间与对应的数据空间形成映射关系;

通过所述映射关系生成编码后的源视频数据。

本方案中,还包括:

采用第一线程处理第一yuv数据的编码,得到编码后的源视频数据;

采用第二线程处理音频信息,得到编码后的音频数据;

检测第一线程是否处理完第一yuv数据的编码;

若是,则在第二线程将编码后的源视频数据和编码后的音频数据进行合并,得到视频文件。

本发明第二方面一种多布局的云会议录制系统,包括存储器和处理器,所述存储器中包括多布局的云会议录制方法程序,所述多布局的云会议录制方法程序被所述处理器执行时实现如下步骤:

获取多个源视频数据;

将所述多个源视频数据进行解码,得到每个源视频数据对应的yuv数据;

将多个yuv数据按照预设的布局规则进行合成,得到第一yuv数据;

将所述第一yuv数据进行编码,得到编码后的源视频数据;

根据所述编码后的源视频数据生成视频文件。

本方案中,所述将多个yuv数据按照预设的布局规则进行合成,具体为:

获取预设布局规则的序号;

根据所述布局规则的序号查找预设的布局规则;

根据所述预设布局规则确定窗口的个数以及每个窗口对应的坐标数据信息;

确定每个窗口中每个源视频数据对应的yuv数据;

将每个源视频数据对应的yuv数据按照每个窗口坐标数据信息确定的位置进行合成,得到第一yuv数据。

本方案中,还包括:

判断预设的布局规则是否在多个源视频数据之前获取;

若否,则确定多个源视频数据的关键帧数据和对应的源视频数据的第一布局规则;

将每个源视频数据对应的yuv数据按照所述第一布局规则进行合成,并进行存储,直至获取到预设的布局规则为止。

本方案中,还包括:

检测多个源视频数据是否为文档、白板、批注中的一种或多种;

若是,则将所述源视频数据按照时间顺序生成图像数据;

将所述图像数据转换为对应的yuv数据。

本方案中,所述将多个yuv数据按照预设的布局规则进行合成,还包括:

计算当前第一yuv数据的时间和上一次生成第一yuv数据时间间隔;

判断所述时间间隔是否大于最小生成时间;

若大于最小生成时间,则触发新的第一yuv数据进行编码,得到编码后的源视频数据;

若小于最小生成时间,则将每个源视频数据对应的yuv数据进行存储。

本方案中,还包括:

获取录制开始时间和结束时间;

根据所述开始时间和结束时间生成预设单位的时间空间;

将所述时间空间与对应的数据空间形成映射关系;

通过所述映射关系生成编码后的源视频数据。

本方案中,还包括:

采用第一线程处理第一yuv数据的编码,得到编码后的源视频数据;

采用第二线程处理音频信息,得到编码后的音频数据;

检测第一线程是否处理完第一yuv数据的编码;

若是,则在第二线程将编码后的源视频数据和编码后的音频数据进行合并,得到视频文件。

本发明第三方面提供一种计算机可读存储介质,所述计算机可读存储介质中包括一种多布局的云会议录制方法程序,所述一种多布局的云会议录制方法程序被处理器执行时,实现如上述任一项所述的一种多布局的云会议录制方法的步骤。

本发明提供的一种多布局的云会议录制方法、系统和可读存储介质,将不同源视频数据进行yuv转换,然后依照布局规则进行编码生成最终的视频文件,可以加快视频合成的速度,简化生成的流程。尤其在视频数量多,并且要求适应各种布局变化的情况,或者其他更复杂的情况下都能够适用。

附图说明

图1示出了本发明一种多布局的云会议录制方法的流程图;

图2示出了本发明不同源按布局合成之后的示意图;

图3示出了本发明布局规则的示意图;

图4示出了本发明一种多布局的云会议录制系统的框图。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

yuv:一种视频图像中使用的颜色空间,有y、u、v三个分量。y表示明亮度(luminance或luma),也就是灰度值。u和v表示色度(chrominance或chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

yuv420p的p:平面planar,对于planar的yuv格式,先连续存储所有像素点的y,紧接着存储所有像素点的u,随后是所有像素点的v。

h264:一种视频编解码标准,h264数据就是按这种标准编解码后的数据。

ffmpeg:一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源的库。

图1示出了本发明一种多布局的云会议录制方法的流程图。

如图1所示,本发明公开了一种多布局的云会议录制方法,包括:

s102,获取多个源视频数据;

s104,将所述多个源视频数据进行解码,得到每个源视频数据对应的yuv数据;

s106,将多个yuv数据按照预设的布局规则进行合成,得到第一yuv数据;

s108,将所述第一yuv数据进行编码,得到编码后的源视频数据;

s110,根据所述编码后的源视频数据生成视频文件。

需要说明的是,本发明中所提的各种实施例,是为了更好说明本发明的发明点以及解决如此场景下如何生成一个可播放的录制回放文件,以mp4文件为例但不仅限于mp4文件。

需要说明的是,所述源视频数据可以为视频数据、桌面数据、文档数据、白板数据、批注数据中的一种或多种。

图2示出了本发明不同源按布局合成之后的示意图。组成mp4画面的数据单元是一帧h264数据,多个源数据在多个布局窗口的情况下,一帧h264数据融合的是当前布局中所有源的画面信息,这些信息如果作为一帧画面显示出来的话是按布局划分的位置有序分布的。

一帧h264数据并非简单的把每个源的h264数据简单按位置填充,而是通过复杂的解码编码过程得到的。h264数据可以通过yuv数据编码得到,yuv数据也可以通过h264数据解码得到。特定的yuv类型对应有固定的数据存储格式,所以。要想得到自己定制的h264数据帧,就需要先定制自己的yuv数据。本发明使用的是yuv420p的存储方式,存储的时候,事先设定一固定像素的空间大小,在这个像素空间中按yuv420p的存储格式计算好y、u、v这3个分量的存储位置,这一固定像素空间对应的就是将要合成的多个源的总布局空间,这个布局空间后面统一称为yuv数据布局或者yuv布局。当每个源的h264数据进来的时候,先解码每个源的每一帧h264数据为yuv数据,然后再按该源在布局中的窗口位置映射到yuv布局中,把其yuv各分量数据拷贝到其所映射的位置,如此,多个源映射进来的结果就得到多个源在yuv布局空间中的yuv分布,即多个源的yuv合成了一个大的yuv,即第一yuv数据,最后把所述第一yuv数据编码成一帧h264数据输出,得到的就是多个源的画面分布在一个大布局窗口中的总体画面。

根据本发明实施例,所述将多个yuv数据按照预设的布局规则进行合成,具体为:

获取预设布局规则的序号;

根据所述布局规则的序号查找预设的布局规则;

根据所述预设布局规则确定窗口的个数以及每个窗口对应的坐标数据信息;

确定每个窗口中每个源视频数据对应的yuv数据;

将每个源视频数据对应的yuv数据按照每个窗口坐标数据信息确定的位置进行合成,得到第一yuv数据。

需要说明的是,上面一帧h264数据是由多个源按特定布局形式分布显示的多个小窗口,在云会议过程中,这些窗口的分布是变化的,是随时可以调整的,所以在云会议的录制过程中,要生成的每帧h264数据都要响应最新的布局变化,按最新布局变化进行调整显示。布局形式由客户端定义,通过消息的形式按特定的协议传到服务器端,服务器端只需按约定读懂客户端传过来的是什么布局,然后按该布局的变化去控制每一帧数据的生成。

图3示出了本发明布局规则的示意图。

如图3所示,首先服务器要知道已经定义的所有可能的布局,针对每一个布局取一个布局名字,同客户端协定好每一个布局窗口的窗口id。服务端根据窗口呈现形式计算出每一个布局小窗口相对于总布局大窗口的相对位置,这些相对位置以起始点相对坐标和相对宽高来记录,每个值代表的是在总布局宽高中所占的比例,即在最后计算真实坐标和真实宽高的时候需要通过乘以总布局窗口的宽高得到。如均匀分布的4窗口average4布局,它的第一个小窗口的起始坐标为(0,0),相对宽度为0.5,相对高度为0.5。第二个小窗口的起始坐标为(0.5,0),相对宽度为0.5,相对高度为0.5。同样第三个小窗口的起始坐标是(0,0.5),第四个小窗口的起始坐标是(0.5,0.5),因为这时一个均分的布局,所以相对宽高都是0.5。如果总布局的窗口大小为1280*720,即总宽为1280,总高为720,第3个窗口的真实起始坐标为(0,720*0.5=360),4个窗口的宽都是1280*0.5=640,高都是720*0.5=360。当然也可以配置每个布局窗口的绝对值,之所以配置相对值而不配绝对值那是因为这样可以随时调整总的布局窗口的大小,如配置了1280*720的大布局可以重新改成配置为1920*1080的大窗口,这个根据需要随时调整。这些布局的每个窗口通过人为计算之后全都配置在一个服务可读取到的配置文件中,当启动服务的时候把这些配置加载到程序的内存中,每当收到客户端传上来的布局信息时,解析出传上来的布局名字,然后对应着布局名字去加载好的配置文件中找出对应窗口的相对坐标,再通过计算得到绝对坐标。

布局的每个窗口的位置确定之后,在程序内存中就映射好了每个源的yuv数据到整个大布局窗口,这个大布局窗口后面统一称为yuv数据布局,可以简称为yuv布局,它是承载全部源数据并决定最后输出的画面形态的中间数据。哪个源对应于哪一个小窗口是布局变化的时候由客户端发送布局信息的时候带过来的,一旦布局稳定,则该源对应的窗口就是固定的,显示的位置也是固定的,只有当布局再次变化的时候,该源的显示位置才可能随着布局的变化而重新计算调整。

根据本发明实施例,还包括:

判断预设的布局规则是否在多个源视频数据之前获取;

若否,则确定多个源视频数据的关键帧数据和对应的源视频数据的第一布局规则;

将每个源视频数据对应的yuv数据按照所述第一布局规则进行合成,并进行存储,直至获取到预设的布局规则为止。

需要说明的是,视频和桌面是源数据里面最重要的两类源,在布局确定好的情况下,如果来的是完整的一帧h264视频和桌面的数据的话只需解码成yuv之后在整体的yuv大布局中对号入座即可。如果来的是拆分成多个数据包之后h264数据,则需进行组帧操作,把进来的包重新组装成一帧h264数据之后再进行yuv解码操作,如果过来的是jpeg数据,则需通过调用ffmpeg提供的接口把jpeg数据转成yuv数据,如果还有其他编码方式的数据也需要进行yuv转换,转成的这一帧yuv数据就是yuv总布局里面的合成单元。视频和桌面数据还有一些和布局相关的异常处理操作。布局是数据赖以生存的地方,没有布局情况下如果数据先来是找不到自己存放的位置的,所以要不保证数据来的时候布局消息必须先来,要不就选择丢失数据等待布局过来。在网络传输中消息的丢失或者消息和数据的先后顺序可能无法百分之百保证,需要应对一些异常情况进行处理。如果出现关键帧来了但布局消息丢失或者布局消息还没有来,则由数据驱动去主动创建该源的布局作为临时的存储之地,等待布局来的时候覆盖临时布局。由于解码和编码一帧数据的时候是需要有关键帧作为前置条件的,所以当出现过来的第一帧数据不是关键帧的时候需要把下一个关键帧来之前的所有非关键帧全都丢弃。

根据本发明实施例,还包括:

检测多个源视频数据是否为文档、白板、批注中的一种或多种;

若是,则将所述源视频数据按照时间顺序生成图像数据;

将所述图像数据转换为对应的yuv数据。

文档。在云会议过程中,文档会上传到云端打印成jpeg图片进行存储,文档每翻一页布局变化一次,在布局中提供了当前翻的是哪一页文档,通过这一页文档信息到磁盘中读取对应的jpeg图片,由于文档一般是带滚动条的,所以在布局信息中要告知当前文档页显示的比例,然后按该比例截取已经读取到内存中的jpeg图片转换成yuv数据,然后把yuv数据映射到它的布局窗口中。

白板。在云会议过程中白板是一些具体的点线面数据,在服务器收到的白板数据是一些记录白板信息的结构体,这些信息包括点线面的大小、形状、坐标、色彩等。在没有这些白板信息的情况下,可以创建一个固定大小的背景色为白色的白板yuv数据,即空白白板。在云会议白板绘制过程中,每一笔每一画都实时传递到服务器中。在录制服务器会累计的保存每一笔数据,当每一笔白板信息传到服务器的时候都会触发白板的重新绘制,每次的绘制就是将当前已有的全部信息全部和空白白板一起重新生成一个新的白板yuv,然后把这个白板yuv映射到布局窗口中去。白板有分页,每一页的白板信息都保存在内存中,当收到翻页消息的时候,取出该页的全部白板信息重新生成一遍yuv数据,然后映射到布局中覆盖上一页的数据。

批注。批注的内容就是白板的内容,批注不同于白板的地方在于它绘制的背景不是空白白板,而是有内容的背景图。如桌面的批注是选取了批注时刻的一帧桌面图像来作为背景,文档的批注是选取了当前文档页来做批注的背景。所以在生成批注yuv的时候要事先获取它的背景yuv。如生成桌面批注,则需要取出当前这一帧桌面yuv数据,但布局中的yuv数据是已经合成了的yuv,不能取出来,所以只能在每次桌面数据映射到布局之前先保存一帧yuv桌面数据待批注的时候使用。同理,文档在加载jpeg图片后转为yuv的时候也需要保存一帧原样的yuv。这样,当要生成批注yuv的时候取出背景yuv数据同白板点线面信息重新绘制合成一个新的yuv,然后再映射到总体布局中替换掉原先批注背景所在的位置。

根据本发明实施例,所述将多个yuv数据按照预设的布局规则进行合成,还包括:

计算当前第一yuv数据的时间和上一次生成第一yuv数据时间间隔;

判断所述时间间隔是否大于最小生成时间;

若大于最小生成时间,则触发新的第一yuv数据进行编码,得到编码后的源视频数据;

若小于最小生成时间,则将每个源视频数据对应的yuv数据进行存储。

需要说明的是,所述最小时间的确定方法,具体为:

获取每个源视频数据的帧率;

将最大的帧率对应的时间确定为最小时间。

合成帧率。以上所述都是一帧数据的生成过程,在云录制过程中,要生成可播放的mp4文件,是需要把无数个h264按一定的帧率在时间轴上进行排布,这就需要有一个固定的方式来源源不断的在时间轴上产生h264数据。每隔多少时间合成一帧h264数据,这就是合成帧率。

合成帧率指的就是按什么样的频率去把布局中的yuv合成一帧h264数据。如果按10帧/秒的帧率计算,则上述yuv布局数据需要100毫秒生成一帧h264数据。从合成帧率的概念和特性来看,第一想法就是通过设置定时器来实现的,即配置帧率,然后按配置的帧率计算需要多少毫秒生成一帧,由定时器按这个时间定时完成。

对于多源并且每个源具体不同的帧率的云会议而言,定时器的方法存在一些缺陷,只能选择性使用。例如源数据是15帧/秒的视频数据,如果设置的是10帧/秒的帧率去生成h264数据,则视频数据每秒会丢失5帧,这5帧丢失是因为生成h264帧的时间还没到,所以存储在布局中数据会被新映射进来的覆盖。如果设置15帧每秒,那低于这个帧率的其他源就会被强制执行这个合成帧率,如白板,在某个时间段内可能是一秒钟一帧,如果被强制执行为一秒钟15帧,那白板的这一帧数据就得被重复利用15次。对视频数据而言,一秒15帧,一帧66毫秒,这只是个均值,并非严格的每66毫秒会来一帧,有可能50、60毫秒来一帧,有可能70、80毫秒来一帧,这样不说其他的源,光是视频就要面临要设置50、60毫秒还是70、80毫秒的问题。所以使用定时器时很难设定出一个合适的定时值。在设置帧率的时候如果按最高帧率的源来设置,那低帧率的源在布局中的yuv数据会被不断的重复利用,一个是增加了编码的时间,降低编码效率,一个是增加了文件的大小,占用更多的存储空间。如果设置的帧率低于源数据的帧率,则源数据可能会丢失。

本发明主要使用的是不需要设置定时器的,是通过数据驱动的方式来生成h264数据。通过帧率设置生成一帧数据所用的最小时间,即当前布局中所有的源,每有数据映射进入布局的时候,计算当前数据的时间和上一次生成的时间之差,如果大于最小生成时间,则触发新的一帧h264数据的生成,如果小于最小生成时间的,则存储进yuv布局中等待下个数据的到来。在云会议过程中,由于每一类源的帧率不相同,如视频的帧率是15帧每秒、桌面的是8帧每秒、文档白板的没有帧率,这种情况下使用数据驱动方式作为合成帧率是比较合适的。使用这种方法,只需把合成时的最小时间间隔设置为帧率最大的那个源的一帧所占的时间即可,如按视频15帧每秒的帧率算,那一帧就是66毫秒。这样当源中有视频的时候,每次视频数据进入的时候,只要计算相邻两次进入的时间间隔不小于66毫秒都会触发一次h264帧的合成。由于设置的最小下限是帧率最大的那个源一帧所需要的时间,所以其它更低帧率的源的数据过来的时候基本都是大于这个时间间隔的,所以都能触发h264数据的合成。

根据本发明实施例,所述编码后的源视频数据的最小帧率为预设的。

当多个源共处一个布局时,合成帧率就是帧率最大的那个源的帧率,如当有视频、桌面、文档、白板的时候,合成帧率就是视频的帧率,当没有视频时那就由桌面的帧率来决定合成帧率,当没有桌面时,文档和白板就按不固定的帧率进行合成。在遇到只有文档和白板的情况,为了避免帧率太小导致一些播放器播放的兼容问题,可以设置最小合成帧率,如最小合成帧率设置为3帧每秒,则文档白板数据过来的时候,需要对比上次合成的时间,按时间差进行补帧操作,如过了1秒之后才有数据过来,那则需要额外补2帧,补的这两帧数据就是重复利用yuv布局中的数据,即在合成输出本次数据之前,先利用先前的yuv布局数据,设置上他们在时间轴上对应的时间戳,以不同的时间戳相同的数据合成输出h264数据。

根据本发明实施例,还包括:

获取录制开始时间和结束时间;

根据所述开始时间和结束时间生成预设单位的时间空间;

将所述时间空间与对应的数据空间形成映射关系;

通过所述映射关系生成编码后的源视频数据。

需要说明的是,云会议录制生成mp4,需要在多个源之间实现同步播放,这就需要在生成每一帧h264是设置准确的播放时间戳pts,本发明以收到每个数据的服务器毫秒时间为基准来计算每帧h264数据的pts。以这场录制开启录制的消息的时间作为起始时间,以停止录制或者结束会议的消息时间作为结束时间,把起始时间到结束时间的这段时间空间映射到一个简单的数据空间中,后面所有的数据到达服务器的时间也都按时间间隔分布映射到这个数据空间中。其中预设单位可以为本领域技术人员根据实际需要设置的,例如,单位为毫秒。如时间空间为(1599469263000,1599469863000),1599469863000-1599469263000=600000,映射到数据空间(0,60000)或者(1,60001),这样当中途有暂停录制时,在这个简单的数据空间中减去暂停的时间长度,如中途有半分钟的暂停,半分钟=30000毫秒,60001-30000=30001,则这个数据空间压缩为(1,30001),暂停半分钟之后过来的数据的时间也相应的压缩30000。这样每个数据的pts对应着自己到达服务器的时间,多个源在一帧的时间间隔之内达到,那合成之后就是同时显示,即生成的mp4播放时看到的每一帧都是在这一帧时间内达到的数据。以服务器收到数据的时间为准,多个源的数据同步达到同步显示,这样就做到了多源布局中视频间的同步播放。

根据本发明实施例,还包括:

采用第一线程处理第一yuv数据的编码,得到编码后的源视频数据;

采用第二线程处理音频信息,得到编码后的音频数据;

检测第一线程是否处理完第一yuv数据的编码;

若是,则在第二线程将编码后的源视频数据和编码后的音频数据进行合并,得到视频文件。

需要说明的是,上述主要讲的是mp4画面的生成过程,mp4文件除了视频画面还需要有音频。云会议中的音频处理和视频处理都是一个复杂编解码过程。现有的技术中,ffmpeg提供了生成mp4时如何合流音视频的方法,即创建mp4文件的时候,同时创建一个音频流和一个视频流,然后分别往各自的流中写数据即可。但在云会议录制mp4的过程中,音频和视频的处理都是耗时操作,需要选择两个不同的线程进行处理。在多线程处理的过程中,由于多个线程同时访问一个文件流势必需要对流进行加锁处理,这样做控制复制,效率也会降低。本发明使用的方法是,音频的处理走一个线程,视频的h264编码走另一个线程,由于视频的处理一般都较音频处理耗时,所以流的创建和音频合流写mp4文件处于同一个线程,这样就需要视频编码之后要倒线程到音频的线程中,这就需要在音频的线程中给视频设计一个队列,每次视频编码完成之后把数据导入到队列中,每次音频编码完成之后在写数据时检查视频队列,如果有数据则把视频数据写入mp4的视频流中,同时把音频数据写入mp4的音频流中,这样整个过程只需对音频线程中的视频数据队列简单的加锁,如此达到高效的音视频编码合流。

图4示出了本发明一种多布局的云会议录制系统的框图。

本发明第二方面还提供了一种多布局的云会议录制系统4,包括存储器41和处理器42,所述存储器中包括多布局的云会议录制方法程序,所述多布局的云会议录制方法程序被所述处理器执行时实现如下步骤:

获取多个源视频数据;

将所述多个源视频数据进行解码,得到每个源视频数据对应的yuv数据;

将多个yuv数据按照预设的布局规则进行合成,得到第一yuv数据;

将所述第一yuv数据进行编码,得到编码后的源视频数据;

根据所述编码后的源视频数据生成视频文件。

需要说明的是,本发明中所提的各种实施例,是为了更好说明本发明的发明点以及解决如此场景下如何生成一个可播放的录制回放文件,以mp4文件为例但不仅限于mp4文件。

需要说明的是,所述源视频数据可以为视频数据、桌面数据、文档数据、白板数据、批注数据中的一种或多种。

图2示出了本发明不同源按布局合成之后的示意图。组成mp4画面的数据单元是一帧h264数据,多个源数据在多个布局窗口的情况下,一帧h264数据融合的是当前布局中所有源的画面信息,这些信息如果作为一帧画面显示出来的话是按布局划分的位置有序分布的。

一帧h264数据并非简单的把每个源的h264数据简单按位置填充,而是通过复杂的解码编码过程得到的。h264数据可以通过yuv数据编码得到,yuv数据也可以通过h264数据解码得到。特定的yuv类型对应有固定的数据存储格式,所以。要想得到自己定制的h264数据帧,就需要先定制自己的yuv数据。本发明使用的是yuv420p的存储方式,存储的时候,事先设定一固定像素的空间大小,在这个像素空间中按yuv420p的存储格式计算好y、u、v这3个分量的存储位置,这一固定像素空间对应的就是将要合成的多个源的总布局空间,这个布局空间后面统一称为yuv数据布局或者yuv布局。当每个源的h264数据进来的时候,先解码每个源的每一帧h264数据为yuv数据,然后再按该源在布局中的窗口位置映射到yuv布局中,把其yuv各分量数据拷贝到其所映射的位置,如此,多个源映射进来的结果就得到多个源在yuv布局空间中的yuv分布,即多个源的yuv合成了一个大的yuv,即第一yuv数据,最后把所述第一yuv数据编码成一帧h264数据输出,得到的就是多个源的画面分布在一个大布局窗口中的总体画面。

根据本发明实施例,所述将多个yuv数据按照预设的布局规则进行合成,具体为:

获取预设布局规则的序号;

根据所述布局规则的序号查找预设的布局规则;

根据所述预设布局规则确定窗口的个数以及每个窗口对应的坐标数据信息;

确定每个窗口中每个源视频数据对应的yuv数据;

将每个源视频数据对应的yuv数据按照每个窗口坐标数据信息确定的位置进行合成,得到第一yuv数据。

需要说明的是,上面一帧h264数据是由多个源按特定布局形式分布显示的多个小窗口,在云会议过程中,这些窗口的分布是变化的,是随时可以调整的,所以在云会议的录制过程中,要生成的每帧h264数据都要响应最新的布局变化,按最新布局变化进行调整显示。布局形式由客户端定义,通过消息的形式按特定的协议传到服务器端,服务器端只需按约定读懂客户端传过来的是什么布局,然后按该布局的变化去控制每一帧数据的生成。

图3示出了本发明布局规则的示意图。

如图3所示,首先服务器要知道已经定义的所有可能的布局,针对每一个布局取一个布局名字,同客户端协定好每一个布局窗口的窗口id。服务端根据窗口呈现形式计算出每一个布局小窗口相对于总布局大窗口的相对位置,这些相对位置以起始点相对坐标和相对宽高来记录,每个值代表的是在总布局宽高中所占的比例,即在最后计算真实坐标和真实宽高的时候需要通过乘以总布局窗口的宽高得到。如均匀分布的4窗口average4布局,它的第一个小窗口的起始坐标为(0,0),相对宽度为0.5,相对高度为0.5。第二个小窗口的起始坐标为(0.5,0),相对宽度为0.5,相对高度为0.5。同样第三个小窗口的起始坐标是(0,0.5),第四个小窗口的起始坐标是(0.5,0.5),因为这时一个均分的布局,所以相对宽高都是0.5。如果总布局的窗口大小为1280*720,即总宽为1280,总高为720,第3个窗口的真实起始坐标为(0,720*0.5=360),4个窗口的宽都是1280*0.5=640,高都是720*0.5=360。当然也可以配置每个布局窗口的绝对值,之所以配置相对值而不配绝对值那是因为这样可以随时调整总的布局窗口的大小,如配置了1280*720的大布局可以重新改成配置为1920*1080的大窗口,这个根据需要随时调整。这些布局的每个窗口通过人为计算之后全都配置在一个服务可读取到的配置文件中,当启动服务的时候把这些配置加载到程序的内存中,每当收到客户端传上来的布局信息时,解析出传上来的布局名字,然后对应着布局名字去加载好的配置文件中找出对应窗口的相对坐标,再通过计算得到绝对坐标。

布局的每个窗口的位置确定之后,在程序内存中就映射好了每个源的yuv数据到整个大布局窗口,这个大布局窗口后面统一称为yuv数据布局,可以简称为yuv布局,它是承载全部源数据并决定最后输出的画面形态的中间数据。哪个源对应于哪一个小窗口是布局变化的时候由客户端发送布局信息的时候带过来的,一旦布局稳定,则该源对应的窗口就是固定的,显示的位置也是固定的,只有当布局再次变化的时候,该源的显示位置才可能随着布局的变化而重新计算调整。

根据本发明实施例,还包括:

判断预设的布局规则是否在多个源视频数据之前获取;

若否,则确定多个源视频数据的关键帧数据和对应的源视频数据的第一布局规则;

将每个源视频数据对应的yuv数据按照所述第一布局规则进行合成,并进行存储,直至获取到预设的布局规则为止。

需要说明的是,视频和桌面是源数据里面最重要的两类源,在布局确定好的情况下,如果来的是完整的一帧h264视频和桌面的数据的话只需解码成yuv之后在整体的yuv大布局中对号入座即可。如果来的是拆分成多个数据包之后h264数据,则需进行组帧操作,把进来的包重新组装成一帧h264数据之后再进行yuv解码操作,如果过来的是jpeg数据,则需通过调用ffmpeg提供的接口把jpeg数据转成yuv数据,如果还有其他编码方式的数据也需要进行yuv转换,转成的这一帧yuv数据就是yuv总布局里面的合成单元。视频和桌面数据还有一些和布局相关的异常处理操作。布局是数据赖以生存的地方,没有布局情况下如果数据先来是找不到自己存放的位置的,所以要不保证数据来的时候布局消息必须先来,要不就选择丢失数据等待布局过来。在网络传输中消息的丢失或者消息和数据的先后顺序可能无法百分之百保证,需要应对一些异常情况进行处理。如果出现关键帧来了但布局消息丢失或者布局消息还没有来,则由数据驱动去主动创建该源的布局作为临时的存储之地,等待布局来的时候覆盖临时布局。由于解码和编码一帧数据的时候是需要有关键帧作为前置条件的,所以当出现过来的第一帧数据不是关键帧的时候需要把下一个关键帧来之前的所有非关键帧全都丢弃。

根据本发明实施例,还包括:

检测多个源视频数据是否为文档、白板、批注中的一种或多种;

若是,则将所述源视频数据按照时间顺序生成图像数据;

将所述图像数据转换为对应的yuv数据。

文档。在云会议过程中,文档会上传到云端打印成jpeg图片进行存储,文档每翻一页布局变化一次,在布局中提供了当前翻的是哪一页文档,通过这一页文档信息到磁盘中读取对应的jpeg图片,由于文档一般是带滚动条的,所以在布局信息中要告知当前文档页显示的比例,然后按该比例截取已经读取到内存中的jpeg图片转换成yuv数据,然后把yuv数据映射到它的布局窗口中。

白板。在云会议过程中白板是一些具体的点线面数据,在服务器收到的白板数据是一些记录白板信息的结构体,这些信息包括点线面的大小、形状、坐标、色彩等。在没有这些白板信息的情况下,可以创建一个固定大小的背景色为白色的白板yuv数据,即空白白板。在云会议白板绘制过程中,每一笔每一画都实时传递到服务器中。在录制服务器会累计的保存每一笔数据,当每一笔白板信息传到服务器的时候都会触发白板的重新绘制,每次的绘制就是将当前已有的全部信息全部和空白白板一起重新生成一个新的白板yuv,然后把这个白板yuv映射到布局窗口中去。白板有分页,每一页的白板信息都保存在内存中,当收到翻页消息的时候,取出该页的全部白板信息重新生成一遍yuv数据,然后映射到布局中覆盖上一页的数据。

批注。批注的内容就是白板的内容,批注不同于白板的地方在于它绘制的背景不是空白白板,而是有内容的背景图。如桌面的批注是选取了批注时刻的一帧桌面图像来作为背景,文档的批注是选取了当前文档页来做批注的背景。所以在生成批注yuv的时候要事先获取它的背景yuv。如生成桌面批注,则需要取出当前这一帧桌面yuv数据,但布局中的yuv数据是已经合成了的yuv,不能取出来,所以只能在每次桌面数据映射到布局之前先保存一帧yuv桌面数据待批注的时候使用。同理,文档在加载jpeg图片后转为yuv的时候也需要保存一帧原样的yuv。这样,当要生成批注yuv的时候取出背景yuv数据同白板点线面信息重新绘制合成一个新的yuv,然后再映射到总体布局中替换掉原先批注背景所在的位置。

根据本发明实施例,所述将多个yuv数据按照预设的布局规则进行合成,还包括:

计算当前第一yuv数据的时间和上一次生成第一yuv数据时间间隔;

判断所述时间间隔是否大于最小生成时间;

若大于最小生成时间,则触发新的第一yuv数据进行编码,得到编码后的源视频数据;

若小于最小生成时间,则将每个源视频数据对应的yuv数据进行存储。

需要说明的是,所述最小时间的确定方法,具体为:

获取每个源视频数据的帧率;

将最大的帧率对应的时间确定为最小时间。

合成帧率。以上所述都是一帧数据的生成过程,在云录制过程中,要生成可播放的mp4文件,是需要把无数个h264按一定的帧率在时间轴上进行排布,这就需要有一个固定的方式来源源不断的在时间轴上产生h264数据。每隔多少时间合成一帧h264数据,这就是合成帧率。

合成帧率指的就是按什么样的频率去把布局中的yuv合成一帧h264数据。如果按10帧/秒的帧率计算,则上述yuv布局数据需要100毫秒生成一帧h264数据。从合成帧率的概念和特性来看,第一想法就是通过设置定时器来实现的,即配置帧率,然后按配置的帧率计算需要多少毫秒生成一帧,由定时器按这个时间定时完成。

对于多源并且每个源具体不同的帧率的云会议而言,定时器的方法存在一些缺陷,只能选择性使用。例如源数据是15帧/秒的视频数据,如果设置的是10帧/秒的帧率去生成h264数据,则视频数据每秒会丢失5帧,这5帧丢失是因为生成h264帧的时间还没到,所以存储在布局中数据会被新映射进来的覆盖。如果设置15帧每秒,那低于这个帧率的其他源就会被强制执行这个合成帧率,如白板,在某个时间段内可能是一秒钟一帧,如果被强制执行为一秒钟15帧,那白板的这一帧数据就得被重复利用15次。对视频数据而言,一秒15帧,一帧66毫秒,这只是个均值,并非严格的每66毫秒会来一帧,有可能50、60毫秒来一帧,有可能70、80毫秒来一帧,这样不说其他的源,光是视频就要面临要设置50、60毫秒还是70、80毫秒的问题。所以使用定时器时很难设定出一个合适的定时值。在设置帧率的时候如果按最高帧率的源来设置,那低帧率的源在布局中的yuv数据会被不断的重复利用,一个是增加了编码的时间,降低编码效率,一个是增加了文件的大小,占用更多的存储空间。如果设置的帧率低于源数据的帧率,则源数据可能会丢失。

本发明主要使用的是不需要设置定时器的,是通过数据驱动的方式来生成h264数据。通过帧率设置生成一帧数据所用的最小时间,即当前布局中所有的源,每有数据映射进入布局的时候,计算当前数据的时间和上一次生成的时间之差,如果大于最小生成时间,则触发新的一帧h264数据的生成,如果小于最小生成时间的,则存储进yuv布局中等待下个数据的到来。在云会议过程中,由于每一类源的帧率不相同,如视频的帧率是15帧每秒、桌面的是8帧每秒、文档白板的没有帧率,这种情况下使用数据驱动方式作为合成帧率是比较合适的。使用这种方法,只需把合成时的最小时间间隔设置为帧率最大的那个源的一帧所占的时间即可,如按视频15帧每秒的帧率算,那一帧就是66毫秒。这样当源中有视频的时候,每次视频数据进入的时候,只要计算相邻两次进入的时间间隔不小于66毫秒都会触发一次h264帧的合成。由于设置的最小下限是帧率最大的那个源一帧所需要的时间,所以其它更低帧率的源的数据过来的时候基本都是大于这个时间间隔的,所以都能触发h264数据的合成。

根据本发明实施例,所述编码后的源视频数据的最小帧率为预设的。

当多个源共处一个布局时,合成帧率就是帧率最大的那个源的帧率,如当有视频、桌面、文档、白板的时候,合成帧率就是视频的帧率,当没有视频时那就由桌面的帧率来决定合成帧率,当没有桌面时,文档和白板就按不固定的帧率进行合成。在遇到只有文档和白板的情况,为了避免帧率太小导致一些播放器播放的兼容问题,可以设置最小合成帧率,如最小合成帧率设置为3帧每秒,则文档白板数据过来的时候,需要对比上次合成的时间,按时间差进行补帧操作,如过了1秒之后才有数据过来,那则需要额外补2帧,补的这两帧数据就是重复利用yuv布局中的数据,即在合成输出本次数据之前,先利用先前的yuv布局数据,设置上他们在时间轴上对应的时间戳,以不同的时间戳相同的数据合成输出h264数据。

根据本发明实施例,还包括:

获取录制开始时间和结束时间;

根据所述开始时间和结束时间生成预设单位的时间空间;

将所述时间空间与对应的数据空间形成映射关系;

通过所述映射关系生成编码后的源视频数据。

需要说明的是,云会议录制生成mp4,需要在多个源之间实现同步播放,这就需要在生成每一帧h264是设置准确的播放时间戳pts,本发明以收到每个数据的服务器毫秒时间为基准来计算每帧h264数据的pts。以这场录制开启录制的消息的时间作为起始时间,以停止录制或者结束会议的消息时间作为结束时间,把起始时间到结束时间的这段时间空间映射到一个简单的数据空间中,后面所有的数据到达服务器的时间也都按时间间隔分布映射到这个数据空间中。其中预设单位可以为本领域技术人员根据实际需要设置的,例如,单位为毫秒。如时间空间为(1599469263000,1599469863000),1599469863000-1599469263000=600000,映射到数据空间(0,60000)或者(1,60001),这样当中途有暂停录制时,在这个简单的数据空间中减去暂停的时间长度,如中途有半分钟的暂停,半分钟=30000毫秒,60001-30000=30001,则这个数据空间压缩为(1,30001),暂停半分钟之后过来的数据的时间也相应的压缩30000。这样每个数据的pts对应着自己到达服务器的时间,多个源在一帧的时间间隔之内达到,那合成之后就是同时显示,即生成的mp4播放时看到的每一帧都是在这一帧时间内达到的数据。以服务器收到数据的时间为准,多个源的数据同步达到同步显示,这样就做到了多源布局中视频间的同步播放。

根据本发明实施例,还包括:

采用第一线程处理第一yuv数据的编码,得到编码后的源视频数据;

采用第二线程处理音频信息,得到编码后的音频数据;

检测第一线程是否处理完第一yuv数据的编码;

若是,则在第二线程将编码后的源视频数据和编码后的音频数据进行合并,得到视频文件。

需要说明的是,上述主要讲的是mp4画面的生成过程,mp4文件除了视频画面还需要有音频。云会议中的音频处理和视频处理都是一个复杂编解码过程。现有的技术中,ffmpeg提供了生成mp4时如何合流音视频的方法,即创建mp4文件的时候,同时创建一个音频流和一个视频流,然后分别往各自的流中写数据即可。但在云会议录制mp4的过程中,音频和视频的处理都是耗时操作,需要选择两个不同的线程进行处理。在多线程处理的过程中,由于多个线程同时访问一个文件流势必需要对流进行加锁处理,这样做控制复制,效率也会降低。本发明使用的方法是,音频的处理走一个线程,视频的h264编码走另一个线程,由于视频的处理一般都较音频处理耗时,所以流的创建和音频合流写mp4文件处于同一个线程,这样就需要视频编码之后要倒线程到音频的线程中,这就需要在音频的线程中给视频设计一个队列,每次视频编码完成之后把数据导入到队列中,每次音频编码完成之后在写数据时检查视频队列,如果有数据则把视频数据写入mp4的视频流中,同时把音频数据写入mp4的音频流中,这样整个过程只需对音频线程中的视频数据队列简单的加锁,如此达到高效的音视频编码合流。

本发明第三方面提供一种计算机可读存储介质,所述计算机可读存储介质中包括一种多布局的云会议录制方法程序,所述一种多布局的云会议录制方法程序被处理器执行时,实现如上述任一项所述的一种多布局的云会议录制方法的步骤。

本发明提供的一种多布局的云会议录制方法、系统和可读存储介质,将不同源视频数据进行yuv转换,然后依照布局规则进行编码生成最终的视频文件,可以加快视频合成的速度,简化生成的流程。尤其在视频数量多,并且要求适应各种布局变化的情况,或者其他更复杂的情况下都能够适用。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1