同步PIKO:修复个播PK声音状态异常

This commit is contained in:
max
2024-04-26 14:45:15 +08:00
parent 062c2ee0a9
commit 38b0af2f35
3 changed files with 35 additions and 3 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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();
}
}
}