From 7beec1fc9e4da2f546f32b44f924fd5ed9af914c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 4 Feb 2021 18:42:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9socket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/cloud/live/model/CommandModel.java | 30 +++++++++++++++++++ .../cloud/live/socket/SocketMsgUtils.java | 14 +++++---- .../cloud/live/utils/LiveStreamUtils.java | 2 +- 3 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/CommandModel.java diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/CommandModel.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/CommandModel.java new file mode 100644 index 0000000..66d5e4d --- /dev/null +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/CommandModel.java @@ -0,0 +1,30 @@ +package com.mogo.cloud.live.model; + +public class CommandModel { + private int type; + private String videoChannel; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getVideoChannel() { + return videoChannel; + } + + public void setVideoChannel(String videoChannel) { + this.videoChannel = videoChannel; + } + + @Override + public String toString() { + return "CommandModel{" + + "type=" + type + + ", videoChannel='" + videoChannel + '\'' + + '}'; + } +} diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java index f05cd01..923f4a6 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java @@ -3,6 +3,7 @@ package com.mogo.cloud.live.socket; import android.content.Context; import android.util.Log; +import com.mogo.cloud.live.model.CommandModel; import com.mogo.cloud.socket.IMogoCloudSocketMsgAckListener; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.MsgBody; @@ -11,7 +12,8 @@ import com.mogo.cloud.socket.SocketManager; /** * Socket常链接工具类 */ -public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoCloudSocketOnMessageListener { +public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, + IMogoCloudSocketOnMessageListener { private static final String TAG = "SocketMsgUtils"; private static final String appId = "liveStream"; @@ -42,9 +44,10 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoClou * 初始化长连接 */ private void initSocket() { + Log.i(TAG, "初始化长连接……"); mSocketManager = SocketManager.getInstance(); mSocketManager.init(mContext); - mSocketManager.registerOnMessageListener(401016, this); + mSocketManager.registerOnMessageListener(401017, this); } /** @@ -61,6 +64,7 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoClou */ public void release() { mSocketManager.release(); + mSocketManager.unregisterOnMessageListener(401017, this); } @Override @@ -70,12 +74,12 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoClou } @Override - public Class target() { - return Object.class; + public Class target() { + return CommandModel.class; } @Override - public void onMsgReceived(Object obj) { + public void onMsgReceived(CommandModel obj) { Log.i(TAG, "onMsgReceived: obj=" + obj); } } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java index 4c0029e..e22053d 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java @@ -23,7 +23,7 @@ public class LiveStreamUtils implements BizMessageListener { private static final String TAG = "LiveStreamUtils"; private static final int POLL_TIME = 30 * 1000; // 循环上报摄像头可直播状态间隔时间 - private static final int PUSH_CAM_TIME = 10 * 1000; + private static final int PUSH_CAM_TIME = 10 * 60 * 1000; private static final int PUSH_START = 0; private static final int PUSH_STOP = 1; private static final String C1 = "C_1"; //前置摄像头 From 5a4293b95002dfdf8336a37fddee0bc015447b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 5 Feb 2021 12:38:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=9B=B4=E6=92=ADdemo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 - .../java/com/mogo/cloud/LivePlayActivity.java | 12 +++---- .../java/com/mogo/cloud/LivePushActivity.java | 10 +++--- .../cloud/live/manager/MoGoLiveManager.java | 31 +++++++++++++------ 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5674e0c..1f8e3ef 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -26,7 +26,6 @@ diff --git a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java index ced4618..a69631f 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java @@ -11,6 +11,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.mogo.cloud.live.listener.ILiveProgressListener; import com.mogo.cloud.live.manager.MoGoLiveManager; +import com.mogo.cloud.util.Devices; public class LivePlayActivity extends AppCompatActivity { @@ -34,12 +35,11 @@ public class LivePlayActivity extends AppCompatActivity { Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); if (isChecked) { String roomId = etLookRoomId.getText().toString().trim(); - mStreamId = MoGoLiveManager.STREAM_ID_PREFIX + roomId; MoGoLiveManager.getInstance().init(this.getApplication(), null); - MoGoLiveManager.getInstance().loginRoom("F803EB2046PZD00140", roomId); + MoGoLiveManager.getInstance().loginRoom(Devices.getSn(), roomId); MoGoLiveManager.getInstance().setLiveProgressListener(listener); } else { - MoGoLiveManager.getInstance().stopLive(mStreamId); + MoGoLiveManager.getInstance().stopLive(); } }); } @@ -83,12 +83,12 @@ public class LivePlayActivity extends AppCompatActivity { }; private void toggleLive(boolean isChecked) { - Log.i(TAG, "toggleLive status : " + isChecked + " , mStreamId : " + mStreamId); if (isChecked) { - MoGoLiveManager.getInstance().startLive(mStreamId, surfaceView); + mStreamId = MoGoLiveManager.getInstance().startLive(surfaceView); } else { - MoGoLiveManager.getInstance().stopLive(mStreamId); + MoGoLiveManager.getInstance().stopLive(); } + Log.i(TAG, "toggleLive status : " + isChecked + " , mStreamId : " + mStreamId); } @Override diff --git a/app/src/main/java/com/mogo/cloud/LivePushActivity.java b/app/src/main/java/com/mogo/cloud/LivePushActivity.java index 8cecf36..9ca3b3a 100644 --- a/app/src/main/java/com/mogo/cloud/LivePushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePushActivity.java @@ -40,11 +40,11 @@ public class LivePushActivity extends BaseLiveActivity { public void toggleLive(boolean isLive) { Log.i(TAG, "toggleLive : " + isLive); this.isLive = isLive; -// if (isLive) { -// PushService.startService(this, PushService.ACTION_START_RTMP_PUSH, Devices.getSn()); -// } else { -// PushService.startService(this, PushService.ACTION_STOP_RTMP_PUSH, null); -// } + if (isLive) { + PushService.startService(this, PushService.ACTION_START_RTMP_PUSH, Devices.getSn()); + } else { + PushService.startService(this, PushService.ACTION_STOP_RTMP_PUSH, null); + } } @Override 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 3431fa2..c429e33 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 @@ -2,10 +2,12 @@ package com.mogo.cloud.live.manager; import android.app.Application; import android.os.Environment; +import android.text.TextUtils; import android.util.Log; import android.view.SurfaceView; import com.mogo.cloud.live.listener.ILiveProgressListener; +import com.mogo.utils.logger.Logger; import org.json.JSONObject; @@ -88,6 +90,10 @@ public class MoGoLiveManager { * 当前的房间ID */ private String currentRoomId = ""; + /** + * 当前直播流ID + */ + private String currentStreamId = ""; /** * 自定义采集状态,true-初始化完成,false-没有初始化 */ @@ -288,8 +294,11 @@ public class MoGoLiveManager { public void loginRoom(String userId, String roomId) { initCustomVideoCapture(); currentRoomId = ROOM_ID_PREFIX + roomId; + currentStreamId = STREAM_ID_PREFIX + roomId; ZegoUser zegoUser = new ZegoUser(userId, NAME_PREFIX + userId); mExpressEngine.loginRoom(currentRoomId, zegoUser); + Log.i(TAG, "loginRoom userId:" + userId + " currentRoomId : " + currentRoomId + + " currentStreamId:" + currentStreamId); } /** @@ -373,22 +382,26 @@ public class MoGoLiveManager { /** * 开始直播 * - * @param streamId 直播流ID * @param surfaceView 渲染直播的视图 */ - public void startLive(String streamId, SurfaceView surfaceView) { - ZegoCanvas zegoCanvas = new ZegoCanvas(surfaceView); - zegoCanvas.viewMode = ZegoViewMode.SCALE_TO_FILL; - mExpressEngine.startPlayingStream(streamId, zegoCanvas); + public String startLive(SurfaceView surfaceView) { + if (!TextUtils.isEmpty(currentStreamId) && + !currentStreamId.equals(STREAM_ID_PREFIX)) { + ZegoCanvas zegoCanvas = new ZegoCanvas(surfaceView); + zegoCanvas.viewMode = ZegoViewMode.SCALE_TO_FILL; + mExpressEngine.startPlayingStream(currentStreamId, zegoCanvas); + } else { + Logger.e(TAG, "直播ID有误,请重试"); + } + + return currentStreamId; } /** * 停止直播 - * - * @param streamId 数据流ID */ - public void stopLive(String streamId) { - mExpressEngine.stopPlayingStream(streamId); + public void stopLive() { + mExpressEngine.stopPlayingStream(currentStreamId); stopPreview(); logOutRoom(); } From 81592c2a1ac9ed5db8477c5e94a559daf17e26ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 5 Feb 2021 17:31:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E6=8C=87=E4=BB=A4=E4=B8=8B=E5=8F=91=E7=9A=84=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/cloud/LivePushActivity.java | 13 +---- .../live/manager/CameraFrameManager.java | 2 +- .../cloud/live/manager/MoGoLiveManager.java | 1 - .../cloud/live/socket/SocketMsgUtils.java | 31 ++++-------- .../cloud/live/utils/LiveStreamUtils.java | 47 +++++++++---------- .../cloud/passport/MoGoAiCloudClient.java | 2 +- 6 files changed, 35 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/mogo/cloud/LivePushActivity.java b/app/src/main/java/com/mogo/cloud/LivePushActivity.java index 574d100..e475248 100644 --- a/app/src/main/java/com/mogo/cloud/LivePushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePushActivity.java @@ -1,7 +1,6 @@ package com.mogo.cloud; import android.os.Bundle; -import android.util.Log; import com.mogo.cloud.live.manager.CameraFrameManager; import com.mogo.cloud.live.manager.ILiveStreamManager; @@ -21,7 +20,6 @@ public class LivePushActivity extends BaseLiveActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // 初始化直播流管理 ILiveStreamManager liveStreamManager = LiveStreamManagerImpl.getInstance(this, Devices.getSn()); liveStreamManager.uploadCamStatus(1, 1); @@ -29,22 +27,13 @@ public class LivePushActivity extends BaseLiveActivity { @Override public void onVideoFrame(byte[] bytes, int bytesLength) { - if (!isLive) { - return; - } //Log.i(TAG, "onVideoFrame byte length: " + bytesLength); CameraFrameManager.getInstance().notifyYUVData(bytes, 1280, 720, 3); } @Override public void toggleLive(boolean isLive) { - Log.i(TAG, "toggleLive : " + isLive); - this.isLive = isLive; - if (isLive) { - PushService.startService(this, PushService.ACTION_START_RTMP_PUSH, Devices.getSn()); - } else { - PushService.startService(this, PushService.ACTION_STOP_RTMP_PUSH, null); - } + } @Override diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/CameraFrameManager.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/CameraFrameManager.java index f232803..ca1ca4a 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/CameraFrameManager.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/CameraFrameManager.java @@ -103,7 +103,7 @@ public class CameraFrameManager { } private void dispatchData(byte[] data) { - if (globalDataListener != null && globalDataListener.size() > 0) { + if (globalDataListener.size() > 0) { for (IYUVDataListener callback : globalDataListener) { if (callback != null) { callback.onFrame(data); 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 c429e33..fabae5e 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 @@ -472,7 +472,6 @@ public class MoGoLiveManager { * 停止观看直播 */ public void onDestroyLive() { - stopPreview(); logOutRoom(); destroyEngine(); } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java index 923f4a6..f123665 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/socket/SocketMsgUtils.java @@ -3,7 +3,6 @@ package com.mogo.cloud.live.socket; import android.content.Context; import android.util.Log; -import com.mogo.cloud.live.model.CommandModel; import com.mogo.cloud.socket.IMogoCloudSocketMsgAckListener; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.MsgBody; @@ -12,8 +11,7 @@ import com.mogo.cloud.socket.SocketManager; /** * Socket常链接工具类 */ -public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, - IMogoCloudSocketOnMessageListener { +public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener { private static final String TAG = "SocketMsgUtils"; private static final String appId = "liveStream"; @@ -23,31 +21,33 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, private SocketManager mSocketManager; private Context mContext; + private IMogoCloudSocketOnMessageListener mMessageListener; - public static SocketMsgUtils getInstance(Context context) { + public static SocketMsgUtils getInstance(Context context, IMogoCloudSocketOnMessageListener listener) { if (sInstance == null) { synchronized (SocketMsgUtils.class) { if (sInstance == null) { - sInstance = new SocketMsgUtils(context.getApplicationContext()); + sInstance = new SocketMsgUtils(context.getApplicationContext(), listener); } } } return sInstance; } - private SocketMsgUtils(Context context) { + private SocketMsgUtils(Context context, IMogoCloudSocketOnMessageListener listener) { mContext = context; - initSocket(); + initSocket(listener); } /** * 初始化长连接 */ - private void initSocket() { + private void initSocket(IMogoCloudSocketOnMessageListener listener) { Log.i(TAG, "初始化长连接……"); mSocketManager = SocketManager.getInstance(); + mMessageListener = listener; mSocketManager.init(mContext); - mSocketManager.registerOnMessageListener(401017, this); + mSocketManager.registerOnMessageListener(401017, listener); } /** @@ -64,22 +64,11 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, */ public void release() { mSocketManager.release(); - mSocketManager.unregisterOnMessageListener(401017, this); + mSocketManager.unregisterOnMessageListener(401017, mMessageListener); } @Override public void onAck(long msgId) { Log.i(TAG, "msgId=" + msgId); - - } - - @Override - public Class target() { - return CommandModel.class; - } - - @Override - public void onMsgReceived(CommandModel obj) { - Log.i(TAG, "onMsgReceived: obj=" + obj); } } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java index e22053d..b5075ca 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/utils/LiveStreamUtils.java @@ -4,27 +4,25 @@ import android.content.Context; import android.os.Handler; import android.util.Log; -import com.mogo.cloud.live.listener.BizMessageListener; import com.mogo.cloud.live.listener.ILiveStatusListener; import com.mogo.cloud.live.manager.CameraFrameManager; import com.mogo.cloud.live.manager.LiveStreamManagerImpl; +import com.mogo.cloud.live.model.CommandModel; import com.mogo.cloud.live.server.PushService; -import com.mogo.cloud.live.socket.IotMessageType; import com.mogo.cloud.live.socket.SocketMsgUtils; import com.mogo.cloud.live.socket.SocketRequestUtils; +import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.MsgBody; -import org.json.JSONObject; -import static com.mogo.cloud.live.socket.IotMessageType.MSG_LIVE_PUSH_STATUS; - - -public class LiveStreamUtils implements BizMessageListener { +public class LiveStreamUtils implements IMogoCloudSocketOnMessageListener { private static final String TAG = "LiveStreamUtils"; private static final int POLL_TIME = 30 * 1000; // 循环上报摄像头可直播状态间隔时间 private static final int PUSH_CAM_TIME = 10 * 60 * 1000; + // 开始 private static final int PUSH_START = 0; + // 结束 private static final int PUSH_STOP = 1; private static final String C1 = "C_1"; //前置摄像头 private static final String C2 = "C_2"; //后置摄像头 @@ -37,6 +35,7 @@ public class LiveStreamUtils implements BizMessageListener { private ILiveStatusListener mLiveStatusCallback; private Context mContext; private Handler mHandler; + private SocketMsgUtils mSocketMsgUtils; public static LiveStreamUtils getInstance(Context context) { if (sInstance == null) { @@ -56,13 +55,12 @@ public class LiveStreamUtils implements BizMessageListener { initPoll(); } - /** * 初始化 */ private void init() { // 初始化Socket长连接通道 - SocketMsgUtils.getInstance(mContext); + mSocketMsgUtils = SocketMsgUtils.getInstance(mContext, this); } /** @@ -102,28 +100,16 @@ public class LiveStreamUtils implements BizMessageListener { msgBody.msgType(196614); msgBody.content(SocketRequestUtils.buildDeviceData(cam1Status, cam2Status)); - SocketMsgUtils.getInstance(mContext).uploadCamInfo(msgBody); - } - - @Override - public void onMessageReceived(IotMessageType type, String content) { - if (type == MSG_LIVE_PUSH_STATUS) { - Log.d(TAG, content); - rtmpPushHandler(content); - } + mSocketMsgUtils.uploadCamInfo(msgBody); } /** * 接收到长连接指令 * - * @param str 指令数据 + * @param videoChannel 指令数据 */ - private void rtmpPushHandler(String str) { + private void rtmpPushHandler(int status, String videoChannel) { try { - JSONObject content = new JSONObject(str); - int status = content.optInt("status"); - String videoChannel = content.optString("videoChannel"); - // 前置摄像头 if (C1.equals(videoChannel)) { // 停止直播 @@ -197,9 +183,20 @@ public class LiveStreamUtils implements BizMessageListener { try { sCam1LiveStatus = 0; sCam2LiveStatus = 0; - SocketMsgUtils.getInstance(mContext).release(); + mSocketMsgUtils.release(); } catch (Exception e) { e.printStackTrace(); } } + + @Override + public Class target() { + return CommandModel.class; + } + + @Override + public void onMsgReceived(CommandModel obj) { + Log.i(TAG, "onMsgReceived: obj=" + obj); + rtmpPushHandler(obj.getType(), obj.getVideoChannel()); + } } diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index eca1d93..f14bd88 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -99,7 +99,7 @@ public class MoGoAiCloudClient { // 变量赋值 if (mAiCloudClientConfig != null) { - mAiCloudClientConfig.setSn(result.sn); + mAiCloudClientConfig.setSn("F803EB2046PZD00149"); mAiCloudClientConfig.setToken(result.token); }