diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/AudioEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/AudioEngineManager.java index cf09e5446..5489f93f7 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/AudioEngineManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/AudioEngineManager.java @@ -10,7 +10,6 @@ import com.yizhuan.xchat_android_core.room.bean.RoomAudioSdkType; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; 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 io.agora.ktvkit.KTVKit; import io.agora.rtc.Constants; @@ -36,11 +35,10 @@ public class AudioEngineManager { public void initRtcEngine(EngineType engineType) { switch (engineType) { case TYPE_WJ: - // if (iAudioEngine instanceof WJAudioEngineManager) return; if (UserModel.get().getCacheLoginUserInfo() != null) { WJAudioConstant.BUSINESS_UID = String.valueOf(UserModel.get().getCacheLoginUserInfo().getErbanNo()); } - this.iAudioEngine = new WJAudioEngineManager(BasicConfig.INSTANCE.getAppContext()); + this.iAudioEngine = WJAudioEngineManager.get(); break; case TYPE_AGORA: default: @@ -50,9 +48,10 @@ public class AudioEngineManager { } public void startRtcEngine(long uid, String audioSdkType) { - LogUtils.d("audioSdkType= "+audioSdkType); + LogUtils.d("audioSdkType= " + audioSdkType); RoomInfo curRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo; if (curRoomInfo == null) return; + if (iAudioEngine != null) iAudioEngine.leaveChannel(); if (RoomAudioSdkType.WUJIE.equals(audioSdkType)) { AudioEngineManager.get().initRtcEngine(EngineType.TYPE_WJ); } else { diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/BaseEngine.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/BaseEngine.java index 342f7fd04..8f45a8610 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/BaseEngine.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/BaseEngine.java @@ -1,12 +1,9 @@ package com.yizhuan.xchat_android_core.manager; -import android.content.Context; - import java.util.ArrayList; import java.util.List; public abstract class BaseEngine implements IAudioEngine { - protected Context context; /** * 角色-主播 */ @@ -49,8 +46,7 @@ public abstract class BaseEngine implements IAudioEngine { */ public volatile boolean isMusicPlaying = false; - public BaseEngine(Context context) { - this.context = context; + public BaseEngine() { this.speakQueueMembersPosition = new ArrayList<>(); } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/EngineEventHandler.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/EngineEventHandler.java index 57d82a27c..74ba1b73d 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/EngineEventHandler.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/EngineEventHandler.java @@ -3,14 +3,11 @@ package com.yizhuan.xchat_android_core.manager.agora; import android.os.Message; import com.orhanobut.logger.Logger; -import com.yizhuan.xchat_android_core.BuildConfig; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; -import java.lang.ref.WeakReference; - import io.agora.rtc.Constants; import io.agora.rtc.IRtcEngineEventHandler; @@ -21,21 +18,10 @@ public class EngineEventHandler extends IRtcEngineEventHandler { public static String TAG = EngineEventHandler.class.getSimpleName(); - private WeakReference mReference; - - EngineEventHandler(RtcEngineManager manager) { - mReference = new WeakReference<>(manager); - } - @Override public void onError(int err) { super.onError(err); Logger.t(TAG).d("onError" + err); - - RtcEngineManager rtcEngineManager = mReference.get(); - if (rtcEngineManager == null) { - return; - } switch (err) { case 1107: { SingleToastUtil.showToast("发生未知错误,请退出房间重新进入"); @@ -53,7 +39,7 @@ public class EngineEventHandler extends IRtcEngineEventHandler { super.onJoinChannelSuccess(channel, uid, elapsed); Logger.t(TAG).d("onJoinChannelSuccess" + channel + "uid:" + uid); //声网进入频道成功日志 - RtcEngineManager manager = mReference.get(); + RtcEngineManager manager = RtcEngineManager.get(); if (manager != null) { Message message = manager.mRtcEngineHandler.obtainMessage(); message.what = RtcEngineHandler.notifyJoinAvRoom; @@ -115,26 +101,22 @@ public class EngineEventHandler extends IRtcEngineEventHandler { @Override public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) { super.onAudioVolumeIndication(speakers, totalVolume); - RtcEngineManager manager = mReference.get(); - if (manager != null) { - Message message = manager.mRtcEngineHandler.obtainMessage(); - message.what = RtcEngineHandler.onAudioVolumeIndication; - message.obj = speakers; - manager.mRtcEngineHandler.sendMessage(message); - } + RtcEngineManager manager = RtcEngineManager.get(); + Message message = manager.mRtcEngineHandler.obtainMessage(); + message.what = RtcEngineHandler.onAudioVolumeIndication; + message.obj = speakers; + manager.mRtcEngineHandler.sendMessage(message); } @Override public void onUserMuteAudio(int uid, boolean muted) { super.onUserMuteAudio(uid, muted); - RtcEngineManager manager = mReference.get(); - if (manager != null) { - if (muted) { - Message message = manager.mRtcEngineHandler.obtainMessage(); - message.what = RtcEngineHandler.onUserMuteAudio; - message.obj = uid; - manager.mRtcEngineHandler.sendMessage(message); - } + RtcEngineManager manager = RtcEngineManager.get(); + if (muted) { + Message message = manager.mRtcEngineHandler.obtainMessage(); + message.what = RtcEngineHandler.onUserMuteAudio; + message.obj = uid; + manager.mRtcEngineHandler.sendMessage(message); } } @@ -143,7 +125,7 @@ public class EngineEventHandler extends IRtcEngineEventHandler { super.onClientRoleChanged(oldRole, newRole); //角色切换 麦克风切换 if (newRole == Constants.CLIENT_ROLE_BROADCASTER) { - mReference.get().setMute(mReference.get().isMute); + RtcEngineManager.get().setMute(RtcEngineManager.get().isMute); } } @@ -169,15 +151,9 @@ public class EngineEventHandler extends IRtcEngineEventHandler { public void onRemoteAudioStats(RemoteAudioStats remoteAudioStats) { super.onRemoteAudioStats(remoteAudioStats); Logger.t(TAG).d("onRemoteAudioStats uid%d", remoteAudioStats.uid); - long uid = (long) remoteAudioStats.uid; - RtcEngineManager rtcEngineManager = mReference.get(); - if (rtcEngineManager == null) { - return; - } - // 如果麦上没有这个人,不接收这个人的声音 - rtcEngineManager.setRemoteMute(uid, !AvRoomDataManager.get().checkIsOnMicByAccount(uid + "")); + RtcEngineManager.get().setRemoteMute(uid, !AvRoomDataManager.get().checkIsOnMicByAccount(uid + "")); } } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineHandler.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineHandler.java index 7729f1303..9bdd689d7 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineHandler.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineHandler.java @@ -12,8 +12,9 @@ import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; +import org.jetbrains.annotations.NotNull; + import java.io.File; -import java.lang.ref.WeakReference; import io.agora.rtc.Constants; import io.agora.rtc.IRtcEngineEventHandler; @@ -31,16 +32,10 @@ public class RtcEngineHandler extends Handler { public static int onAudioVolumeIndication = 1; public static int onUserMuteAudio = 2; - private WeakReference mReference; - - RtcEngineHandler(RtcEngineManager manager) { - mReference = new WeakReference<>(manager); - } - @Override - public void handleMessage(Message msg) { + public void handleMessage(@NotNull Message msg) { super.handleMessage(msg); - RtcEngineManager rtcEngineManager = mReference.get(); + RtcEngineManager rtcEngineManager = RtcEngineManager.get(); if (rtcEngineManager == null) return; if (msg.what == notifyJoinAvRoom) { if (!rtcEngineManager.inRoom) { diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineManager.java index 46bf9810f..f6c09e2ea 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/agora/RtcEngineManager.java @@ -5,6 +5,9 @@ import android.os.Handler; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.orhanobut.logger.Logger; import com.yizhuan.xchat_android_constants.XChatConstants; import com.yizhuan.xchat_android_core.manager.BaseEngine; @@ -27,17 +30,19 @@ import static io.agora.rtc.Constants.AUDIO_SCENARIO_GAME_STREAMING; */ public class RtcEngineManager extends BaseEngine { public static String TAG = RtcEngineManager.class.getSimpleName(); + @Nullable public RtcEngine mRtcEngine; - - public Handler mRtcEngineHandler = new RtcEngineHandler(this); - public EngineEventHandler mEngineEventHandler = new EngineEventHandler(this); + @NonNull + public final Handler mRtcEngineHandler = new RtcEngineHandler(); + @NonNull + public final EngineEventHandler mEngineEventHandler = new EngineEventHandler(); private static final class Helper { private static final RtcEngineManager INSTANCE = new RtcEngineManager(); } - private RtcEngineManager( ) { - super(BasicConfig.INSTANCE.getAppContext()); + private RtcEngineManager() { + super(); } public static RtcEngineManager get() { @@ -46,11 +51,6 @@ public class RtcEngineManager extends BaseEngine { @Override 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); if (mRtcEngine == null) { try { @@ -73,13 +73,7 @@ public class RtcEngineManager extends BaseEngine { mRtcEngine.setLogFile(Environment.getExternalStorageDirectory() + File.separator + BasicConfig.INSTANCE.getAppContext().getPackageName() + "/log/agora-rtc.log"); - } - - //先清除频道信息 - //stopAudioMixing(); - //mRtcEngine.leaveChannel(); - mRtcEngine.joinChannel(null, String.valueOf(channelId), null, (int) uid); } @@ -103,9 +97,7 @@ public class RtcEngineManager extends BaseEngine { mRtcEngine.leaveChannel(); mRtcEngine = null; } - if (mRtcEngineHandler != null) { - mRtcEngineHandler.removeCallbacksAndMessages(null); - } + mRtcEngineHandler.removeCallbacksAndMessages(null); } @Override @@ -125,18 +117,12 @@ public class RtcEngineManager extends BaseEngine { RtcEngine.destroy(); mRtcEngine = null; } - if (mRtcEngineHandler != null) { - mRtcEngineHandler.removeCallbacksAndMessages(null); - } - if (mEngineEventHandler != null) { - mEngineEventHandler = null; - } - - isMute = true; + mRtcEngineHandler.removeCallbacksAndMessages(null); + isMute = false; isRemoteMute = false; needRecord = false; inRoom = false; - isAudienceRole = true; + isAudienceRole = false; } @Override @@ -242,7 +228,7 @@ public class RtcEngineManager extends BaseEngine { return -1; } mRtcEngine.stopAudioMixing(); - int result = 0; + int result; try { result = mRtcEngine.startAudioMixing(filePath, loopback, false, cycle); } catch (Exception e) { @@ -271,8 +257,7 @@ public class RtcEngineManager extends BaseEngine { if (mRtcEngine == null) { return -1; } - int audioMixingDuration = mRtcEngine.getAudioMixingDuration(); - return audioMixingDuration; + return mRtcEngine.getAudioMixingDuration(); } diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/wj/WJAudioEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/wj/WJAudioEngineManager.java index 36434f156..6980210fa 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/wj/WJAudioEngineManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/wj/WJAudioEngineManager.java @@ -1,11 +1,13 @@ package com.yizhuan.xchat_android_core.manager.wj; -import android.content.Context; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.netease.nim.uikit.common.util.log.LogUtil; import com.wjhd.wy.WJMediaEngine; import com.wjhd.wy.audio.AudioEngine; @@ -20,6 +22,7 @@ import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; +import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import org.jetbrains.annotations.NotNull; @@ -33,33 +36,37 @@ public class WJAudioEngineManager extends BaseEngine { public static final String TAG = "WJAudioEngineManager"; private String logfileDir; - + @Nullable private AudioEngine mAudioEngine; - private AudioEngineHandler audioEngineHandler; + @NonNull + private final AudioEngineHandler audioEngineHandler = new AudioHandler(); private AudioRole curRole; private boolean isServerKicked = false; private boolean isChaRoomInChannel = false; private final AtomicInteger lock = new AtomicInteger(0); - public WJAudioEngineManager(Context context) { - super(context); - Log.e(TAG, "WJAudioEngineManager: " + WJMediaEngine.getVersion()); - isAudienceRole = true; + private static final class Helper { + private static final WJAudioEngineManager INSTANCE = new WJAudioEngineManager(); + } + + private WJAudioEngineManager() { + super(); + } + + public static WJAudioEngineManager get() { + return WJAudioEngineManager.Helper.INSTANCE; } private void initRtcEngine() { - WJAudioConstant.LOG_DIR = logfileDir = Environment.getExternalStorageDirectory().getPath() + File.separator + context.getPackageName() + File.separator + "log"; - if (audioEngineHandler == null) { - audioEngineHandler = new AudioHandler(this); - } + WJAudioConstant.LOG_DIR = logfileDir = Environment.getExternalStorageDirectory().getPath() + File.separator + BasicConfig.INSTANCE.getAppContext().getPackageName() + File.separator + "log"; if (mAudioEngine == null) { try { AudioEngine.setRecordingAudioFrameParameters(44100, 2); AudioEngine.setLogFileDir(logfileDir); AudioEngine.setDebugMode(BuildConfig.DEBUG);//设置是否调试模式,底层默认是false - mAudioEngine = WJMediaEngine.createAudioEngine(context, WJAudioConstant.APPID, audioEngineHandler); + mAudioEngine = WJMediaEngine.createAudioEngine(BasicConfig.INSTANCE.getAppContext(), WJAudioConstant.APPID, audioEngineHandler); } catch (Exception e) { throw new RuntimeException("NEED TO check sdk init fatal error" + Log.getStackTraceString(e)); } @@ -122,19 +129,11 @@ public class WJAudioEngineManager extends BaseEngine { private static class AudioHandler extends AudioEngineHandler { - private WeakReference mReference; - private boolean isEnter; - - - AudioHandler(WJAudioEngineManager manager) { - mReference = new WeakReference<>(manager); - isEnter = false; - } @Override public void onError(int err) { if (err == ErrorCode.LOGIN_JOIN_CHANNEL_ERROR) { - WJAudioEngineManager manager = mReference.get(); + WJAudioEngineManager manager = WJAudioEngineManager.get(); Message message = manager.handler.obtainMessage(); message.what = WJAudioConstant.MESSAGE_ENTER_CHANNEL_FAIL; message.obj = err; @@ -146,15 +145,13 @@ public class WJAudioEngineManager extends BaseEngine { @Override public void onJoinChannelSuccess(long channel, long uid, int elapsed) { super.onJoinChannelSuccess(channel, uid, elapsed); - WJAudioEngineManager manager = mReference.get(); - if (manager != null) { - Message message = manager.handler.obtainMessage(); - message.what = WJAudioConstant.MESSAGE_ENTER_CHANNEL_SUCCESS; - manager.handler.sendMessage(message); - manager.isServerKicked = false; - manager.channelId = channel; - manager.uid = uid; - } + WJAudioEngineManager manager = WJAudioEngineManager.get(); + Message message = manager.handler.obtainMessage(); + message.what = WJAudioConstant.MESSAGE_ENTER_CHANNEL_SUCCESS; + manager.handler.sendMessage(message); + manager.isServerKicked = false; + manager.channelId = channel; + manager.uid = uid; } @Override @@ -174,13 +171,11 @@ public class WJAudioEngineManager extends BaseEngine { @Override public void onAudioVolumeIndication(AudioVolumeInfo[] speakers) { super.onAudioVolumeIndication(speakers); - WJAudioEngineManager manager = mReference.get(); - if (manager != null) { - Message message = manager.handler.obtainMessage(); - message.what = WJAudioConstant.MESSAGE_AUDIO_VOLUME_INDICATION; - message.obj = speakers; - manager.handler.sendMessage(message); - } + WJAudioEngineManager manager = WJAudioEngineManager.get(); + Message message = manager.handler.obtainMessage(); + message.what = WJAudioConstant.MESSAGE_AUDIO_VOLUME_INDICATION; + message.obj = speakers; + manager.handler.sendMessage(message); } @Override @@ -192,21 +187,14 @@ public class WJAudioEngineManager extends BaseEngine { @Override public void onClientRoleChanged(AudioRole oldRole, AudioRole newRole) { super.onClientRoleChanged(oldRole, newRole); - WJAudioEngineManager manager = mReference.get(); - if (manager == null) { - return; - } - manager.curRole = newRole; + WJAudioEngineManager.get().curRole = newRole; } @Override public void onOfflineTimeOut(long channel, long uid) { super.onOfflineTimeOut(channel, uid); Log.e(TAG, "onOfflineTimeOut~~~"); - WJAudioEngineManager manager = mReference.get(); - if (manager == null) { - return; - } + WJAudioEngineManager manager = WJAudioEngineManager.get(); synchronized (manager.lock) { manager.isServerKicked = true; } @@ -220,7 +208,7 @@ public class WJAudioEngineManager extends BaseEngine { @Override public void OnMicUniqueIDUpdate(String micUniqueID) { super.OnMicUniqueIDUpdate(micUniqueID); - Log.e(TAG, "OnMicUniqueIDUpdate~~~" ); + Log.e(TAG, "OnMicUniqueIDUpdate~~~"); } } @@ -232,9 +220,6 @@ public class WJAudioEngineManager extends BaseEngine { AudioEngine.destroy(); mAudioEngine = null; } - if (audioEngineHandler != null) { - audioEngineHandler = null; - } isMute = false; isRemoteMute = false; needRecord = false; @@ -266,14 +251,11 @@ public class WJAudioEngineManager extends BaseEngine { } WJMediaEngine.destroyAudioEngine(); mAudioEngine = null; - if (audioEngineHandler != null) { - audioEngineHandler = null; - } isMute = false; isRemoteMute = false; needRecord = false; inRoom = false; - isAudienceRole = true; + isAudienceRole = false; curRole = AudioRole.NO_ROLE; }