From 38b0af2f35d6104d17d8d5118ebf135966ca4fb1 Mon Sep 17 00:00:00 2001 From: max Date: Fri, 26 Apr 2024 14:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5PIKO=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=AA=E6=92=ADPK=E5=A3=B0=E9=9F=B3=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chwl/core/im/custom/bean/RoomPkBean.java | 3 ++ .../chwl/core/manager/IMNetEaseManager.java | 1 + .../manager/agora/EngineEventHandler.java | 34 +++++++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/RoomPkBean.java b/core/src/main/java/com/chwl/core/im/custom/bean/RoomPkBean.java index 07ecb1dd0..114433c96 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/RoomPkBean.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/RoomPkBean.java @@ -1,5 +1,7 @@ package com.chwl.core.im.custom.bean; +import com.google.gson.annotations.SerializedName; + import java.io.Serializable; import java.util.List; @@ -118,6 +120,7 @@ public class RoomPkBean implements Serializable { /** * 个播PK匹配新增字段 */ + @SerializedName(value = "aMicStatus", alternate = "amicStatus") private int aMicStatus; @Data diff --git a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java index a4f4942ee..1d2194198 100644 --- a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java +++ b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java @@ -1301,6 +1301,7 @@ public final class IMNetEaseManager { case CUSTOM_MSG_SUB_ROOM_PK_UPDATE: case CUSTOM_MSG_SUB_SINGLE_ROOM_PK_UPDATE: AvRoomDataManager.get().roomPkLiveData.postValue(roomPkBean); + AudioEngineManager.get().setRemoteMute(roomPkBean.getAUid(), roomPkBean.getAMicStatus() == 0); break; case CUSTOM_MSG_SUB_ROOM_PK_FINISH: noticeRoomEvent(msg, RoomEvent.ROOM_PK_FINISH); diff --git a/core/src/main/java/com/chwl/core/manager/agora/EngineEventHandler.java b/core/src/main/java/com/chwl/core/manager/agora/EngineEventHandler.java index 174ef2faf..6d063ae91 100644 --- a/core/src/main/java/com/chwl/core/manager/agora/EngineEventHandler.java +++ b/core/src/main/java/com/chwl/core/manager/agora/EngineEventHandler.java @@ -2,6 +2,8 @@ package com.chwl.core.manager.agora; import android.os.Message; +import com.chwl.core.im.custom.bean.RoomPkBean; +import com.chwl.core.manager.AudioEngineManager; import com.orhanobut.logger.Logger; import com.chwl.core.R; import com.chwl.core.manager.AvRoomDataManager; @@ -13,6 +15,9 @@ import com.chwl.library.utils.SingleToastUtil; import io.agora.rtc2.ClientRoleOptions; import io.agora.rtc2.Constants; import io.agora.rtc2.IRtcEngineEventHandler; +import io.reactivex.Observable; +import io.reactivex.ObservableOnSubscribe; +import io.reactivex.android.schedulers.AndroidSchedulers; /** @@ -132,7 +137,26 @@ public class EngineEventHandler extends IRtcEngineEventHandler { super.onClientRoleChanged(oldRole, newRole, newRoleOptions); //角色切换 麦克风切换 if (newRole == Constants.CLIENT_ROLE_BROADCASTER) { - RtcEngineManager.get().setMute(RtcEngineManager.get().isMute); + Observable.create((ObservableOnSubscribe) emitter -> { + RtcEngineManager.get().setMute(RtcEngineManager.get().isMute); + if (AvRoomDataManager.get().isRoomOwner() && + AvRoomDataManager.get().isSingleRoom() && + AvRoomDataManager.get().isOpenAnotherPKMode()) { + RoomPkBean pkBean = AvRoomDataManager.get().roomPkLiveData.getValue(); + if (pkBean != null) { + AudioEngineManager.get().connectOtherRoom(String.valueOf(pkBean.getARoomId()), pkBean.getAUid()); + } + } + emitter.onComplete(); + }).subscribeOn(AndroidSchedulers.mainThread()).subscribe(); + } + } + + @Override + public void onChannelMediaRelayStateChanged(int state, int code) { + super.onChannelMediaRelayStateChanged(state, code); + if (state == Constants.RELAY_STATE_FAILURE) { + SingleToastUtil.showToast("Join failed:" + code); } } @@ -162,7 +186,11 @@ public class EngineEventHandler extends IRtcEngineEventHandler { Logger.t(TAG).d("onRemoteAudioStats uid%d", remoteAudioStats.uid); long uid = (long) remoteAudioStats.uid; // 如果麦上没有这个人,不接收这个人的声音 - RtcEngineManager.get().setRemoteMute(uid, !AvRoomDataManager.get().checkIsOnMicByAccount(uid + "")); - + if (!(AvRoomDataManager.get().isSingleRoom() && AvRoomDataManager.get().isOpenAnotherPKMode())) { + Observable.create((ObservableOnSubscribe) emitter -> { + RtcEngineManager.get().setRemoteMute(uid, !AvRoomDataManager.get().checkIsOnMicByAccount(uid + "")); + emitter.onComplete(); + }).subscribeOn(AndroidSchedulers.mainThread()).subscribe(); + } } }