绿幕抠图功能接入
更新时间:2023-08-25
接入准备
- 接入绿幕抠图功能,需要使用播放器SDK高级版,并申请高级版License。
- 在frameworks目录下有BDCloudVirtualLiveKit.framewok,在vendor目录下有libGRF.a,将它们导入到你的项目中,并设置到Xcode的Link Binary With Libraries选项中
功能介绍
在高级版SDK中,提供了高精度、高性能的绿幕抠图能力,可实现对绿色或其他纯色背景的自动识别和抠像。该能力由BDCloudVirtualLiveKit组件提供,请确保该组件已集成到你的APP中。 SDK当前支持纹理ID输入、纹理ID输出。
Demo体验
快速开始
- 初始化
BDCloudVirtualLiveRender *vlRender
// 初始化,需要传入您申请的高级版证书LicenseID,ID可以在百度云控制台查看
self.vlRender = [[BDCloudVirtualLiveRender alloc] initWithLicenseId:LICENSE_ID];
- 设置输入和输出纹理ID
// 设置输入纹理ID, 该ID对应的是原始绿幕背景视频,SDK处理后的内容将渲染到指定的输出纹理ID上
[self.vlRender prepareWithInputTexId:self.fgInputTexId];
// 设置输出纹理ID,该ID对应的是经过处理后的绿幕背景视频,此时绿幕或其他纯色背景被替换为透明的通道
[self.vlRender setOutputTexId:self.fgOutputTexId];
- 渲染参数设置
// 设置输入画面宽高
[self.vlRender setInputWidth:_viewW AndHeight:_viewH];
// 设置渲染输出宽高
[self.vlRender setOutputWidth:_viewW AndHeight:_viewH];
- 抠像色值设置 默认情况下,SDK可以自动识别背景色值进行抠像。使用方也可以手动指定抠像色值,传入后,将按照指定色值进行抠像
// 设置是否要自动识别背景色值,默认自动
[self.vlRender setAutoCalculateKeyColor:NO];
// 设置抠像色值,范围[0, 255]
float rgba[4] = {0, 255, 0, 0};
[self.vlRender setKeyColor:rgba];
- 开始渲染
// 开始基于输入纹理ID的渲染,调用一次,渲染一帧
[self.vlRender drawFrameFromTexId];
- 释放
// 销毁,如果要重新使用,则需要重新init
[self.vlRender destroy];
在播放器SDK Demo中的VirtualLiveViewModel类对上述流程有详细的展示,可以参考。
接口说明
BDCloudVirtualLiveRender
接口名 | 说明 |
---|---|
- (instancetype)initWithLicenseId:(NSString*)licenseID | 初始化 licenseID:通过百度智能云控制台申请的licenseID |
- (void)setInputWidth:(int)w AndHeight:(int)h | 设置输入视频宽高。必须在prepareWithInputTexId之后调用,否则抛出异常 |
- (void)setOutputWidth:(int)w AndHeight:(int)h | 设置渲染输出宽高。必须在prepareWithInputTexId之后调用,否则抛出异常 |
- (void)setAutoCalculateKeyColor:(Boolean)enable | 设置是否要自动识别背景色值,默认自动 |
- (void)setKeyColor:(float[])rgba | 设置抠像色值,传入后,将按照指定色值进行抠像,否则自动识别背景色值并抠像。范围[0, 255] |
- (void)prepareWithInputTexId:(int)texid | 设置输入纹理ID, 该ID对应的是未处理的视频,处理后的内容将渲染到指定的输出纹理ID上。必须在initWithLicenseId之后调用,否则抛出异常 |
- (void)setOutputTexId:(int)texid | 设置输出纹理ID,输出纹理中绿幕部分变为透明。必须在prepareWithInputTexId之后调用,否则抛出异常 |
- (void)drawFrameFromTexId | 开始基于输入纹理ID的渲染,调用一次,渲染一帧。必须在prepareWithInputTexId之后调用,否则抛出异常 |
- (void)destroy | 销毁 |