2023/10/12 15:10:33
操控端实现 (Android)
声网平行操控 SDK 支持主流的 Linux、Android 设备端平台,Windows、Web、Linux、Android、iOS、macOS 操控端平台。
本文介绍如何通过声网平行操控 SDK 在 Android 操控端实现主要功能。
信息
如需体验其它操控端,请联系 sales@shengwang.cn。
技术原理
基于如下技术框架图,你可以结合你的实际业务进行开发。
前提条件
开始前,请确保满足如下条件:
- 准备平行操控所需的 Android 开发环境如下:
- Android Studio 4.1 以上版本。
- Android API 级别 16 或以上。
- Android 4.1 或以上版本的移动设备。
- 联系 sales@shengwang.cn 获取平行操控 Android SDK。
- 参考创建项目为你的项目添加平行操控场景所需的网络及设备权限。
实现流程
接收音视频流
接收 YUV 格式或已编码的视频数据,详细步骤请参考实现音视频互动流程。
收发控制信令
按照如下步骤实现从操控端收发控制信令的逻辑:
-
创建并初始化
RtmClient
对象,并设置事件监听。JavaString app_id = getApplicationContext().getString(R.string.agora_app_id);
RtcEngineConfig config = new RtcEngineConfig();
config.mContext = getBaseContext();
config.mAppId = app_id;
config.mEventHandler = mRtcEventHandler;
RtcEngine mRtcEngine = RtcEngine.create(config);
// 创建 RtmClient
RtmClient mRtmClient = RtmClient.create();
// 配置 RtmClient
RtmConfig rtmConfig = new RtmConfig();
// userId 中仅支持传入内容为数值的字符串,例如 "1234567"
rtmConfig.mUserId = userId.toString();
rtmConfig.mUseStringUID = false;
// 设置事件监听程序
rtmConfig.mEventHandler = mRtmEventHandler;
rtmConfig.mAppId = getApplicationContext().getString(R.string.agora_app_id);
// 初始化 RtmClient
mRtmClient.initialize(rtmConfig); -
创建 Stream Channel 并加入频道。在使用
StreamChannel
类中的任何 API 之前,你需要先调用createStreamChannel
创建 Stream Channel。Java// 创建 Stream Channel
StreamChannel mStreamChannel = mRtmClient.createStreamChannel(channelName.toString());
// 加入频道
JoinChannelOptions options = new JoinChannelOptions();
options.token = getApplicationContext().getString(R.string.agora_app_id);
int errorCode = mStreamChannel.join(options); -
加入频道中的 Topic 并发布消息。成功加入 Topic 后,SDK 会自动将你注册为该 Topic 的消息发布者,你可以在该 Topic 中发送消息。成功发送后,SDK 会把该消息分发给该 Topic 的所有订阅者。
Java// 加入 Topic
JoinTopicOptions options = new JoinTopicOptions();
options.messageQos = RtmMessageQos.RTM_MESSAGE_QOS_ORDERED;
int errorCode = mStreamChannel.joinTopic(topicName.toString(), options);
// 在 Topic 中发布消息
String msg = "xxx";
byte[] message = msg.getBytes();
int errorCode = mStreamChannel.publishTopicMessage(topicName.toString(), message); -
订阅 Topic 及 Topic 中的消息发送者。
JavaArrayList<String> mSubscribeUserList = new ArrayList<>();
mSubscribeUserList.add("xxx");
TopicOptions options = new TopicOptions();
options.users = mSubscribeUserList;
int errorCode = mStreamChannel.subscribeTopic(topicName.toString(), options); -
通过
onMessageEvent
事件通知接收远端用户的消息。Java// 继承 IRtmEventHandler 类
public class RtmEventHandler implements IRtmEventHandler {
@Override
// 监听消息事件
public void onMessageEvent(MessageEvent event) {
String message = new String(event.message);
logUtil.visualLog_CALLBACK("on message event, channel: " + event.channelName + ", channelType:" + event.channelType +
", topicName: " + event.topicName + ", publisher: " + event.publisher + ", message: " + message);
}
} -
退出并释放资源。
JavaEditable topicName = this.mTopicName.getText();
int errorCode = mStreamChannel.leaveTopic(topicName.toString()); // 退出 Topic
int errorCode = mStreamChannel.leave(); // 退出频道
mStreamChannel.release(); // 销毁 Stream Channel
RtmClient.release(); // 销毁 RtmClient
参考信息
示例项目
声网在 SDK 包中提供了以下示例项目供你参考:
Shell
├── sdk # 声网的 SDK 库文件和头文件
└── samples # 实时音视频示例代码
API 参考
你可以参考以下 API 文档: