绿幕抠图功能接入
更新时间:2024-03-28
接入准备
接入绿幕抠图功能,需要使用播放器SDK高级版,并申请高级版License。
功能介绍
在高级版SDK中,提供了高精度、高性能的绿幕抠图能力,可实现对绿色或其他纯色背景的自动识别和抠像。该能力由VirtualLiveKit组件和VideoProcessor组件提供,请确保该组件已集成到你的APP中。
SDK当前支持纹理ID输入、纹理ID输出。
Demo体验
快速开始
- 初始化VirtualLiveKit组件
VirtualLiveKit mVirtualLiveKit = new VirtualLiveKit();
// 需要传入您申请的高级版证书LicenseID,ID可以在百度云控制台查看
mVirtualLiveKit.init(mAppContext, "your-license-id");
- 设置输入和输出纹理ID,典型场景是在GLSurfaceView的onSurfaceCreated或onSurfaceChanged回调中进行设置
// 设置输入纹理ID, 该ID对应的是原始绿幕背景视频,SDK处理后的内容将渲染到指定的输出纹理ID上
mVirtualLiveKit.prepareWithInputTexId(mFgInputTex);
// 设置输出纹理ID,该ID对应的是经过处理后的绿幕背景视频,此时绿幕或其他纯色背景被替换为透明的通道
mVirtualLiveKit.setOutputTexId(mFgOutputTex)
- 渲染参数设置
// 设置输入画面宽高
mVirtualLiveKit.setInputSize(mInputWidth, mInputHeight);
// 设置渲染输出宽高
mVirtualLiveKit.setOutputSize(mOutputWidth, mOutputHeight);
- 抠像色值设置 默认情况下,SDK可以自动识别背景色值进行抠像。使用方也可以手动指定抠像色值,传入后,将按照指定色值进行抠像
// 设置是否要自动识别背景色值,默认自动
mVirtualLiveKit.setAutoCalculateKeyColor(false);
// 设置抠像色值,范围[0, 255]
float[] keyColor = {0, 255, 0, 0};
mVirtualLiveKit.setKeyColor(keyColor);
- 开始渲染,典型场景是在GLSurfaceView的onDrawFrame中调用
// 开始基于输入纹理ID的渲染,调用一次,渲染一帧
mVirtualLiveKit.drawFrameFromTexId()
- 释放
// 销毁,如果要重新使用,则需要重新init
mVirtualLiveKit.release();
在播放器SDK Demo中的VirtualLiveRenderView类对上述流程有详细的展示,可以参考。
接口说明
VirtualLiveKit类
接口名 | 描述 |
---|---|
void init(Context context, String appID) | 初始化,鉴权失败时会抛出异常 |
void release() | 销毁。如果要重新使用,则需要重新调用init |
int getState() | 获取VirtualLiveKit当前状态 |
void setInputSize(int inputWidth, int inputHeight) | 输入画面宽高。必须在prepareWithInputTexId之后调用,否则抛出异常。 |
void setOutputSize(int outputWidth, int outputHeight) | 渲染输出宽高。必须在prepareWithInputTexId之后调用,否则抛出异常。 |
void setAutoCalculateKeyColor(boolean auto) | 设置是否要自动识别背景色值,默认自动 |
void setKeyColor(float[] rgba) | 设置抠像色值,传入后,将按照指定色值进行抠像,否则自动识别背景色值并抠像。范围[0, 255] |
void prepareWithInputTexId(int texid) | 设置输入纹理ID, 该ID对应的是未处理的视频,SDK处理后的内容将渲染到指定的输出纹理ID上。必须在init之后调用,否则抛出异常。 |
void setOutputTexId(int outputTexId) | 设置输出纹理ID。必须在prepareWithInputTexId之后调用,否则抛出异常。 |
void drawFrameFromTexId() | 开始基于输入纹理ID的渲染,调用一次,渲染一帧。必须在prepareWithInputTexId之后调用,否则抛出异常。 |