You need to enable JavaScript to run this app.
导航
进阶功能
最近更新时间:2024.08.16 10:22:48首次发布时间:2024.08.15 23:22:47

本文介绍如何实现 Android 开播 SDK 的进阶功能。

前提条件

您已集成 Android 开播 SDK。详见集成 Android 开播 SDK

自定义美颜、滤镜和道具贴纸

您可以通过以下方法和回调,自定义美颜、滤镜和道具贴纸。

setEffectListener

设置 Effect 监听器。

public void setEffectListener(EffectListener effectListener)

参数

名称

类型

说明

effectListener

EffectListener

Effect 监听器。详见 EffectListener

EffectListener

自定义美颜、滤镜和道具贴纸的回调类。

public interface EffectListener

美颜回调

用于新增、修改或删除美颜。

注意

  • 如需增加美颜,请联系 CV 技术支持获取美颜文件。
  • 修改美颜指修改美颜在开播页的图标名称和样式。
List<BDLEffectBeautyModel> customizeBeauties(List<BDLEffectBeautyModel>beautyModelsList);

参数

名称

类型

说明

beautyModelsList

List<BDLEffectBeautyModel>

自定义前的美颜列表。

返回值

类型

说明

List<BDLEffectBeautyModel>

自定义后的美颜列表。

以下示例代码新增、修改、删除了指定美颜:

PushSettings.Holder.mSettings.getCvSettings().setEffectListener(new EffectListener() {
    @Override
    public List<BDLEffectBeautyModel> customizeBeauties(List<BDLEffectBeautyModel> beautyModelsList) {

        // 修改美颜在开播页的图标名称和样式。此处以修改 key 为 whiten 的美颜为例。请联系企业直播技术支持获取美颜的 key

        for (BDLEffectBeautyModel bdlEffectBeautyModel : beautyModelsList) {
            if (bdlEffectBeautyModel.key.equals("whiten")) {
                // 图标的资源 ID。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
                bdlEffectBeautyModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
                // 图标的本地路径或网络地址。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
                bdlEffectBeautyModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
                // 图标名称
                bdlEffectBeautyModel.setName("NAME");
            }
        }


        // 删除美颜。此处以删除 key 为 Internal_Deform_Overall 的美颜为例。请联系企业直播技术支持获取美颜的 key

        Iterator<BDLEffectBeautyModel> iterator = beautyModelsList.iterator();
        while (iterator.hasNext()) {
            BDLEffectBeautyModel bdlEffectBeautyModel = iterator.next();
            if (bdlEffectBeautyModel.getKey().equals("Internal_Deform_Overall")) {
                iterator.remove();
            }
        }


        // 新增美颜

        BDLEffectBeautyModel addBeautyModel = new BDLEffectBeautyModel();
        // 美颜文件的本地路径。请联系 CV 技术支持获取美颜文件
        addBeautyModel.setResFilePath("/storage/emulated/0/Android/data/com.bytedance.videoarch.TTLiveStream/files/assets/resource/ComposeMakeup.bundle/ComposeMakeup/beauty_Android_lite");
        // 图标名称,用于在开播页展示
        addBeautyModel.setName("NAME");
        // 美颜对应的 Key。请联系企业直播技术支持获取
        addBeautyModel.setKey("whiten");
        // 图标的资源 ID,用于设置图标样式。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
        addBeautyModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
        // 图标的本地路径或网络地址,用于设置图标样式。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
        addBeautyModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
        // 美颜配置是否正确
        boolean isValid = addBeautyModel.isValid();
        // 如果校验通过,将美颜添加至美颜列表中的第一个
        if (isValid){
            beautyModelsList.add(0, addBeautyModel);
        }
        return beautyModelsList;
    }
});

滤镜回调

用于新增、修改或删除滤镜。

注意

  • 如需增加滤镜,请联系 CV 技术支持获取滤镜文件。
  • 修改滤镜指修改滤镜在开播页的图标名称和样式。
List<BDLEffectFilterModel> customizeFilters(List<BDLEffectFilterModel> filterModelsList);

参数

名称

类型

说明

filterModelsList

List<BDLEffectFilterModel>

自定义前的滤镜列表。

返回值

类型

说明

List<BDLEffectFilterModel>

自定义后的滤镜列表。

以下示例代码新增、修改、删除了指定滤镜:

PushSettings.Holder.mSettings.getCvSettings().setEffectListener(new EffectListener() {
    @Override
    public List<BDLEffectFilterModel> customizeFilters(List<BDLEffectFilterModel> filterModelsList) {

        // 修改滤镜在开播页的图标名称和样式。此处以修改滤镜 ID 为 01 的滤镜为例

        for (BDLEffectFilterModel bdlEffectFilterModel : filterModelsList) {
            if (bdlEffectFilterModel.getFilterId().equals("01")) {
                // 图标名称
                bdlEffectFilterModel.setName("NAME");
                // 图标的资源 ID。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
                bdlEffectFilterModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
                // 图标的本地路径或网络地址。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
                bdlEffectFilterModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
            }
        }


        // 删除滤镜。此处以删除滤镜 ID 为 33 的滤镜为例

        if (filterModelsList != null) {
            Iterator<BDLEffectFilterModel> iterator = filterModelsList.iterator();
            while (iterator.hasNext()) {
                BDLEffectFilterModel bdlEffectFilterModel = iterator.next();
                if (bdlEffectFilterModel.getFilterId().equals("33")) {
                    iterator.remove();
                }
            }
        }


        // 新增滤镜

        BDLEffectFilterModel addFilterModel = new BDLEffectFilterModel();
        // 图标的资源 ID,用于设置图标样式。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
        addFilterModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
        // 图标的本地路径或网络地址,用于设置图标样式。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
        addFilterModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
        // 滤镜文件的本地路径。请联系 CV 技术支持获取滤镜文件
        addFilterModel.setResFilePath("/storage/emulated/0/Android/data/com.bytedance.videoarch.TTLiveStream/files/assets/resource/FilterResource.bundle/Filter/Filter_01_38");
        // 图标名称,用于在开播页展示
        addFilterModel.setName("NAME");
        // 滤镜配置是否正确
        boolean isValid = addFilterModel.isValid();
        // 如果校验通过,将滤镜添加至滤镜列表中的第一个
        if (isValid){
            filterModelsList.add(0, addFilterModel);
        }
        return filterModelsList;
    }
});    

道具贴纸回调

用于新增、修改或删除道具贴纸。

注意

  • 如需增加道具贴纸,请联系 CV 技术支持获取贴纸文件。
  • 修改道具贴纸指修改贴纸在开播页的图标样式。
List<BDLEffectStickerModel> customizeStickers(List<BDLEffectStickerModel> stickersModelsList); 

参数

名称

类型

说明

stickersModelsList

List<BDLEffectStickerModel>

自定义前的道具贴纸列表。

返回值

类型

说明

List<BDLEffectStickerModel>

自定义后的道具贴纸列表。

以下示例代码新增、修改、删除了指定道具贴纸:

PushSettings.Holder.mSettings.getCvSettings().setEffectListener(new EffectListener() {
    @Override
    public List<BDLEffectStickerModel> customizeStickers(List<BDLEffectStickerModel> stickersModelsList) {

        // 修改道具贴纸在开播页的图标样式。此处以修改文件路径包含 stickers_sd_gan 的贴纸为例

        for (BDLEffectStickerModel bdlEffectStickerModel : stickersModelsList) {
            if (bdlEffectStickerModel.getResFilePath().contains("stickers_sd_gan")) {
                // 图标的资源 ID。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
                bdlEffectStickerModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
                // 图标的本地路径或网络地址。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
                bdlEffectStickerModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
            }
        }

        // 删除道具贴纸。此处以删除文件路径包含 tryon_nail_zhuanhongse 的贴纸为例

        Iterator<BDLEffectStickerModel> iterator = stickersModelsList.iterator();
        while (iterator.hasNext()) {
            BDLEffectStickerModel bdlEffectStickerModel = iterator.next();
            if (bdlEffectStickerModel.getResFilePath().contains("tryon_nail_zhuanhongse")) {
                iterator.remove();
            }
        }


        // 新增道具贴纸

        BDLEffectStickerModel addStickerModel = new BDLEffectStickerModel();
        // 图标的资源 ID,用于设置图标样式。您也可以选择设置图标的本地路径或网络地址,二者选其一即可,以最后的设置为准
        addStickerModel.getEffectIcon().setImgResId(R.mipmap.tvu_private_chat_icon);
        // 图标的本地路径或网络地址,用于设置图标样式。您也可以选择设置图标的资源 ID,二者选其一即可,以最后的设置为准
        addStickerModel.getEffectIcon().setImgUri("https://cdn.pixabay.com/photo/2022/01/13/00/09/austria-6934186_1280.jpg");
        // 贴纸文件的本地路径。请联系 CV 技术支持获取贴纸文件
        addStickerModel.setResFilePath("/storage/emulated/0/Android/data/com.bytedance.videoarch.TTLiveStream/files/assets/resource/StickerResource.bundle/stickers/tryon_nail_zhuanhongse");
        // 贴纸配置是否正确
        boolean isValid = addStickerModel.isValid();
        // 如果校验通过,将贴纸添加至贴纸列表中的第一个
        if (isValid){
            stickersModelsList.add(0, addStickerModel);
        }
        return stickersModelsList;
    }
});