插件能够在声网 SDK 的基础上进一步丰富 app 的功能。声网云市场提供多个能够增强实时音视频互动性的插件功能,其中包括:
本页展示如何实现声网云市场提供的插件功能。
你需要在 app 中实现以下步骤:
RtcEngine
时调用 addExtension
,将插件添加到 SDK 中。enableExtension
开启插件。setExtensionProperty
传入插件功能的设置参数。开始前,请确保你具备以下条件:
本节以一个简单的水印插件为例,介绍如何实现插件功能。
参考如下步骤,将用作演示的水印插件包添加到你的项目中:
.aar
).aar
文件保存到项目文件夹的 /app/libs
路径。app/build.gradle
文件,在 dependencies
后面添加如下行:implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
.so
).so
文件保存到项目文件夹的如下路径:/app/src/main/jniLibs/arm64-v8a
/app/src/main/jniLibs/armeabi-v7a
打开 app/src/main/java/com.example.<projectname>/MainActivity
文件:
import org.json.JSONException;
import org.json.JSONObject;
// ExtensionManager 用于传入插件的详细信息
import io.agora.extension.ExtensionManager;
import io.agora.rtc2.IMediaExtensionObserver;
import io.agora.rtc2.RtcEngineConfig;
在 app/src/main/java/com.example.<projectname>/MainActivity
文件中,将当前的 initializeAndJoinChannel
函数替换成如下代码:
private void initializeAndJoinChannel() {
try {
RtcEngineConfig config = new RtcEngineConfig();
config.mContext = getBaseContext();
config.mAppId = appId;
// 调用 addExtension 添加插件
config.addExtension(ExtensionManager.EXTENSION_NAME);
// 注册 IMediaExtensionObserver,用于接收插件相关的事件通知
config.mExtensionObserver = new IMediaExtensionObserver() {
@Override
public void onEvent(String vendor, String extension, String key, String value) {
// 添加插件事件的回调处理逻辑
}
};
config.mEventHandler = mRtcEventHandler;
mRtcEngine = RtcEngine.create(config);
} catch (Exception e) {
throw new RuntimeException("Check the error.");
}
// 调用 enableExtension 开启插件
// 开启多个插件需要多次调用 enableExtension,开启顺序决定了各个插件在 SDK 媒体传输管道中的顺序
// 例如,先开启插件 A 再开启插件 B,则 插件 A 先处理数据,插件 B 后处理数据
mRtcEngine.enableExtension(ExtensionManager.EXTENSION_VENDOR_NAME, ExtensionManager.EXTENSION_VIDEO_FILTER_NAME, true);
mRtcEngine.enableVideo();
mRtcEngine.startPreview();
FrameLayout container = findViewById(R.id.local_video_view_container);
SurfaceView surfaceView = new SurfaceView(getBaseContext());
container.addView(surfaceView);
mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, 0));
ChannelMediaOptions options = new ChannelMediaOptions();
options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER;
options.channelProfile = Constants.CHANNEL_PROFILE_LIVE_BROADCASTING;
options.publishCameraTrack = true;
mRtcEngine.joinChannel(token, channelName, 0, options);
JSONObject o = new JSONObject();
try {
// 传入服务商定义的 key-value 键值对,设置插件功能
o.put("plugin.watermark.wmStr", "Agora");
o.put("plugin.watermark.wmEffectEnabled", true);
// 调用 setExtensionProperty 使用插件功能
mRtcEngine.setExtensionProperty(ExtensionManager.EXTENSION_VENDOR_NAME, ExtensionManager.EXTENSION_VIDEO_FILTER_NAME, "key", o.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
参考如下步骤测试插件功能:
Run app
。运行成功后,项目会安装到你的 Android 设备上。声网在 GitHub 上提供一个开源的示例项目 agora-simple-filter 供你参考。