远程控制
简介
Pano SDK 支持对桌面端(Windows、macOS、Electron)进行远程控制。
- 使用远程控制前,被控端需要先共享屏幕,具体内容请点此查看。
- macOS 首次被控时,需要用户在「系统偏好设置 - 安全性与隐私 - 隐私 - 辅助功能」中添加允许 App 控制电脑。
- "360安全卫士"会拦截鼠标操作,如果远程控制时鼠标点击无效,请查看电脑是否安装"360安全卫士"等安全类软件,可以将其退出后再试。
远程控制的流程:
- 被控端共享屏幕
- 控制端发起控制请求
- 被控端收到请求并同意控制
- 控制端操作被控端的设备
各端 SDK 相关接口,请查看下列介绍:
Windows (C++)
获取远程控制服务
通过 RtcEngine
实例的 getRemoteController
方法获取远程控制服务(RemoteController
)。
远程控制事件通知
通过继承 RemoteController::Callback
类,重写回调接口来处理 Pano SDK 返回的通知。
通过 RemoteController
实例的 setCallback
方法设置远程控制的通知。
和远程控制有关的事件通知如:
onRemoteControlRequest
其他用户发起远程控制请求onRemoteControlResponse
其他用户响应远程控制请求onRemoteControlCancelled
其他用户取消远程控制请求
发起控制请求
控制端通过 RemoteController
实例的 requestControl
方法发起控制请求。
响应控制请求
被控端通过 RemoteController
实例的 acceptControl
方法接收请求,rejectControl
方法拒绝请求。
取消远程控制
控制端和被控端都可以通过 RemoteController
实例的 cancelControl
方法取消远程控制。
macOS/iOS (Objective-C)
获取远程控制服务
通过 PanoRtcEngineKit
实例的 remoteController
属性获取远程控制服务(PanoRtcRemoteController
)。
远程控制事件通知
通过实现 PanoRtcRemoteControllerDelegate
协议的回调方法来处理 Pano SDK 返回的通知。
通过 PanoRtcRemoteController
实例的 delegate
属性设置远程控制的回调。
和远程控制有关的事件通知如:
- onRemoteControlRequest:needElevation:
其他用户发起远程控制请求- onRemoteControlResponse:result:
其他用户响应远程控制请求- onRemoteControlCancelled:reason:
其他用户取消远程控制请求
发起控制请求
控制端通过 PanoRtcRemoteController
实例的 - requestRemoteControl:needElevation:
方法发起控制请求。
响应控制请求
被控端通过 PanoRtcRemoteController
实例的 - acceptRemoteControl:
方法接收请求,- rejectRemoteControl:
方法拒绝请求。
取消远程控制
控制端和被控端都可以通过 PanoRtcRemoteController
实例的 - cancelRemoteControl:
方法取消远程控制。
适用于iOS的特殊方法
由于移动端没有修饰键(Control/Ctrl, Shift, Command/Windows, CapsLock, Option/Alt),所以当需要模拟被控端操作这些按键时,控制端需要调用 PanoRtcRemoteController
实例的以下方法:
- setModifierFlags:flags:
设置键盘修饰符- sendKeyboardEvent:event:
发送键盘事件
例如,要模拟按下 Control+Option+A (Ctrl+Alt+A)的组合键,示例代码如下:
// 假设 remoteController 为 PanoRtcRemoteController 实例,被控端 userId 为 12345
// 先设置修饰键
[remoteController setModifierFlags:12345 flags:PanoModifierFlagControl | PanoModifierFlagOption];
// 再按下 A 键
PanoKeyboardEvent * panoKeyboardEvent = [[PanoKeyboardEvent alloc] init];
panoKeyboardEvent.type = PanoKeyboardEventPressDown;
panoKeyboardEvent.asciiCode = 0x41; // A 的 ASCII 码为 65 (10进制) = 0x41 (十六进制)
[remoteController sendKeyboardEvent:12345 event:panoKeyboardEvent];
// 取消修饰键
[remoteController setModifierFlags:12345 flags:0];
Android (Java)
获取远程控制服务
通过 RtcEngine
实例的 getRemoteController
方法获取远程控制服务(RtcRemoteController
)。
远程控制事件通知
通过实现 RtcRemoteController.Callback
接口的回调方法来处理 Pano SDK 返回的通知。
通过 RtcRemoteController
实例的 setCallback
方法设置远程控制的回调。
和远程控制有关的事件通知如:
onRemoteControlRequest
其他用户发起远程控制请求onRemoteControlResponse
其他用户响应远程控制请求onRemoteControlCancelled
其他用户取消远程控制请求
发起控制请求
控制端通过 RtcRemoteController
实例的 requestControl
方法发起控制请求。
响应控制请求
被控端通过 RtcRemoteController
实例的 acceptControl
方法接收请求,rejectControl
方法拒绝请求。
取消远程控制
控制端和被控端都可以通过 RtcRemoteController
实例的 cancelControl
方法取消远程控制。
适用于Android的特殊方法
由于移动端没有修饰键(Control/Ctrl, Shift, Command/Windows, CapsLock, Option/Alt),所以当需要模拟被控端操作这些按键时,控制端需要调用 RtcRemoteController
实例的以下方法:
setModifierFlags
设置键盘修饰符sendKeyboardEvent
发送键盘事件
例如,要模拟按下 Control+Option+A (Ctrl+Alt+A)的组合键,示例代码如下:
// 假设 remoteController 为 RtcRemoteController 实例,被控端 userId 为 12345
// 先设置修饰键
remoteController.setModifierFlags(12345, Keyboard.ModifierFlag.CONTROL | Keyboard.ModifierFlag.Option);
// 再按下 A 键,A 的 ASCII 码为 65 (10进制) = 0x41 (十六进制)
remoteController.sendKeyboardEvent(12345, Keyboard.Action.DOWN, 0x41);
// 取消修饰键
remoteController.setModifierFlags(12345, Keyboard.ModifierFlag.NONE);
Electron
Electron远程控制的相关介绍,请点此查看。