语音SDK进房动态选择

This commit is contained in:
huangjian
2021-04-19 11:32:21 +08:00
committed by zu
parent cc54f69852
commit b93de9e8d2
8 changed files with 61 additions and 86 deletions

View File

@@ -28,12 +28,14 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.home.bean.BannerInfo; import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
import com.yizhuan.xchat_android_core.manager.AudioEngineManager; import com.yizhuan.xchat_android_core.manager.AudioEngineManager;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_core.manager.EngineType;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.manager.RoomEvent;
import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterInfo; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterInfo;
import com.yizhuan.xchat_android_core.monsterhunting.model.MonsterHuntingModel; import com.yizhuan.xchat_android_core.monsterhunting.model.MonsterHuntingModel;
import com.yizhuan.xchat_android_core.patriarch.exception.PmRoomLimitException; import com.yizhuan.xchat_android_core.patriarch.exception.PmRoomLimitException;
import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager; import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager;
import com.yizhuan.xchat_android_core.room.bean.RoomAudioSdkType;
import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg; import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg;
import com.yizhuan.xchat_android_core.room.model.AvRoomModel; import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
@@ -139,17 +141,7 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(roomQueueInfoSparseArray -> { .subscribe(roomQueueInfoSparseArray -> {
long uid = AuthModel.get().getCurrentUid(); long uid = AuthModel.get().getCurrentUid();
AudioEngineManager.get().startRtcEngine(uid); AudioEngineManager.get().startRtcEngine(uid,roomInfo.getAudioSdkType());
//成功进入房间发送log 到阿里
StatisticManager.Instance().sendAliyunLog(LogFactory.create(
LogProtocol.LogLevel.LEVEL_VERBOSE,
LogProtocol.Topic.TOPIC_IM_LOG,
LogProtocol.Event.EVENT_IM_CHANNEL
)
.append("roomUid", String.valueOf(roomInfo.getUid()))
.append("uid", String.valueOf(AuthModel.get().getCurrentUid()))
.append("type", "1"));
if (getMvpView() != null) { if (getMvpView() != null) {
getMvpView().enterRoomSuccess(); getMvpView().enterRoomSuccess();
} }
@@ -254,7 +246,7 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
if (roomQueueInfo != null) { if (roomQueueInfo != null) {
JsonObject valueJsonObj = jsonParser.parse(entry.value).getAsJsonObject(); JsonObject valueJsonObj = jsonParser.parse(entry.value).getAsJsonObject();
if (valueJsonObj != null) { if (valueJsonObj != null) {
chatRoomMember = mGson.fromJson(valueJsonObj,MicMemberInfo.class); chatRoomMember = mGson.fromJson(valueJsonObj, MicMemberInfo.class);
accounts.add(chatRoomMember.getAccount()); accounts.add(chatRoomMember.getAccount());
roomQueueInfo.mChatRoomMember = chatRoomMember; roomQueueInfo.mChatRoomMember = chatRoomMember;
} }

View File

@@ -6,8 +6,10 @@ import com.netease.nim.uikit.common.util.log.LogUtil;
import com.yizhuan.xchat_android_core.manager.agora.RtcEngineManager; import com.yizhuan.xchat_android_core.manager.agora.RtcEngineManager;
import com.yizhuan.xchat_android_core.manager.wj.WJAudioConstant; import com.yizhuan.xchat_android_core.manager.wj.WJAudioConstant;
import com.yizhuan.xchat_android_core.manager.wj.WJAudioEngineManager; import com.yizhuan.xchat_android_core.manager.wj.WJAudioEngineManager;
import com.yizhuan.xchat_android_core.room.bean.RoomAudioSdkType;
import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.utils.LogUtils;
import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
import io.agora.ktvkit.KTVKit; import io.agora.ktvkit.KTVKit;
@@ -25,7 +27,6 @@ public class AudioEngineManager {
} }
private AudioEngineManager() { private AudioEngineManager() {
initRtcEngine(EngineType.TYPE_AGORA);
} }
public static AudioEngineManager get() { public static AudioEngineManager get() {
@@ -35,6 +36,7 @@ public class AudioEngineManager {
public void initRtcEngine(EngineType engineType) { public void initRtcEngine(EngineType engineType) {
switch (engineType) { switch (engineType) {
case TYPE_WJ: case TYPE_WJ:
// if (iAudioEngine instanceof WJAudioEngineManager) return;
if (UserModel.get().getCacheLoginUserInfo() != null) { if (UserModel.get().getCacheLoginUserInfo() != null) {
WJAudioConstant.BUSINESS_UID = String.valueOf(UserModel.get().getCacheLoginUserInfo().getErbanNo()); WJAudioConstant.BUSINESS_UID = String.valueOf(UserModel.get().getCacheLoginUserInfo().getErbanNo());
} }
@@ -42,13 +44,20 @@ public class AudioEngineManager {
break; break;
case TYPE_AGORA: case TYPE_AGORA:
default: default:
this.iAudioEngine = new RtcEngineManager(BasicConfig.INSTANCE.getAppContext()); this.iAudioEngine = RtcEngineManager.get();
break;
} }
} }
public void startRtcEngine(long uid) { public void startRtcEngine(long uid, String audioSdkType) {
LogUtils.d("audioSdkType= "+audioSdkType);
RoomInfo curRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo; RoomInfo curRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (curRoomInfo == null) return; if (curRoomInfo == null) return;
if (RoomAudioSdkType.WUJIE.equals(audioSdkType)) {
AudioEngineManager.get().initRtcEngine(EngineType.TYPE_WJ);
} else {
AudioEngineManager.get().initRtcEngine(EngineType.TYPE_AGORA);
}
joinChannel(curRoomInfo.getRoomId(), uid); joinChannel(curRoomInfo.getRoomId(), uid);
if (curRoomInfo.getUid() == uid && curRoomInfo.getType() != RoomInfo.ROOMTYPE_HOME_PARTY) { if (curRoomInfo.getUid() == uid && curRoomInfo.getType() != RoomInfo.ROOMTYPE_HOME_PARTY) {
//设置用户角色为主播,轰趴房不能默认设置房主为主播 //设置用户角色为主播,轰趴房不能默认设置房主为主播

View File

@@ -112,7 +112,6 @@ public final class RtcEngineManager {
eventHandler.isEnter = true; eventHandler.isEnter = true;
if (mRtcEngine == null) { if (mRtcEngine == null) {
try { try {
mRtcEngine = RtcEngine.create(BasicConfig.INSTANCE.getAppContext(), XChatConstants.AGORA_KEY, eventHandler); mRtcEngine = RtcEngine.create(BasicConfig.INSTANCE.getAppContext(), XChatConstants.AGORA_KEY, eventHandler);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e)); throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));

View File

@@ -1,6 +1,5 @@
package com.yizhuan.xchat_android_core.manager.agora; package com.yizhuan.xchat_android_core.manager.agora;
import android.os.Environment;
import android.os.Message; import android.os.Message;
import com.orhanobut.logger.Logger; import com.orhanobut.logger.Logger;
@@ -9,16 +8,12 @@ import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.manager.RoomEvent;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
import java.io.File;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import io.agora.rtc.Constants; import io.agora.rtc.Constants;
import io.agora.rtc.IRtcEngineEventHandler; import io.agora.rtc.IRtcEngineEventHandler;
import static io.agora.rtc.Constants.AUDIO_RECORDING_QUALITY_LOW;
/** /**
* @author by 梁馨 on 2020/9/14. * @author by 梁馨 on 2020/9/14.
*/ */
@@ -27,11 +22,9 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
public static String TAG = EngineEventHandler.class.getSimpleName(); public static String TAG = EngineEventHandler.class.getSimpleName();
private WeakReference<RtcEngineManager> mReference; private WeakReference<RtcEngineManager> mReference;
private volatile boolean isEnter;
EngineEventHandler(RtcEngineManager manager) { EngineEventHandler(RtcEngineManager manager) {
mReference = new WeakReference<>(manager); mReference = new WeakReference<>(manager);
isEnter = true;
} }
@Override @Override
@@ -60,21 +53,14 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
super.onJoinChannelSuccess(channel, uid, elapsed); super.onJoinChannelSuccess(channel, uid, elapsed);
Logger.t(TAG).d("onJoinChannelSuccess" + channel + "uid:" + uid); Logger.t(TAG).d("onJoinChannelSuccess" + channel + "uid:" + uid);
//声网进入频道成功日志 //声网进入频道成功日志
RtcEngineManager rtcEngineManager = mReference.get(); RtcEngineManager manager = mReference.get();
if (rtcEngineManager != null && isEnter) { if (manager != null) {
isEnter = false; Message message = manager.mRtcEngineHandler.obtainMessage();
if (!rtcEngineManager.inRoom) { message.what = RtcEngineHandler.notifyJoinAvRoom;
IMNetEaseManager.get().joinAvRoom(); manager.mRtcEngineHandler.sendMessage(message);
} manager.uid = uid;
if (rtcEngineManager.needRecord && rtcEngineManager.mRtcEngine != null) {
rtcEngineManager.mRtcEngine.startAudioRecording(Environment.getExternalStorageDirectory()
+ File.separator + BasicConfig.INSTANCE.getAppContext().getPackageName()
+ "/audio/" + System.currentTimeMillis() + ".aac", AUDIO_RECORDING_QUALITY_LOW);
}
rtcEngineManager.inRoom = true;
rtcEngineManager.uid = uid;
} }
} }
@@ -129,23 +115,6 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
@Override @Override
public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) { public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) {
super.onAudioVolumeIndication(speakers, totalVolume); super.onAudioVolumeIndication(speakers, totalVolume);
if (BuildConfig.DEBUG) {
if (speakers.length > 0) {
StringBuilder stringBuilder = new StringBuilder();
for (AudioVolumeInfo speaker : speakers) {
stringBuilder.append(speaker.uid);
stringBuilder.append(",");
}
if (stringBuilder.length() > 0) {
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
}
}
}
RtcEngineManager manager = mReference.get(); RtcEngineManager manager = mReference.get();
if (manager != null) { if (manager != null) {
Message message = manager.mRtcEngineHandler.obtainMessage(); Message message = manager.mRtcEngineHandler.obtainMessage();

View File

@@ -53,7 +53,7 @@ public class RtcEngineHandler extends Handler {
+ "/audio/" + System.currentTimeMillis() + ".aac", AUDIO_RECORDING_QUALITY_LOW); + "/audio/" + System.currentTimeMillis() + ".aac", AUDIO_RECORDING_QUALITY_LOW);
} }
} else if (msg.what == 1) {//onAudioVolumeIndication 说话声音音量提示回调 } else if (msg.what == onAudioVolumeIndication) {//onAudioVolumeIndication 说话声音音量提示回调
IRtcEngineEventHandler.AudioVolumeInfo[] speakers = (IRtcEngineEventHandler.AudioVolumeInfo[]) msg.obj; IRtcEngineEventHandler.AudioVolumeInfo[] speakers = (IRtcEngineEventHandler.AudioVolumeInfo[]) msg.obj;
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return; if (roomInfo == null) return;
@@ -87,8 +87,6 @@ public class RtcEngineHandler extends Handler {
new RoomEvent().setEvent(RoomEvent.SPEAK_STATE_CHANGE) new RoomEvent().setEvent(RoomEvent.SPEAK_STATE_CHANGE)
.setMicPositionList(rtcEngineManager.speakQueueMembersPosition) .setMicPositionList(rtcEngineManager.speakQueueMembersPosition)
); );
} else if (msg.what == 2) {//onUserMuteAudio 用户静音回调
Integer uid = (Integer) msg.obj;
} }
} }
} }

View File

@@ -1,6 +1,5 @@
package com.yizhuan.xchat_android_core.manager.agora; package com.yizhuan.xchat_android_core.manager.agora;
import android.content.Context;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
@@ -19,6 +18,9 @@ import java.util.Locale;
import io.agora.rtc.Constants; import io.agora.rtc.Constants;
import io.agora.rtc.RtcEngine; import io.agora.rtc.RtcEngine;
import static io.agora.rtc.Constants.AUDIO_PROFILE_MUSIC_STANDARD;
import static io.agora.rtc.Constants.AUDIO_SCENARIO_GAME_STREAMING;
/** /**
* @author by 梁馨 on 2020/9/14. * @author by 梁馨 on 2020/9/14.
@@ -30,34 +32,36 @@ public class RtcEngineManager extends BaseEngine {
public Handler mRtcEngineHandler = new RtcEngineHandler(this); public Handler mRtcEngineHandler = new RtcEngineHandler(this);
public EngineEventHandler mEngineEventHandler = new EngineEventHandler(this); public EngineEventHandler mEngineEventHandler = new EngineEventHandler(this);
public RtcEngineManager(Context context) { private static final class Helper {
super(context); private static final RtcEngineManager INSTANCE = new RtcEngineManager();
isAudienceRole = true; }
this.isMute = true;
this.isRemoteMute = false; private RtcEngineManager( ) {
super(BasicConfig.INSTANCE.getAppContext());
}
public static RtcEngineManager get() {
return RtcEngineManager.Helper.INSTANCE;
} }
@Override @Override
public void enterChannel(long channelId, long uid) { public void enterChannel(long channelId, long uid) {
isMute = false;
isRemoteMute = false;
needRecord = false;
inRoom = false;
isAudienceRole = false;
Logger.t(TAG).d("enterChannel channelId:%d", channelId); Logger.t(TAG).d("enterChannel channelId:%d", channelId);
if (mRtcEngine == null) { if (mRtcEngine == null) {
try { try {
mEngineEventHandler = new EngineEventHandler(this);
mRtcEngine = RtcEngine.create(BasicConfig.INSTANCE.getAppContext(), XChatConstants.AGORA_KEY, mEngineEventHandler); mRtcEngine = RtcEngine.create(BasicConfig.INSTANCE.getAppContext(), XChatConstants.AGORA_KEY, mEngineEventHandler);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException( throw new RuntimeException(
"NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e)); "NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
} }
if (mRtcEngineHandler == null) {
mRtcEngineHandler = new RtcEngineHandler(this);
}
//设置频道模式为直播 //设置频道模式为直播
mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING);
mRtcEngine.setAudioProfile(Constants.AUDIO_PROFILE_MUSIC_STANDARD, mRtcEngine.setAudioProfile(AUDIO_PROFILE_MUSIC_STANDARD, AUDIO_SCENARIO_GAME_STREAMING);
Constants.AUDIO_SCENARIO_GAME_STREAMING);
mRtcEngine.enableAudioVolumeIndication(600, 3, false); mRtcEngine.enableAudioVolumeIndication(600, 3, false);
mRtcEngine.setDefaultAudioRoutetoSpeakerphone(true); mRtcEngine.setDefaultAudioRoutetoSpeakerphone(true);
mRtcEngine.setExternalVideoSource(true, false, true); mRtcEngine.setExternalVideoSource(true, false, true);
@@ -73,8 +77,8 @@ public class RtcEngineManager extends BaseEngine {
} }
//先清除频道信息 //先清除频道信息
stopAudioMixing(); //stopAudioMixing();
mRtcEngine.leaveChannel(); //mRtcEngine.leaveChannel();
mRtcEngine.joinChannel(null, String.valueOf(channelId), null, (int) uid); mRtcEngine.joinChannel(null, String.valueOf(channelId), null, (int) uid);
} }
@@ -106,7 +110,7 @@ public class RtcEngineManager extends BaseEngine {
@Override @Override
public void reEnterChannel(long channelId, long uid) { public void reEnterChannel(long channelId, long uid) {
enterChannel(channelId,uid); enterChannel(channelId, uid);
setRemoteMute(isRemoteMute); setRemoteMute(isRemoteMute);
setMute(isMute); setMute(isMute);
} }
@@ -155,23 +159,14 @@ public class RtcEngineManager extends BaseEngine {
public void setRemoteMute(long uid, boolean mute) { public void setRemoteMute(long uid, boolean mute) {
Logger.t(TAG).d("setRemoteMute uid:%s mute:%s", uid, mute); Logger.t(TAG).d("setRemoteMute uid:%s mute:%s", uid, mute);
if (uid == 0) {
return;
}
if (mRtcEngine != null) { if (mRtcEngine != null) {
//当蒙圈显示的时候房间需要静音,但是在房间的话还是不静音好点吧
mRtcEngine.muteRemoteAudioStream((int) uid, mute); mRtcEngine.muteRemoteAudioStream((int) uid, mute);
// if (result == 0) {
// isRemoteMute = mute;
// }
} }
} }
@Override @Override
public boolean setRole(int role) { public boolean setRole(int role) {
Logger.t(TAG).d("setRole role=" + role + ",isAudienceRole:" + isAudienceRole ); Logger.t(TAG).d("setRole role=" + role + ",isAudienceRole:" + isAudienceRole);
if (mRtcEngine != null) { if (mRtcEngine != null) {
mRtcEngine.setClientRole(role); mRtcEngine.setClientRole(role);
@@ -281,7 +276,6 @@ public class RtcEngineManager extends BaseEngine {
} }
@Override @Override
public void setChatRoomOnlineStatus(boolean status) { public void setChatRoomOnlineStatus(boolean status) {

View File

@@ -0,0 +1,9 @@
package com.yizhuan.xchat_android_core.room.bean;
/**
*房间语音SDK类型
*/
public interface RoomAudioSdkType {
String SHENGWANG = "shengwang"; //声网
String WUJIE = "wujie"; //无界
}

View File

@@ -181,6 +181,11 @@ public class RoomInfo implements Parcelable,Serializable {
private boolean canOpenBlindDate; private boolean canOpenBlindDate;
/**
* {@link RoomAudioSdkType}
*/
private String audioSdkType;
// /** // /**
// * 房间角标 // * 房间角标
// */ // */