操控端实现 (Android)
更新时间不可用
了解如何通过平行操控 SDK 实现 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对象,并设置事件监听。Java String 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 中的消息发送者。
Java ArrayList<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); } } -
退出并释放资源。
Java Editable topicName = this.mTopicName.getText(); int errorCode = mStreamChannel.leaveTopic(topicName.toString()); // 退出 Topic int errorCode = mStreamChannel.leave(); // 退出频道 mStreamChannel.release(); // 销毁 Stream Channel RtmClient.release(); // 销毁 RtmClient
参考信息
示例项目
声网在 SDK 包中提供了以下示例项目供你参考:
├── sdk # 声网的 SDK 库文件和头文件
└── samples # 实时音视频示例代码API 参考
你可以参考以下 API 文档: