Android 如何实现美颜功能


            
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 设置监听视频流,自己实现美颜功能。

```
    RongCallManager.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。

您认为此回答对您有帮助?

共有 0 位开发者认为此问题有帮助

我对此仍有疑问!继续追问