前言
在直播场景里,我们经常需要将多个视频画面混合成一个视频画面(或是多路音频合成一路声音),常见的场景如:
- 本地既要接入摄像头,又要展示桌面或者视频文件,在本地需要做一下画面混合
- 主播连麦PK时,将多个主播的画面混合成一个,普通观众就不需要拉多路流
- 在直播过程中通过麦克风采集人声,然后配上背景音乐,比如秀场的唱歌 这些场景里都会涉及到一个相同的部分,就是音视频的混流,其大致的过程如下图。 音视频混流的基本过程
视频混流的基本原理
视频混流的过程,是指定一块画面区域,在此区域内,按画面的位置布局,将区域中的每个视频画面的像素混合计算成一个像素。这里面主要涉及到的是图层与颜色计算。
图层
图层是视频混流的一个概念,通常分为背景图层和叠加图层,图层可以有效把控画面布局。
背景图层一般是用来限制混流的范围区域,在背景图层分辨率范围之外的视频画面是不允许被混流的,通常我们会使用画布(纯色的画面区域)来充当背景图层。
叠加图层是在背景图层上进行叠加的画面,每一个叠加图层都会在背景图层之上对应一块位置区域。混流区域内的像素颜色值,是根据其位置上所有图层(包括背景图层和叠加图层)对应的颜色值,按规则计算出来。
在对视频进行混流之前,需要先将图层的布局安排好,以避免出现图层遮挡、超出背景范围等问题。
颜色计算
颜色计算是混流的基本步骤,通常是将像素的颜色表示为RGBA值,然后逐像素进行处理,叠加时颜色计算是线性的,公式一般利用Porter-Duff模型,核心公式如下:
- 颜色值转换: