Android 如何实现美颜功能
如何基于 calllib ,RongRTC 实现美颜功能
发布时间: 2018-11-29 11:03
回答:
一、CallLib 2.9.0 ~ 2.9.6 范围内版本
1、基于 CallLib 实现美颜
1.1、可以使用以下方式打开美颜功能。
/** * 设置是否打开美颜,(已废弃) * * @param enable true 打开,false 关闭 */ RongCallClient.getInstance().setEnableBeauty(true);
1.2、此版本 CallLib 不支持自定义美颜。
2、基于 RongRTCEngine 实现美颜。
2.1、首先打开美颜功能。
//{@link ParameterKey#KEY_IS_BEAUTY_FILETER_USED}: 是否开启美颜模式, 默认值为 false; Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put(RongRTCEngine.ParameterKey.KEY_IS_BEAUTY_FILETER_USED,true); RongRTCEngine.getInstance().setVideoParameters(parameters);
2.2、自定义实现美颜功能,RongRTCEngineEventHandler 的回调 onTextureFrameCaptured 中对视频流进行自定义处理,如果第一步没有打开美颜,则回调不会执行。
//1、设置监听 RongRTCEngine.getInstance().setRongRTCEngineEventHandler(new RongRTCEngineEventHandler()); //2、回调方法处理 /** * 当选择开启美颜效果的时候,此方法会被回调,输出 width/height/oesTextureId。若用户不需要自定义美颜效果,可直接返回 oesTextureId; * 或是定义自己的美颜效果,请返回新的textureId。 * * @param width 当前帧的宽度 * @param height 当前帧的高度 * @param oesTextureId 纹理资源 id * @return oesTextureId 返回默认oesTextureId(返回0也代表使用默认效果)或是自定义的textureId */ @Override public int onTextureFrameCaptured(int width, int height, int oesTextureId) { return 0; }
二、 CallLib 2.9.7 及以后的版本
1、基于 CallLib 实现美颜。
1.1、RongCallManager 设置监听视频流,自己实现美颜功能。
``` RongCallClient.getInstance().registerVideoFrameListener(new IVideoFrameListener() { /** * 输出 width/height/oesTextureId。若用户不需要自定义美颜效果,可直接返回 oesTextureId; * 或是定义自己的美颜效果,请返回新的textureId。 * * @param width 当前帧的宽度 * @param height 当前帧的高度 * @param oesTextureId 纹理资源 id * @return oesTextureId 返回默认oesTextureId(返回0也代表使用默认效果)或是自定义的textureId */ @Override public int processVideoFrame(int width, int height, int oesTextureId) { return 0; } }); ```
2、基于 RongRTC 实现美颜,RongRTC 引擎 2.1.1 及其之后的版本。
2.1、设置监听视频流,自己实现美颜功能。
RongRTCEngine.getInstance().setVideoFrameListener(new RongRTCEngineVideoFrameListener() { /** * 输出 width/height/oesTextureId。若用户不需要自定义美颜效果,可直接返回 oesTextureId; * 或是定义自己的美颜效果,请返回新的textureId。 * * @param width 当前帧的宽度 * @param height 当前帧的高度 * @param oesTextureId 纹理资源 id * @return oesTextureId 返回默认oesTextureId(返回0也代表使用默认效果)或是自定义的textureId */ @Override public int processVideoFrame(int width, int height, int oesTextureId) { return 0; } });
注
我们的 RongRTC 是最底层的引擎,提供通讯和会议等能力,一些例如音视频的功能,需要基于我们的引擎二次开发,我们的 CallLib 是基于我们的 RongRTC 引擎开发的一套音视频能力库,提供例如音频视频,群内多人音视频等功能,没有 UI 界面,我们的 callkit 是基于 RongRTC 和 CallLib 开发的有 UI 界面的通讯能力库, 可提供音视频能力和 UI 界面,开发者可以根据自己的需求去选择相应的库,在相应的库的基础上进行操作即可,这里有关于三者更详细的说明,这里有关于三者的文档,这里有融云的开源代码,如 CallKit。