娃娃机客户端 主要结构及流程如下图所示:
请注意:
上图中的 用户选择上机 步骤,娃娃机客户端 不需要进行流的切换,仅需要处理业务信令、UI 交互等。
开发者要注意区分
娃娃机客户端
和娃娃机控制端
**。娃娃机客户端** 指提供给玩家抓娃娃的、安装在 iOS 或 Android 平台的 App。娃娃机控制端 指安装在 Android 开发板上的 Android 程序(通过串口控制娃娃机)。为了便于开发者更快理解 娃娃机客户端 中的逻辑,后面的小节会通过源码讲解核心功能,开发者亦可直接阅读完整的 娃娃机客户端 源码,逻辑是一致的。
1、安装娃娃机控制端APK到安卓板子上
2、娃娃机启动,推流成功后,Zego后台会给业务后台POST 流创建的相关信息(业务后台提供回调地址),用于业务侧维护娃娃机列表
3、客户端的开发
娃娃机系统实现流程如下图所示。该方案中,娃娃机控制端 无需与业务后台直接通信。
代码如下,供参考:
// 登录房间
mZegoLiveRoom.loginRoom(mRoomID, mRoomName, ZegoConstants.RoomRole.Anchor, new IZegoLoginCompletionCallback() {
@Override
public void onLoginCompletion(int errorCode, ZegoStreamInfo[] zegoStreamInfos) {
if(errorCode == 0){
printLog("登录成功");
} else {
printLog("登录失败");
}
}
});
注意:以下所有操作必须在 登录房间成功 后才能进行
登录房间成功后,建议直接从 ZEGO 服务器拉流。这种方案 画面延迟更小,体验效果更佳。
代码如下,供参考:
// 设置开关,直接从 ZEGO 服务器拉流
String config = ZegoConstants.Config.PREFER_PLAY_ULTRA_SOURCE + "=1";
ZegoLiveRoom.setConfig(config);
// 拉第一路流
mZegoLiveRoom.startPlayingStream(mListStream.get(0).streamID, mListStream.get(0).textureView);
mZegoLiveRoom.setViewMode(ZegoVideoViewMode.ScaleAspectFit, mListStream.get(0).streamID);
// 拉第二路流
mZegoLiveRoom.startPlayingStream(mListStream.get(1).streamID, mListStream.get(1).textureView);
mZegoLiveRoom.setViewMode(ZegoVideoViewMode.ScaleAspectFit, mListStream.get(1).streamID);
请注意:
- 目前 娃娃机客户端 使用的方案为:进入房间后,创建两个 view 分别播放两条视频流,用户可通过手动切换 view,继而切换当前可见视频流。
如果 娃娃机客户端 设置了从 ZEGO 服务器拉流(参考 4.2 节),当用户选择上机(玩游戏)时,娃娃机客户端 不需要进行流的切换,仅需要处理业务信令、UI 交互等。
上机成功后,娃娃机客户端 需要调用 ZegoLiveRoom SDK 提供的 sendCustomCommand
函数发送指令给 娃娃机控制端,娃娃机控制端收到指令后做相应的处理。
请注意,此处指令是发送给娃娃机控制端,而不是房间里的其他玩家或自己。
代码如下,供参考:
// 预约上机
String cmd = "{"seq":1,"cmd":513,"data":{"config":"+W7TSJ/Vm9ohaDL9SmeA2CJ9RTNdZj7LJk7VV56MlM6u3lV0s/S7gCrWe89ZWmseTjWYmnD6HouF1CERwkXMQ73UCwnpaLyCnlX+2glnqB4gWdS5FlgtaRlIwmCY9tOZguaRTOkMDHEgtKAw9LcDjOnZ30n213zNt8mo9KuStyU\u003d","time_stamp":1512532685017,"continue":0}}";
mZegoLiveRoom.sendCustomCommand(mAnchors, cmd, new IZegoCustomCommandCallback() {
@Override
public void onSendCustomCommand(int errorCode, String roomID) {
if (errorCode == 0){
printLog("发送成功“);
} else{
printLog("发送失败“);
}
}
});
娃娃机客户端 与 娃娃机控制端 信令交互流程请参考:娃娃机-信令交互
娃娃机客户端 可通过 onRecvCustomCommand
回调接收 娃娃机控制端 返回的指令。
设置回调的代码如下,供参考:
mZegoLiveRoom.setZegoRoomCallback(new IZegoRoomCallback() {
@Override
public void onRecvCustomCommand(String userID, String userName, String content, String roomID) {
// 处理接收到的指令
}
// 其他回调
})
娃娃机客户端 与 娃娃机控制端 信令交互流程请参考:娃娃机-信令交互
由于用户下机后,可能继续停留在房间内围观,或者进行下一轮游戏。因此,建议 娃娃机客户端 在用户下机后,继续保持从 ZEGO 服务器拉流,维持画面和操作的低延迟效果。
如果用户不再进行游戏,退出当前的游戏窗口。代码如下,供参考:
// 停止拉第一条流
mZegoLiveRoom.stopPlayingStream(mListStream.get(0).streamID);
// 停止拉第二条流
mZegoLiveRoom.stopPlayingStream(mListStream.get(1).streamID);
// 退出房间
mZegoLiveRoom.logoutRoom();
联系我们
文档反馈