《狼人杀》&《谁是卧底》RTC 接入说明
《狼人杀》《谁是卧底》游戏,允许玩家通过语音玩游戏,并根据游戏规则,在不同阶段设置:允许玩家发言、禁止玩家发言、允许玩家收听其他玩家发言、禁止玩家收听其他玩家发言。 本文档为App 使用自身RTC和《狼人杀》《谁是卧底》游戏(以下简称:游戏)进行集成提供指导。
一、背景
在此以hello-sud-plus-android和hello-sud-plus-ios 为例,源码地址:
- android: https://github.com/SudTechnology/hello-sud-plus-android
- ios: https://github.com/SudTechnology/hello-sud-plus-ios
hello-sud-plus以SudMGPWrapper封装集成 SudMGP SDK,我们建议App用SudMGPWrapper集成SDK。 App为玩家提供的语音能力来自于App集成的RTC SDK 游戏决定玩家什么时候发言、什么时候收听发言
- 允许玩家发言: 开启RTC推流
- 禁止玩家发言: 关闭RTC推流
- 允许玩家收听其他玩家发言: 开启RTC拉流
- 禁止玩家收听其他玩家发言: 关闭RTC拉流
二、游戏发送“开启/关闭 RTC拉流”状态,允许/禁止收听其他玩家发言
state:
mg_common_self_headphone
data:
{
"isOn": true // 耳机(听筒,喇叭)开关状态 true: 开(APP开启RTC拉流);false: 关(APP关闭RTC拉流)
}
- Android: 客户App实现SudFSMMGListener接口,在onGameMGCommonSelfHeadphone方法中根据model.isOn 来决定开启RTC拉流。还是关闭RTC拉流
// 耳机(听筒,扬声器)状态
@Override
public void onGameMGCommonSelfHeadphone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfHeadphone model) {
boolean isOn = model != null && model.isOn;
If (isOn) {
//开启RTC拉流
} else {
//关闭RTC拉流
}
ISudFSMStateHandleUtils.handleSuccess(handle);
}
- iOS: 客户App实现SudFSMMGListener协议,在onGameMGCommonGameSelfHeadphone方法中根据model.isOn 来决定开启RTC拉流。还是关闭RTC拉流
/// 游戏: 耳机(听筒,扬声器)状态 MG_COMMON_GAME_SELF_HEADEPHONE
- (void)onGameMGCommonGameSelfHeadphone:(nonnull id<ISudFSMStateHandle>)handle model:(MGCommonGameSelfHeadphone *)model {
if (model.isOn) {
//开启RTC拉流
} else {
//关闭RTC拉流
}
[handle success:[self.sudFSMMGDecorator handleMGSuccess]];
}
三、游戏发送“开启/关闭 RTC推流”状态,允许/禁止玩家发言
state:
mg_common_self_microphone
data:
{
"isOn": true // 麦克风开关状态 true: 开(APP开启RTC推流);false: 关(APP关闭RTC推流)
}
- Android: 客户App实现SudFSMMGListener接口,在onGameMGCommonSelfMicrophone方法中根据model.isOn 来决定开启RTC推流。还是关闭RTC推流
// 麦克风状态
@Override
public void onGameMGCommonSelfMicrophone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfMicrophone model) {
boolean isOn = model != null && model.isOn;
If (isOn) {
//开启RTC推流
} else {
//关闭RTC推流
}
ISudFSMStateHandleUtils.handleSuccess(handle);
}
- iOS: 客户App实现SudFSMMGListener协议,在onGameMGCommonGameSelfMicrophone方法中根据model.isOn 来决定开启RTC推流。还是关闭RTC推流
/// 游戏: 麦克风状态 MG_COMMON_GAME_SELF_MICROPHONE
- (void)onGameMGCommonGameSelfMicrophone:(nonnull id<ISudFSMStateHandle>)handle model:(MGCommonGameSelfMicrophone *)model {
if (model.isOn) {
//开启RTC推流
} else {
//关闭RTC推流
}
[handle success:[self.sudFSMMGDecorator handleMGSuccess]];
}
四、APP切入后台
如果App此时正在推流,App要主动停止推流 如果App此时正在拉流,App要主动停止拉流 此外App什么都不用做,不需要记录此时的推/拉流状态
五、APP重新进入前台
游戏会将切后台期间的状态变化发给App, App响应mg_common_self_headphone决定是否拉流,响应mg_common_self_microphone决定是否推流。 其他什么都不用做