diff --git a/app/src/main/java/com/mogo/cloud/BaseLiveActivity.java b/app/src/main/java/com/mogo/cloud/BaseLiveActivity.java index 2f27919..4ff38dc 100644 --- a/app/src/main/java/com/mogo/cloud/BaseLiveActivity.java +++ b/app/src/main/java/com/mogo/cloud/BaseLiveActivity.java @@ -33,7 +33,7 @@ public abstract class BaseLiveActivity extends AppCompatActivity { // 设置摄像头与状态 protected ToggleButton btnChangeCameraState; // 当前直播的状态 - protected ToggleButton tbLiveStatus; + protected TextView tvLiveStatus; // 相机数据预览 protected SurfaceView surfacePreviewView; @@ -77,7 +77,7 @@ public abstract class BaseLiveActivity extends AppCompatActivity { toggleCameraState(isChecked); }); - tbLiveStatus = findViewById(R.id.tbLiveStatus); + tvLiveStatus = findViewById(R.id.tvLiveStatus); surfacePlayView = findViewById(R.id.surfacePlayView); etLookRoomId = findViewById(R.id.etLookRoomId); diff --git a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java index 3903799..a5c6d21 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java @@ -38,15 +38,18 @@ public class LivePlayAndPushActivity extends BaseLiveActivity liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { @Override public void onChange(String camId, int status) { - tbLiveStatus.post(new Runnable() { + tvLiveStatus.post(new Runnable() { @Override public void run() { if (status == 0) { - tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStartLive)); - tbLiveStatus.setChecked(true); - } else { - tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStopLive)); - tbLiveStatus.setChecked(false); + tvLiveStatus.setTextColor(getResources().getColor(R.color.colorStartLive)); + tvLiveStatus.setText("正在直播中"); + } else if (status == 1) { + tvLiveStatus.setTextColor(getResources().getColor(R.color.colorStopLive)); + tvLiveStatus.setText("直播已停止"); + } else if (status == 2) { + tvLiveStatus.setTextColor(getResources().getColor(R.color.colorForcedStopLive)); + tvLiveStatus.setText("直播强制结束"); } } }); diff --git a/app/src/main/java/com/mogo/cloud/LivePushActivity.java b/app/src/main/java/com/mogo/cloud/LivePushActivity.java index 3776ae4..e7f0fda 100644 --- a/app/src/main/java/com/mogo/cloud/LivePushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePushActivity.java @@ -28,15 +28,13 @@ public class LivePushActivity extends BaseLiveActivity { liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { @Override public void onChange(String camId, int status) { - tbLiveStatus.post(new Runnable() { + tvLiveStatus.post(new Runnable() { @Override public void run() { if (status == 0) { - tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStartLive)); - tbLiveStatus.setChecked(true); + tvLiveStatus.setTextColor(getResources().getColor(R.color.colorStartLive)); } else { - tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStopLive)); - tbLiveStatus.setChecked(false); + tvLiveStatus.setTextColor(getResources().getColor(R.color.colorStopLive)); } } }); diff --git a/app/src/main/res/layout/activity_live_play_and_push.xml b/app/src/main/res/layout/activity_live_play_and_push.xml index 937d62f..5a691d9 100644 --- a/app/src/main/res/layout/activity_live_play_and_push.xml +++ b/app/src/main/res/layout/activity_live_play_and_push.xml @@ -32,6 +32,7 @@ android:text="本机预览" android:textColor="#FFEB3B" android:textSize="25dp" + android:textStyle="bold" app:layout_constraintEnd_toEndOf="@+id/surfacePreviewView" app:layout_constraintStart_toStartOf="@+id/surfacePreviewView" app:layout_constraintTop_toTopOf="parent" /> @@ -43,19 +44,21 @@ android:text="观看指定车机" android:textColor="#FF5722" android:textSize="25dp" + android:textStyle="bold" app:layout_constraintEnd_toEndOf="@+id/surfacePlayView" app:layout_constraintStart_toStartOf="@+id/surfacePlayView" app:layout_constraintTop_toTopOf="parent" /> - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e37451a..26861e6 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,5 @@ #03DAC5 #4CAF50 #F44336 + #9C27B0 \ No newline at end of file diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/LiveStreamManagerImpl.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/LiveStreamManagerImpl.java index 926b3bc..b5eb042 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/LiveStreamManagerImpl.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/LiveStreamManagerImpl.java @@ -4,7 +4,6 @@ import android.app.Application; import android.media.AudioFormat; import android.os.Handler; import android.os.SystemClock; -import android.util.Log; import com.mogo.cloud.live.listener.ILiveStatusListener; import com.mogo.cloud.live.model.CommandModel; @@ -29,7 +28,7 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { private final Application mApplication; // 循环上报摄像头可直播状态间隔时间 - private static final int PUSH_CAM_TIME = 10 * 30 * 1000; + private static final int PUSH_CAM_TIME = 30 * 1000; private static volatile int sCam1LiveStatus = 0, sCam2LiveStatus = 0; private static volatile int sCam1AvailableStatus = 0, sCam2AvailableStatus = 0; private static final int PUSH_START = 0; // 开始 @@ -74,7 +73,7 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { mLivePushConfig.setMute(true); mLivePushConfig.setDevicesId(devicesId); // 初始化直播 - mLivePusher = MoGoLiveManager.getInstance().init(mApplication, mLivePushConfig); + mLivePusher = MoGoLiveManager.getInstance().init(mApplication, mLivePushConfig); // 初始化Socket长连接通道 mSocketMsgUtils = SocketMsgUtils.getInstance(mApplication, @@ -110,19 +109,19 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { @Override public void startLiveStream() { - Logger.d(TAG, "startLiveStream"); + Logger.i(TAG, "startLiveStream"); PushService.startService(mApplication, PushService.ACTION_START_RTMP_PUSH); } @Override public void stopLiveStream() { - Logger.d(TAG, "stopLiveStream"); + Logger.i(TAG, "stopLiveStream"); PushService.startService(mApplication, PushService.ACTION_STOP_RTMP_PUSH); } @Override public void uploadCamStatus(int frontStatus, int backStatus) { - Logger.d(TAG, "uploadCamStatus frontStatus is:" + frontStatus + " backStatus is:" + backStatus); + Logger.i(TAG, "uploadCamStatus frontStatus is:" + frontStatus + " backStatus is:" + backStatus); sCam1AvailableStatus = frontStatus; sCam2AvailableStatus = backStatus; MsgBody msgBody = new MsgBody(); @@ -163,7 +162,7 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { * 开启摄像头状态循环 */ private void restartCamStatusLoop() { - Log.i(TAG, "开启摄像头状态循环"); + Logger.i(TAG, "摄像头状态循环"); if (mHandler != null) { mHandler.removeCallbacks(mCamStatusRun); mHandler.postDelayed(mCamStatusRun, PUSH_CAM_TIME); @@ -174,9 +173,13 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { * 循环同步摄像头状态 */ private Runnable mCamStatusRun = () -> { - Log.i(TAG, "循环同步摄像头状态"); + Logger.i(TAG, "循环同步摄像头状态"); uploadCamStatus(sCam1AvailableStatus, sCam2AvailableStatus); restartCamStatusLoop(); + // 判断当前观众的个数,如果没人观看了的情况则停止直播 + if (mLivePusher.getOnlineNumber() <= 1) { + livePushHandler(PUSH_STOP, C1); + } }; /** @@ -207,9 +210,8 @@ public class LiveStreamManagerImpl implements ILiveStreamManager { // 向外同步状态 liveStatusCallbackOnChange(C1, sCam1LiveStatus); } else { - Log.d(TAG, "目前只支持前置行车记录仪"); + Logger.e(TAG, "目前只支持前置行车记录仪"); } - } catch (Exception e) { e.printStackTrace(); } 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 fcab575..a5e9e88 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 @@ -198,7 +198,7 @@ public class MoGoLiveManager { */ private final IZegoEventHandler mEventHandler = new IZegoEventHandler() { - // 调试错误信息回调 + // 调试错误信息回调 @Override public void onDebugError(int errorCode, String funcName, String info) { super.onDebugError(errorCode, funcName, info); @@ -236,6 +236,7 @@ public class MoGoLiveManager { } else if (state == ZegoRoomState.CONNECTED) { mProgressListener.onConnected(roomID); } else { + onlineNumber = 0; mProgressListener.onDisConnect(); } } @@ -245,8 +246,8 @@ public class MoGoLiveManager { @Override public void onRoomOnlineUserCountUpdate(String roomID, int count) { super.onRoomOnlineUserCountUpdate(roomID, count); - Logger.i(TAG, "onRoomOnlineUserCountUpdate roomID : " + roomID + " , count : " + count); onlineNumber = count; + Logger.i(TAG, "onRoomOnlineUserCountUpdate roomID : " + roomID + " , online user number : " + onlineNumber); if (mRoomStatusListener != null) { mRoomStatusListener.onRoomOnlineUserCountUpdate(count); } @@ -256,8 +257,8 @@ public class MoGoLiveManager { @Override public void onRoomUserUpdate(String roomID, ZegoUpdateType updateType, ArrayList userList) { super.onRoomUserUpdate(roomID, updateType, userList); - Logger.i(TAG, "onRoomUserUpdate roomId : " + roomID + " , updateType : " + updateType.name()); onlineNumber = userList.size(); + Logger.i(TAG, "onRoomUserUpdate roomId : " + roomID + " , updateType : " + updateType.name() + " , online user number : " + onlineNumber); if (mRoomStatusListener != null) { mRoomStatusListener.onRoomUserUpdate(updateType, userList); } @@ -312,7 +313,7 @@ public class MoGoLiveManager { */ private void destroyEngine() { ZegoExpressEngine.destroyEngine(() -> { - Logger.d(TAG, "销毁ZeGo引擎"); + Logger.i(TAG, "销毁ZeGo引擎"); }); } @@ -465,7 +466,7 @@ public class MoGoLiveManager { !multiStreamId.equals(STREAM_ID_PREFIX)) { ZegoCanvas zegoCanvas = new ZegoCanvas(surfaceView); zegoCanvas.viewMode = ZegoViewMode.SCALE_TO_FILL; - Logger.d(TAG, "startLive multiStreamId: " + multiStreamId); + Logger.i(TAG, "startLive multiStreamId: " + multiStreamId); mExpressEngine.startPlayingStream(multiStreamId, zegoCanvas); } else { Logger.e(TAG, "直播ID有误,请重试"); @@ -477,7 +478,7 @@ public class MoGoLiveManager { * 停止播放直播 */ public void stopLive() { - Logger.d(TAG, "stopLive multiStreamId: " + multiStreamId); + Logger.i(TAG, "stopLive multiStreamId: " + multiStreamId); if (!TextUtils.isEmpty(multiStreamId) && mExpressEngine != null) { mExpressEngine.stopPlayingStream(multiStreamId); } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/server/PushService.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/server/PushService.java index 2deb65c..f42b4db 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/server/PushService.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/server/PushService.java @@ -48,6 +48,7 @@ public class PushService extends Service if (intent != null) { // 开启直播 if (ACTION_START_RTMP_PUSH.equals(intent.getAction())) { + Logger.i(TAG, "开启直播推送"); try { startPush(); } catch (Exception e) { @@ -56,6 +57,7 @@ public class PushService extends Service } // 关闭直播,如果还有人观看不关闭 else if (ACTION_STOP_RTMP_PUSH.equals(intent.getAction())) { + Logger.i(TAG, "关闭直播推送"); if (mLivePusher.getOnlineNumber() <= 1) { stopPush(); } else { @@ -64,6 +66,7 @@ public class PushService extends Service } // 强制关闭直播 else if (ACTION_FORCED_STOP_RTMP_PUSH.equals(intent.getAction())) { + Logger.i(TAG, "强制关闭直播推送"); stopPush(); } }