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 f5d8fce..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 3431fa2..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
@@ -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();
}
@@ -459,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/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..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
@@ -11,7 +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";
@@ -21,30 +21,33 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoClou
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(401016, this);
+ mSocketManager.registerOnMessageListener(401017, listener);
}
/**
@@ -61,21 +64,11 @@ public class SocketMsgUtils implements IMogoCloudSocketMsgAckListener, IMogoClou
*/
public void release() {
mSocketManager.release();
+ mSocketManager.unregisterOnMessageListener(401017, mMessageListener);
}
@Override
public void onAck(long msgId) {
Log.i(TAG, "msgId=" + msgId);
-
- }
-
- @Override
- public Class target() {
- return Object.class;
- }
-
- @Override
- public void onMsgReceived(Object 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..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 * 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);
}