Skip to content

picMixer

shixuemei edited this page Nov 17, 2017 · 1 revision

图层混合模块

直播推流时, 可能会有叠加水印, 叠加文字, 叠加背景图片等需求。

SDK中提供了 UnionGPUPicMixer 作为一个抽象的图层混合工具,提供如下功能:

  • 将多个图层的内容进行叠加, 每个图层用index[0~n] 作为标示
  • 叠加顺序为0层在最下层, index越大在更上层
  • 可以每个图层分别指定位置和大小
  • 可以每个图层分别制定透明度
  • 可以动态交换图层
  • 可以动态刷新图层内容(支持视频)
  • 输出的刷新率 与 masterLayer 保持一致

1. 基本方法

  • 创建图层混合对象
- (id)initWithOutputSize:(CGSize)sz;
  • 设置主要图层
@property (nonatomic, assign) NSUInteger masterLayer;
  • 设置图层的位置和大小
-(void)setPicRect: (CGRect) rect
          ofLayer: (NSInteger) idx;
  • 设置图层透明度
-(void)setPicAlpha: (CGFloat) alpha
           ofLayer: (NSInteger) idx;
  • 设置图层旋转
-(void)setPicRotation: (GPUImageRotationMode) rotation
              ofLayer: (NSInteger) idx;
  • 清除特定图层的画面内容
-(void)clearPicOfLayer:(NSInteger) index;

2. 示例代码

UnionGPUPicMixer 本质上是一个多输入的GPUImageFilter, 使用方法, 就是将其作为target 添加到数据源中。 数据源可以是GPUImagePicture, Camera, 或者其他GPUImageFilter。 使用实例可以参考kit类代码。下面是一个简单的示例:

    _vMixer = [[UnionGPUPicMixer alloc] initWithOutputSize:CGSizeMake(540, 960)];
    _vMixer.masterLayer = 0;
    [_capDev addTarget:_vMixer atTextureLocation:0];
    [_pic    addTarget:_vMixer atTextureLocation:1];
    [_yuvIn  addTarget:_vMixer atTextureLocation:2];
    [_vMixer setPicRect: CGRectMake(0.0, 0.0, 0.5, 0.5) ofLayer:0];
    [_vMixer setPicRect: CGRectMake(0.2, 0.2, 0.5, 0.5) ofLayer:1];
    [_vMixer setPicRect: CGRectMake(0.5, 0.5, 0.5, 0.5) ofLayer:2];
    [_vMixer setPicAlpha:0.5 ofLayer:0];
    [_vMixer setPicAlpha:0.8 ofLayer:1];
    [_vMixer addTarget:_preview];

1. 集成指南

2. 基本功能

2.1 采集

2.2 视频处理

2.3 音频处理

3. 开放接口定义

Clone this wiki locally