diff --git a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java index b656877..16ba302 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java @@ -21,42 +21,107 @@ import com.mogo.cloud.wifi.WifiStateManager; public class LivePlayActivity extends AppCompatActivity implements ITrafficCarLiveCallBack, IWifiStateListener { private String TAG = "LiveActivity"; - - private SurfaceView surfaceView; - private ToggleButton liveToggleBtn; - private EditText etLookRoomId; private TextView tvWifiState; - private String liveSn; + + private SurfaceView surfaceView0; + private ToggleButton liveToggleBtn0; + private EditText etLookRoomId0; + private String liveSn0; + + private SurfaceView surfaceView1; + private ToggleButton liveToggleBtn1; + private EditText etLookRoomId1; + private String liveSn1; + + private SurfaceView surfaceView2; + private ToggleButton liveToggleBtn2; + private EditText etLookRoomId2; + private String liveSn2; + + private SurfaceView surfaceView3; + private ToggleButton liveToggleBtn3; + private EditText etLookRoomId3; + private String liveSn3; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_live_play); - surfaceView = findViewById(R.id.surfaceView); - etLookRoomId = findViewById(R.id.etLookRoomId); - liveToggleBtn = findViewById(R.id.liveToggleBtn); - tvWifiState = findViewById(R.id.tvWifiState); LiveStreamManagerImpl.getInstance(this.getApplication(), - MoGoAiCloudClientConfig.getInstance().getSn(),false); - liveToggleBtn.setOnCheckedChangeListener((buttonView, isChecked) -> { + MoGoAiCloudClientConfig.getInstance().getSn(), false); + tvWifiState = findViewById(R.id.tvWifiState); + + surfaceView0 = findViewById(R.id.surfaceView0); + etLookRoomId0 = findViewById(R.id.etLookRoomId0); + liveToggleBtn0 = findViewById(R.id.liveToggleBtn0); + + liveToggleBtn0.setOnCheckedChangeListener((buttonView, isChecked) -> { Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); if (isChecked) { - liveSn = etLookRoomId.getText().toString().trim(); - MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn, surfaceView, this); - //just for test + liveSn0 = etLookRoomId0.getText().toString().trim(); + MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn0, surfaceView0, this); // MoGoAiCloudTrafficLive.viewFrontVehicleLive(39.968253, 116.410829, 0, surfaceView, this); } else { - MoGoAiCloudTrafficLive.stopCarLive(liveSn); + MoGoAiCloudTrafficLive.stopCarLive(liveSn0); } }); + + surfaceView1 = findViewById(R.id.surfaceView1); + etLookRoomId1 = findViewById(R.id.etLookRoomId1); + liveToggleBtn1 = findViewById(R.id.liveToggleBtn1); + + liveToggleBtn1.setOnCheckedChangeListener((buttonView, isChecked) -> { + Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); + if (isChecked) { + liveSn1 = etLookRoomId1.getText().toString().trim(); + MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn1, surfaceView1, this); +// MoGoAiCloudTrafficLive.viewFrontVehicleLive(39.968253, 116.410829, 0, surfaceView, this); + } else { + MoGoAiCloudTrafficLive.stopCarLive(liveSn1); + } + }); + + + surfaceView2 = findViewById(R.id.surfaceView2); + etLookRoomId2 = findViewById(R.id.etLookRoomId2); + liveToggleBtn2 = findViewById(R.id.liveToggleBtn2); + + liveToggleBtn2.setOnCheckedChangeListener((buttonView, isChecked) -> { + Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); + if (isChecked) { + liveSn2 = etLookRoomId2.getText().toString().trim(); + MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn2, surfaceView2, this); +// MoGoAiCloudTrafficLive.viewFrontVehicleLive(39.968253, 116.410829, 0, surfaceView, this); + } else { + MoGoAiCloudTrafficLive.stopCarLive(liveSn2); + } + }); + + + surfaceView3 = findViewById(R.id.surfaceView3); + etLookRoomId3 = findViewById(R.id.etLookRoomId3); + liveToggleBtn3 = findViewById(R.id.liveToggleBtn3); + + liveToggleBtn3.setOnCheckedChangeListener((buttonView, isChecked) -> { + Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); + if (isChecked) { + liveSn3 = etLookRoomId3.getText().toString().trim(); + MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn3, surfaceView3, this); +// MoGoAiCloudTrafficLive.viewFrontVehicleLive(39.968253, 116.410829, 0, surfaceView, this); + } else { + MoGoAiCloudTrafficLive.stopCarLive(liveSn3); + } + }); + WifiStateManager.getInstance().registerWifiStateListener(this); } @Override protected void onDestroy() { super.onDestroy(); - MoGoAiCloudTrafficLive.stopCarLive(liveSn); + MoGoAiCloudTrafficLive.stopCarLive(liveSn0); WifiStateManager.getInstance().unRegisterWifiStateListener(this); } diff --git a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java index 398a62a..e718746 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java @@ -102,7 +102,7 @@ public class LivePlayAndPushActivity extends BaseLiveActivity liveSn = etLookRoomId.getText().toString().trim(); liveStreamManager.getMoGoLiveManager().loginMultiRoom(liveSn); } else { - liveStreamManager.getMoGoLiveManager().logoutMultiRoom(); + liveStreamManager.getMoGoLiveManager().logoutMultiRoom(liveSn); } } diff --git a/app/src/main/res/layout/activity_live_play.xml b/app/src/main/res/layout/activity_live_play.xml index 8820e09..dbb3a24 100644 --- a/app/src/main/res/layout/activity_live_play.xml +++ b/app/src/main/res/layout/activity_live_play.xml @@ -1,41 +1,178 @@ - + android:layout_height="match_parent" + android:background="#FFF" + android:orientation="vertical"> - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintRight_toRightOf="parent" /> + \ No newline at end of file diff --git a/foudations/mogo-live/libs/VERSION.txt b/foudations/mogo-live/libs/VERSION.txt new file mode 100644 index 0000000..4e8442e --- /dev/null +++ b/foudations/mogo-live/libs/VERSION.txt @@ -0,0 +1 @@ +2.14.0.5551_stable_video \ No newline at end of file diff --git a/foudations/mogo-live/libs/ZegoExpressEngine.jar b/foudations/mogo-live/libs/ZegoExpressEngine.jar index e74820e..1a8ce6e 100644 Binary files a/foudations/mogo-live/libs/ZegoExpressEngine.jar and b/foudations/mogo-live/libs/ZegoExpressEngine.jar differ diff --git a/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so b/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so index f78414f..0a547d0 100755 Binary files a/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so and b/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so differ diff --git a/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so b/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so index 7a76a91..28b5e9e 100755 Binary files a/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so and b/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so differ diff --git a/foudations/mogo-live/libs/x86/libZegoExpressEngine.so b/foudations/mogo-live/libs/x86/libZegoExpressEngine.so new file mode 100755 index 0000000..dada88f Binary files /dev/null and b/foudations/mogo-live/libs/x86/libZegoExpressEngine.so differ diff --git a/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so b/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so new file mode 100755 index 0000000..fc99a4f Binary files /dev/null and b/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so differ diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/MoGoLiveManager.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/MoGoLiveManager.java index 5b9893d..602f365 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/MoGoLiveManager.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/MoGoLiveManager.java @@ -32,11 +32,11 @@ import im.zego.zegoexpress.ZegoExpressEngine; import im.zego.zegoexpress.callback.IZegoCustomVideoCaptureHandler; import im.zego.zegoexpress.callback.IZegoEventHandler; import im.zego.zegoexpress.constants.ZegoEngineState; -import im.zego.zegoexpress.constants.ZegoLanguage; import im.zego.zegoexpress.constants.ZegoPlayerState; import im.zego.zegoexpress.constants.ZegoPublishChannel; import im.zego.zegoexpress.constants.ZegoPublisherState; import im.zego.zegoexpress.constants.ZegoRemoteDeviceState; +import im.zego.zegoexpress.constants.ZegoRoomMode; import im.zego.zegoexpress.constants.ZegoRoomState; import im.zego.zegoexpress.constants.ZegoScenario; import im.zego.zegoexpress.constants.ZegoUpdateType; @@ -47,6 +47,9 @@ import im.zego.zegoexpress.constants.ZegoVideoFrameFormat; import im.zego.zegoexpress.constants.ZegoViewMode; import im.zego.zegoexpress.entity.ZegoCanvas; import im.zego.zegoexpress.entity.ZegoCustomVideoCaptureConfig; +import im.zego.zegoexpress.entity.ZegoEngineConfig; +import im.zego.zegoexpress.entity.ZegoEngineProfile; +import im.zego.zegoexpress.entity.ZegoPlayerConfig; import im.zego.zegoexpress.entity.ZegoRoomConfig; import im.zego.zegoexpress.entity.ZegoUser; import im.zego.zegoexpress.entity.ZegoVideoConfig; @@ -123,6 +126,7 @@ public class MoGoLiveManager { */ private final ZegoRoomConfig zeGoRoomConfig; private IMediaPlayerStateListener mMediaPlayerStateListener; + private ZegoUser zegoUserCurrent; private static final class Holder { private static final MoGoLiveManager manager = new MoGoLiveManager(); @@ -182,8 +186,11 @@ public class MoGoLiveManager { for (ILiveProgressListener iLiveProgressListener : mProgressListener) { iLiveProgressListener.onDebugError(errorCode, funcName, info); } - // 停止推送数据 - stopPublish(); + // 是否处于发布状态 + if (mLiveStatusModel != null && mLiveStatusModel.isPushing()) { + // 停止推送数据 + stopPublish(); + } } // 音视频引擎状态更新回调 @@ -466,15 +473,36 @@ public class MoGoLiveManager { case HTTP_DNS_ENV_DEMO: isTestEnv = false; } - mExpressEngine = ZegoExpressEngine.createEngine( - appId, - appKey, - isTestEnv, - ZegoScenario.GENERAL, - mApplication, - mEventHandler); + + // 设置房间模式为多房间模式 + ZegoExpressEngine.setRoomMode(ZegoRoomMode.MULTI_ROOM); + + ZegoEngineConfig zegoEngineConfig = new ZegoEngineConfig(); + zegoEngineConfig.advancedConfig.put("language", "chinese"); + zegoEngineConfig.advancedConfig.put("set_verbose", MoGoAiCloudClientConfig.getInstance().isShowDebugLog() + ""); + ZegoExpressEngine.setEngineConfig(zegoEngineConfig); + + ZegoEngineProfile profile = new ZegoEngineProfile(); + /* 请通过官网注册获取,格式为 123456789L */ + profile.appID = appId; + /* 64个字符,请通过官网注册获取,格式为"0123456789012345678901234567890123456789012345678901234567890123" */ + profile.appSign = appKey; + /* 通用场景接入 */ + profile.scenario = ZegoScenario.GENERAL; + /* 设置app的application 对象 */ + profile.application = mApplication; + /* 创建引擎 */ + mExpressEngine = ZegoExpressEngine.createEngine(profile, mEventHandler); + +// mExpressEngine = ZegoExpressEngine.createEngine( +// appId, +// appKey, +// isTestEnv, +// ZegoScenario.GENERAL, +// mApplication, +// mEventHandler); // 关闭日志 - mExpressEngine.setDebugVerbose(MoGoAiCloudClientConfig.getInstance().isShowDebugLog(), ZegoLanguage.CHINESE); + //mExpressEngine.setDebugVerbose(MoGoAiCloudClientConfig.getInstance().isShowDebugLog(), ZegoLanguage.CHINESE); // true 表示静音(关闭) mExpressEngine.muteMicrophone(true); if (mLivePushConfig != null) { @@ -549,8 +577,8 @@ public class MoGoLiveManager { + " currentRoomId:" + mLiveStatusModel.getCurrentRoomId() + " currentStreamId:" + mLiveStatusModel.getCurrentStreamId()); if (!mLiveStatusModel.isLoginCurrentRoom()) { - ZegoUser zegoUser = new ZegoUser(userId, NAME_PREFIX + userId); - mExpressEngine.loginRoom(mLiveStatusModel.getCurrentRoomId(), zegoUser, zeGoRoomConfig); + zegoUserCurrent = new ZegoUser(userId, NAME_PREFIX + userId); + mExpressEngine.loginRoom(mLiveStatusModel.getCurrentRoomId(), zegoUserCurrent, zeGoRoomConfig); } } @@ -589,26 +617,26 @@ public class MoGoLiveManager { Log.i(TAG, "尝试进入多房间 loginMultiRoom multiRoomId : " + mLiveStatusModel.getMultiRoomId() + " currentStreamId : " + mLiveStatusModel.getMultiStreamId()); - if (!mLiveStatusModel.isLoginMultiRoom()) { - Log.i(TAG, "执行登录多房间"); - mExpressEngine.loginMultiRoom(mLiveStatusModel.getMultiRoomId(), zeGoRoomConfig); - } else { - Log.w(TAG, "已经登录了多房间"); - } +// if (!mLiveStatusModel.isLoginMultiRoom()) { + Log.i(TAG, "执行登录多房间"); + mExpressEngine.loginRoom(mLiveStatusModel.getMultiRoomId(), zegoUserCurrent, zeGoRoomConfig); +// } else { +// Log.w(TAG, "已经登录了多房间"); +// } } /** * 退出多房间 */ - public synchronized void logoutMultiRoom() { + public synchronized void logoutMultiRoom(String sn) { Log.i(TAG, "尝试退出多房间 logoutMultiRoom multiRoomId : " + mLiveStatusModel.getMultiRoomId()); if (mExpressEngine != null) { - if (mLiveStatusModel.isLoginMultiRoom()) { - Log.i(TAG, "执行退出多房间"); - mExpressEngine.logoutRoom(mLiveStatusModel.getMultiRoomId()); - } else { - Log.w(TAG, "还未登录多房间"); - } +// if (mLiveStatusModel.isLoginMultiRoom()) { + Log.i(TAG, "执行退出多房间"); + mExpressEngine.logoutRoom(ROOM_ID_PREFIX + sn); +// } else { +// Log.w(TAG, "还未登录多房间"); +// } } else { Log.w(TAG, "ZeGo 引擎未初始化"); } @@ -668,7 +696,27 @@ public class MoGoLiveManager { mLiveStatusModel.getMultiStreamId().startsWith(STREAM_ID_PREFIX)) { ZegoCanvas zegoCanvas = new ZegoCanvas(surfaceView); zegoCanvas.viewMode = ZegoViewMode.SCALE_TO_FILL; - mExpressEngine.startPlayingStream(mLiveStatusModel.getMultiStreamId(), zegoCanvas); + + ZegoPlayerConfig config = new ZegoPlayerConfig(); + config.roomID = mLiveStatusModel.getMultiRoomId(); + + mExpressEngine.startPlayingStream(mLiveStatusModel.getMultiStreamId(), zegoCanvas, config); + } else { + Log.e(TAG, "直播ID有误,请重试"); + } + } + + public void startLive(TextureView textureView) { + Log.i(TAG, "尝试开始播放直播 startLive multiStreamId : " + mLiveStatusModel.getMultiStreamId()); + if (!TextUtils.isEmpty(mLiveStatusModel.getMultiStreamId()) && + mLiveStatusModel.getMultiStreamId().startsWith(STREAM_ID_PREFIX)) { + ZegoCanvas zegoCanvas = new ZegoCanvas(textureView); + zegoCanvas.viewMode = ZegoViewMode.SCALE_TO_FILL; + + ZegoPlayerConfig config = new ZegoPlayerConfig(); + config.roomID = mLiveStatusModel.getMultiRoomId(); + + mExpressEngine.startPlayingStream(mLiveStatusModel.getMultiStreamId(), zegoCanvas, config); } else { Log.e(TAG, "直播ID有误,请重试"); } @@ -689,7 +737,7 @@ public class MoGoLiveManager { /** * 停止播放直播 */ - public void stopLive() { + public void stopLive(String sn) { Log.i(TAG, "尝试停止播放直播 stopLive multiStreamId : " + mLiveStatusModel.getMultiStreamId()); if (mExpressEngine == null) { Log.w(TAG, "ZeGo 引擎未初始化"); @@ -699,7 +747,7 @@ public class MoGoLiveManager { mExpressEngine.stopPlayingStream(mLiveStatusModel.getMultiStreamId()); mExpressEngine.stopPreview(); // 退出正在查看的多房间 - logoutMultiRoom(); + logoutMultiRoom(sn); } /** diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveStatusModel.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveStatusModel.java index 5e1d768..20734e9 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveStatusModel.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveStatusModel.java @@ -66,6 +66,9 @@ public class LiveStatusModel { } public String getMultiRoomId() { + if (multiRoomId == null) { + return ""; + } return multiRoomId; } diff --git a/modules/mogo-trafficlive/build.gradle b/modules/mogo-trafficlive/build.gradle index b1c609f..ef3f657 100644 --- a/modules/mogo-trafficlive/build.gradle +++ b/modules/mogo-trafficlive/build.gradle @@ -34,9 +34,11 @@ dependencies { if (Boolean.valueOf(RELEASE)) { implementation "com.mogo.cloud:network:${MOGO_NETWORK_VERSION}" api "com.mogo.cloud:live:${MOGO_LIVE_VERSION}" + api "com.mogo.cloud:utils:${MOGO_UTILS_VERSION}" } else { implementation project(":foudations:mogo-network") api project(":foudations:mogo-live") + api project(':foudations:mogo-utils') } } diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveCurrentManager.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveCurrentManager.java index 6e256ac..2d8c560 100644 --- a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveCurrentManager.java +++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveCurrentManager.java @@ -192,7 +192,7 @@ public class TrafficLiveCurrentManager } } }); - MoGoLiveManager.getInstance().stopLive(); + MoGoLiveManager.getInstance().stopLive(liveSn); trafficLiveCallBack = null; }