本文介绍如何实现 Android 开播 SDK 的进阶功能。
您已集成 Android 开播 SDK。详见集成 Android 开播 SDK。
您可以通过以下方法和回调,自定义美颜、滤镜和道具贴纸。
设置 Effect 监听器。
public void setEffectListener(EffectListener effectListener)
参数
名称 | 类型 | 说明 |
---|---|---|
effectListener | EffectListener | Effect 监听器。详见 EffectListener。 |
自定义美颜、滤镜和道具贴纸的回调类。
public interface EffectListener
用于新增、修改或删除美颜。
注意
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; } });
用于新增、修改或删除滤镜。
注意
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; } });
用于新增、修改或删除道具贴纸。
注意
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; } });