diff --git a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java index bacfa17..a2e3483 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java @@ -20,7 +20,7 @@ import com.mogo.cloud.wifi.WifiStateManager; public class LivePlayActivity extends AppCompatActivity implements ITrafficCarLiveCallBack, IWifiStateListener { - private String TAG = "LiveActivity"; + private String TAG = "LivePlayActivity"; private TextView tvWifiState; private SurfaceView surfaceView0; @@ -206,9 +206,19 @@ public class LivePlayActivity extends AppCompatActivity implements ITrafficCarLi Log.w(TAG, "失去连接 onDisConnect"); } + @Override + public void onPlaying() { + Log.i(TAG, "拉流状态:拉流成功,播放中 …………"); + } + + @Override + public void onPlaRequesting() { + Log.i(TAG, "拉流状态:拉流还没成功,努力加载中 …………"); + } + @Override public void onError(String errorMsg) { - Log.e(TAG, "发生错误 onError msg: " + errorMsg); + Log.d(TAG, "拉流状态:发生错误 onError msg: " + errorMsg); } @Override diff --git a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java index fde9dd5..b1c8355 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java @@ -5,7 +5,7 @@ import android.os.Bundle; import android.util.Log; import android.view.View; -import com.mogo.cloud.live.listener.ILiveStatusListener; +import com.mogo.cloud.live.listener.ILivePushStatusListener; import com.mogo.cloud.live.manager.LiveStreamManagerImpl; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack; @@ -34,7 +34,7 @@ public class LivePlayAndPushActivity extends BaseLiveActivity MoGoAiCloudClientConfig.getInstance().getSn(),true); // 设置状态回调 - liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { + liveStreamManager.setLivePushStatusChangeCallback(new ILivePushStatusListener() { @Override public void onChange(int status) { tvLiveStatus.post(new Runnable() { @@ -135,9 +135,19 @@ public class LivePlayAndPushActivity extends BaseLiveActivity Log.d(TAG, "失去连接 onDisConnect"); } + @Override + public void onPlaying() { + Log.i(TAG, "拉流状态:拉流成功,播放中 …………"); + } + + @Override + public void onPlaRequesting() { + Log.i(TAG, "拉流状态:拉流还没成功,努力加载中 …………"); + } + @Override public void onError(String errorMsg) { - Log.d(TAG, "发生错误 onError msg: " + errorMsg); + Log.d(TAG, "拉流状态:发生错误 onError msg: " + errorMsg); } @Override diff --git a/app/src/main/java/com/mogo/cloud/LivePlayOneActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayOneActivity.java index 5ef4fec..b8b7a3f 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayOneActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayOneActivity.java @@ -24,7 +24,7 @@ import com.mogo.cloud.wifi.WifiStateManager; * @author mogoauto */ public class LivePlayOneActivity extends AppCompatActivity implements ITrafficCarLiveCallBack, IWifiStateListener { - private String TAG = "LiveActivity"; + private String TAG = "LivePlayOneActivity"; private TextView tvWifiState; private SurfaceView surfaceView; @@ -84,9 +84,19 @@ public class LivePlayOneActivity extends AppCompatActivity implements ITrafficCa Log.w(TAG, "失去连接 onDisConnect"); } + @Override + public void onPlaying() { + Log.i(TAG, "拉流状态:拉流成功,播放中 …………"); + } + + @Override + public void onPlaRequesting() { + Log.i(TAG, "拉流状态:拉流还没成功,努力加载中 …………"); + } + @Override public void onError(String errorMsg) { - Log.e(TAG, "发生错误 onError msg: " + errorMsg); + Log.d(TAG, "拉流状态:发生错误 onError msg: " + errorMsg); } @Override diff --git a/app/src/main/java/com/mogo/cloud/LivePushActivity.java b/app/src/main/java/com/mogo/cloud/LivePushActivity.java index 7ef2f6e..bdee14a 100644 --- a/app/src/main/java/com/mogo/cloud/LivePushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePushActivity.java @@ -3,7 +3,7 @@ package com.mogo.cloud; import android.os.Bundle; import android.util.Log; -import com.mogo.cloud.live.listener.ILiveStatusListener; +import com.mogo.cloud.live.listener.ILivePushStatusListener; import com.mogo.cloud.live.manager.ILiveStreamManager; import com.mogo.cloud.live.manager.LiveStreamManagerImpl; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; @@ -25,7 +25,7 @@ public class LivePushActivity extends BaseLiveActivity { MoGoAiCloudClientConfig.getInstance().getSn(), true); // 设置状态回调 - liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { + liveStreamManager.setLivePushStatusChangeCallback(new ILivePushStatusListener() { @Override public void onChange(int status) { tvLiveStatus.post(new Runnable() { diff --git a/app/src/main/java/com/mogo/cloud/MainActivity.java b/app/src/main/java/com/mogo/cloud/MainActivity.java index fdc45cd..6ff63fa 100644 --- a/app/src/main/java/com/mogo/cloud/MainActivity.java +++ b/app/src/main/java/com/mogo/cloud/MainActivity.java @@ -200,9 +200,19 @@ public class MainActivity extends AppCompatActivity { Log.e(TAG, "onDisConnect"); } + @Override + public void onPlaying() { + Log.i(TAG, "拉流状态:拉流成功,播放中 …………"); + } + + @Override + public void onPlaRequesting() { + Log.i(TAG, "拉流状态:拉流还没成功,努力加载中 …………"); + } + @Override public void onError(String errorMsg) { - Log.e(TAG, "errorMsg"); + Log.d(TAG, "拉流状态:发生错误 onError msg: " + errorMsg); } }); }); diff --git a/app/src/main/res/layout/activity_live_play_on.xml b/app/src/main/res/layout/activity_live_play_on.xml index 6b8f3bf..bcd466e 100644 --- a/app/src/main/res/layout/activity_live_play_on.xml +++ b/app/src/main/res/layout/activity_live_play_on.xml @@ -26,7 +26,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入要查看的车机SN" - android:text="F803EB2046PZD00190" + android:text="F803EB2046PZD00164" android:textColor="#850808" android:textSize="16sp" app:layout_constraintBottom_toTopOf="@+id/liveToggleBtn" diff --git a/build.gradle b/build.gradle index a2d6f1b..a1b9707 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply from: "config.gradle" buildscript { ext.kotlin_version = "1.4.31" repositories { - + maven { url 'https://storage.zego.im/maven' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } @@ -31,6 +31,7 @@ buildscript { allprojects { repositories { + maven { url 'https://storage.zego.im/maven' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } diff --git a/config.gradle b/config.gradle index 5168e32..b583122 100644 --- a/config.gradle +++ b/config.gradle @@ -59,7 +59,7 @@ ext { videoprocessor : "com.zhidao.video:video-processor:1.0.2.1", // 直播SDK - live_sdk_zego : "im.zego:express-video:2.2.0", + live_sdk_zego : "im.zego:express-video:2.19.0", adasapi : "com.zhidao.autopilot.support:adas:1.0.6.6", adasconfigapi : "com.zhidao.adasconfig:adasconfig:1.1.5.2", diff --git a/foudations/mogo-live/build.gradle b/foudations/mogo-live/build.gradle index d657129..8322d9f 100644 --- a/foudations/mogo-live/build.gradle +++ b/foudations/mogo-live/build.gradle @@ -42,8 +42,8 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation rootProject.ext.dependencies.androidxappcompat -// implementation rootProject.ext.dependencies.live_sdk_zego - implementation files('libs/ZegoExpressEngine.jar') + implementation rootProject.ext.dependencies.live_sdk_zego +// implementation files('libs/ZegoExpressEngine.jar') api 'com.zhidao.libyuv:libyuv:1.0.1.0' implementation 'com.zhidao.ptech:connsvr-protoco:0.1.23' diff --git a/foudations/mogo-live/libs/ZegoExpressEngine.jar b/foudations/mogo-live/libs/ZegoExpressEngine.jar deleted file mode 100644 index 09ecf6d..0000000 Binary files a/foudations/mogo-live/libs/ZegoExpressEngine.jar and /dev/null differ diff --git a/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so b/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so deleted file mode 100755 index bb38a8a..0000000 Binary files a/foudations/mogo-live/libs/arm64-v8a/libZegoExpressEngine.so and /dev/null differ diff --git a/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so b/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so deleted file mode 100755 index afa7fdc..0000000 Binary files a/foudations/mogo-live/libs/armeabi-v7a/libZegoExpressEngine.so and /dev/null differ diff --git a/foudations/mogo-live/libs/x86/libZegoExpressEngine.so b/foudations/mogo-live/libs/x86/libZegoExpressEngine.so deleted file mode 100755 index 12cf761..0000000 Binary files a/foudations/mogo-live/libs/x86/libZegoExpressEngine.so and /dev/null differ diff --git a/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so b/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so deleted file mode 100755 index 166f1e1..0000000 Binary files a/foudations/mogo-live/libs/x86_64/libZegoExpressEngine.so and /dev/null differ diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePullStateListener.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePullStateListener.java new file mode 100644 index 0000000..99f1b9e --- /dev/null +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePullStateListener.java @@ -0,0 +1,26 @@ +package com.mogo.cloud.live.listener; + +import im.zego.zegoexpress.constants.ZegoPlayerState; + +/** + * 直播拉流状态监听 + */ +public interface ILivePullStateListener { + /** + * 第一帧渲染 + */ + void onVideoFirstFrame(); + + /** + * 拉流播放状态 + * + * @param statusCode 0-没播放,1-请求中,2-播放中 + * @see ZegoPlayerState + */ + void onPlayerStateUpdate(int statusCode); + + /** + * 设备错误 + */ + void onDeviceError(int errorCode); +} diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILiveStatusListener.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePushStatusListener.java similarity index 51% rename from foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILiveStatusListener.java rename to foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePushStatusListener.java index 26d5fba..11bb5ab 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILiveStatusListener.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/ILivePushStatusListener.java @@ -1,8 +1,8 @@ package com.mogo.cloud.live.listener; /** - * 直播状态回调用 + * 直播推流状态回调用 */ -public interface ILiveStatusListener { +public interface ILivePushStatusListener { void onChange(int status); } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IMediaPlayerStateListener.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IMediaPlayerStateListener.java deleted file mode 100644 index 41e35d8..0000000 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IMediaPlayerStateListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.cloud.live.listener; - -public interface IMediaPlayerStateListener { - void onVideoFirstFrame(); - - /** - * 远程设备异常 - */ - void remoteDeviceError(); - - /** - * 拉流出现错误 - * @param errorCode - */ - void onPullStreamError(int errorCode); - - /** - * 设备错误 - */ - void onDeviceError(int errorCode); -} diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/ILiveStreamManager.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/ILiveStreamManager.java index 94cac83..513bd74 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/ILiveStreamManager.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/ILiveStreamManager.java @@ -1,7 +1,7 @@ package com.mogo.cloud.live.manager; -import com.mogo.cloud.live.listener.ILiveStatusListener; +import com.mogo.cloud.live.listener.ILivePushStatusListener; public interface ILiveStreamManager { /** @@ -38,10 +38,10 @@ public interface ILiveStreamManager { void notifyYUVData(byte[] data, int width, int height, int type); /** - * 直播状态改变时回调 + * 直播推流状态改变时回调 * @param changeCallback live status change callback */ - void setLiveStatusChangeCallback(ILiveStatusListener changeCallback); + void setLivePushStatusChangeCallback(ILivePushStatusListener changeCallback); /** * 释放资源 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 b2f126d..28db6a2 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 @@ -7,7 +7,7 @@ import android.os.SystemClock; import android.util.Log; import com.mogo.cloud.live.listener.ILiveRoomPersonListener; -import com.mogo.cloud.live.listener.ILiveStatusListener; +import com.mogo.cloud.live.listener.ILivePushStatusListener; import com.mogo.cloud.live.model.CommandModel; import com.mogo.cloud.live.server.PushService; import com.mogo.cloud.live.socket.SocketMsgUtils; @@ -163,9 +163,9 @@ public class LiveStreamManagerImpl implements ILiveStreamManager, ILiveRoomPerso } @Override - public void setLiveStatusChangeCallback(ILiveStatusListener liveStatusListener) { + public void setLivePushStatusChangeCallback(ILivePushStatusListener liveStatusListener) { if (mMoGoLiveManager != null) { - mMoGoLiveManager.setLiveStatusListener(liveStatusListener); + mMoGoLiveManager.addLivePushStatusListener(liveStatusListener); } } 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 5a5337d..7c8a48b 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 @@ -1,6 +1,5 @@ package com.mogo.cloud.live.manager; -import static im.zego.zegoexpress.constants.ZegoRemoteDeviceState.OPEN; import static im.zego.zegoexpress.constants.ZegoRoomState.DISCONNECTED; import android.app.Application; @@ -12,9 +11,9 @@ import android.view.TextureView; import com.mogo.cloud.live.listener.ILiveCurrentRoomStatusListener; import com.mogo.cloud.live.listener.ILiveMultiRoomStatusListener; import com.mogo.cloud.live.listener.ILiveProgressListener; +import com.mogo.cloud.live.listener.ILivePullStateListener; +import com.mogo.cloud.live.listener.ILivePushStatusListener; import com.mogo.cloud.live.listener.ILiveRoomPersonListener; -import com.mogo.cloud.live.listener.ILiveStatusListener; -import com.mogo.cloud.live.listener.IMediaPlayerStateListener; import com.mogo.cloud.live.model.LiveStatusModel; import com.mogo.cloud.live.server.PushService; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; @@ -29,13 +28,14 @@ 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.ZegoPlayerMediaEvent; 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.ZegoStreamEvent; import im.zego.zegoexpress.constants.ZegoUpdateType; import im.zego.zegoexpress.constants.ZegoVideoBufferType; import im.zego.zegoexpress.constants.ZegoVideoCodecID; @@ -46,6 +46,7 @@ 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.ZegoPlayStreamQuality; import im.zego.zegoexpress.entity.ZegoPlayerConfig; import im.zego.zegoexpress.entity.ZegoPublisherConfig; import im.zego.zegoexpress.entity.ZegoRoomConfig; @@ -114,9 +115,13 @@ public class MoGoLiveManager { */ private static final List mRoomPersonListener = new ArrayList<>(); /** - * 直播状态回调 + * 直播推流状态回调 */ - private static final List mLiveStatusListener = new ArrayList<>(); + private static final List mLiveStatusListener = new ArrayList<>(); + /** + * 直播拉流观看状态回调 + */ + private static final List mLivePullStateListener = new ArrayList<>(); /** * 直播数据 */ @@ -125,7 +130,6 @@ public class MoGoLiveManager { * 房间配置 */ private final ZegoRoomConfig zeGoRoomConfig; - private IMediaPlayerStateListener mMediaPlayerStateListener; private ZegoUser zegoUserCurrent; private static final class Holder { @@ -259,7 +263,10 @@ public class MoGoLiveManager { } } // 这里回调的是登录的他人房间的状态 - if (mLiveStatusModel.getMultiRoomId().equals(roomID)) { + else if (mLiveStatusModel.getMultiRoomId().equals(roomID)) { + // 1. 当收到该回调通知且 state 为 PLAYING 时,表示拉流成功 + // 2. 当收到该回调通知且 state 为 PLAY_REQUESTING 时,表示可能是正在拉流或者由于网络中断等原因导致 SDK 正在重试拉流 + // 3. 当收到该回调通知且 state 为 NO_PLAY 时,表示拉流停止 Log.i(TAG, "这里回调的是登录的他人房间的状态 onRoomStateUpdate multiRoomId : " + roomID + " state:" + state + " errorCode:" + errorCode + @@ -287,14 +294,14 @@ public class MoGoLiveManager { @Override public void onRoomOnlineUserCountUpdate(String roomID, int count) { super.onRoomOnlineUserCountUpdate(roomID, count); - // 这里只处理当前设备登录的房间中的用户总数 + // 这里只处理「当前设备-观看者」登录的房间中的用户总数 if (mLiveStatusModel.getCurrentRoomId().equals(roomID)) { // 更新真实的在线人数 mLiveStatusModel.setOnlineNumber(count); if (count > 2) { PushService.startService(mApplication, PushService.ACTION_START_RTMP_PUSH); } - Log.i(TAG, "房间内当前在线用户数量回调 onRoomOnlineUserCountUpdate roomID : " + roomID + + Log.i(TAG, "「自己」房间内当前在线用户数量回调 onRoomOnlineUserCountUpdate roomID : " + roomID + " , online user number : " + mLiveStatusModel.getOnlineNumber()); for (ILiveRoomPersonListener iLiveRoomPersonListener : mRoomPersonListener) { if (iLiveRoomPersonListener != null) { @@ -302,6 +309,11 @@ public class MoGoLiveManager { } } } + // 这里只处理登录的「他人-被直播者」房间中的用户总数 + else if (mLiveStatusModel.getMultiRoomId().equals(roomID)) { + Log.i(TAG, "「他人」房间内当前在线用户数量回调 onRoomOnlineUserCountUpdate roomID : " + roomID + + " , online user number : " + count); + } } // 房间内其他用户增加或减少的通知回调 @@ -317,7 +329,7 @@ public class MoGoLiveManager { mLiveStatusModel.setOnlineNumber(mLiveStatusModel.getOnlineNumber() - userList.size()); } - Log.i(TAG, "房间内其他用户增加或减少的通知回调 onRoomUserUpdate roomId : " + roomID + + Log.i(TAG, "「自己」房间内其他用户增加或减少的通知回调 onRoomUserUpdate roomId : " + roomID + " , updateType : " + updateType.name() + " , online user number : " + mLiveStatusModel.getOnlineNumber()); for (ILiveRoomPersonListener iLiveRoomPersonListener : mRoomPersonListener) { @@ -326,6 +338,12 @@ public class MoGoLiveManager { } } } + // 这里查看的是别人的房间 + else if (mLiveStatusModel.getMultiStreamId().equals(roomID)) { + Log.i(TAG, "「他人」房间内其他用户增加或减少的通知回调 onRoomUserUpdate roomId : " + roomID + + " , updateType : " + updateType.name() + + " , online user number : " + mLiveStatusModel.getOnlineNumber()); + } } } @@ -339,6 +357,7 @@ public class MoGoLiveManager { // 判断不是非推流状态则为推流 mLiveStatusModel.setPushing(state != ZegoPublisherState.NO_PUBLISH); Log.i(TAG, "推流状态回调 onPublisherStateUpdate streamID : " + streamID + + " , isPlaying : " + mLiveStatusModel.isPlaying() + " , isPushing : " + mLiveStatusModel.isPushing() + " , state : " + state.name() + " , errorCode : " + errorCode + @@ -350,36 +369,91 @@ public class MoGoLiveManager { // && mLiveStatusModel.getOnlineNumber() <= 1) { // logoutCurrentRoom(); // } - for (ILiveStatusListener iLiveStatusListener : mLiveStatusListener) { - if (iLiveStatusListener != null) { - iLiveStatusListener.onChange(mLiveStatusModel.isPushing() ? 0 : 1); + for (ILivePushStatusListener iLivePushStatusListener : mLiveStatusListener) { + if (iLivePushStatusListener != null) { + iLivePushStatusListener.onChange(mLiveStatusModel.isPushing() ? 0 : 1); } } } + // 这里查看的是别人的房间 + else if (mLiveStatusModel.getMultiStreamId().equals(streamID)) { + + } } // 拉流状态变更回调 @Override public void onPlayerStateUpdate(String streamID, ZegoPlayerState state, int errorCode, JSONObject extendedData) { super.onPlayerStateUpdate(streamID, state, errorCode, extendedData); - // 这里查看的是别的房间 + // 这里查看的是别人的房间 if (mLiveStatusModel.getMultiStreamId().equals(streamID)) { // 如果不是非播放状态则判定为直播状态 - mLiveStatusModel.setPlaying(state != ZegoPlayerState.NO_PLAY); - if (mMediaPlayerStateListener != null && errorCode != 0) { - mMediaPlayerStateListener.onPullStreamError(errorCode); + mLiveStatusModel.setPlaying(state == ZegoPlayerState.PLAYING); + // 同步更新状态 + for (ILivePullStateListener iLivePullStateListener : mLivePullStateListener) { + if (iLivePullStateListener != null) { + iLivePullStateListener.onPlayerStateUpdate(state.value()); + } } - Log.i(TAG, " 拉流状态变更回调 onPlayerStateUpdate streamId : " + streamID + + Log.i(TAG, "拉流状态变更回调 onPlayerStateUpdate streamId : " + streamID + " , isPlaying : " + mLiveStatusModel.isPlaying() + + " , isPushing : " + mLiveStatusModel.isPushing() + " , state : " + state.name() + " , errorCode : " + errorCode + " , extendData : " + extendedData.toString()); - // 判断如果处于非播放和非推流状态则进行登出操作,并释放引擎 - if (!mLiveStatusModel.isPlaying() - && !mLiveStatusModel.isPushing() - && mLiveStatusModel.getOnlineNumber() <= 1) { - logoutCurrentRoom(); +// // 判断如果处于非播放和非推流状态则进行登出操作,并释放引擎 +// if (!mLiveStatusModel.isPlaying() +// && !mLiveStatusModel.isPushing() +// && mLiveStatusModel.getOnlineNumber() <= 1) { +// logoutCurrentRoom(); +// } + } + } + + @Override + public void onPlayerMediaEvent(String streamID, ZegoPlayerMediaEvent zegoPlayerMediaEvent) { + super.onPlayerMediaEvent(streamID, zegoPlayerMediaEvent); + Log.i(TAG, "拉流媒体事件回调 onPlayerMediaEvent streamId : " + streamID + + " , isPlaying : " + mLiveStatusModel.isPlaying() + + " , isPushing : " + mLiveStatusModel.isPushing() + + " , zegoPlayerMediaEvent : " + zegoPlayerMediaEvent.name()); + } + + @Override + public void onPlayerStreamEvent(ZegoStreamEvent eventID, String streamID, String extraInfo) { + super.onPlayerStreamEvent(eventID, streamID, extraInfo); + Log.i(TAG, "拉流事件回调 onPlayerStreamEvent streamId : " + streamID + + " , isPlaying : " + mLiveStatusModel.isPlaying() + + " , isPushing : " + mLiveStatusModel.isPushing() + + " , extraInfo : " + extraInfo); + } + + @Override + public void onPlayerQualityUpdate(String streamID, ZegoPlayStreamQuality quality) { + super.onPlayerQualityUpdate(streamID, quality); + Log.i(TAG, "拉流事件回调 onPlayerStreamEvent streamId : " + streamID + + " , isPlaying : " + mLiveStatusModel.isPlaying() + + " , isPushing : " + mLiveStatusModel.isPushing() + + " , quality.videoRecvFPS : " + quality.videoRecvFPS); + + if (quality.videoRecvFPS <= 0) { + // 帧率为小于0即无数据,展示loading + mLiveStatusModel.setPlaying(false); + // 同步更新状态 + for (ILivePullStateListener iLivePullStateListener : mLivePullStateListener) { + if (iLivePullStateListener != null) { + iLivePullStateListener.onPlayerStateUpdate(1); + } + } + } else { + // 帧率为大于0即有数据,进行播放 + mLiveStatusModel.setPlaying(true); + // 同步更新状态 + for (ILivePullStateListener iLivePullStateListener : mLivePullStateListener) { + if (iLivePullStateListener != null) { + iLivePullStateListener.onPlayerStateUpdate(2); + } } } } @@ -400,18 +474,10 @@ public class MoGoLiveManager { public void onPlayerRecvVideoFirstFrame(String streamID) { super.onPlayerRecvVideoFirstFrame(streamID); Log.d(TAG, "onPlayerRecvVideoFirstFrame"); - if (mMediaPlayerStateListener != null) { - mMediaPlayerStateListener.onVideoFirstFrame(); - } - } - - @Override - public void onRemoteCameraStateUpdate(String streamID, ZegoRemoteDeviceState state) { - super.onRemoteCameraStateUpdate(streamID, state); - if (state != OPEN) { - Log.e(TAG, "onRemoteCameraStateUpdate:" + state); - if (mMediaPlayerStateListener != null) { - mMediaPlayerStateListener.remoteDeviceError(); + // 同步更新状态 + for (ILivePullStateListener iLivePullStateListener : mLivePullStateListener) { + if (iLivePullStateListener != null) { + iLivePullStateListener.onVideoFirstFrame(); } } } @@ -420,8 +486,11 @@ public class MoGoLiveManager { public void onDeviceError(int errorCode, String deviceName) { super.onDeviceError(errorCode, deviceName); Log.e(TAG, "onDeviceError:" + errorCode); - if (mMediaPlayerStateListener != null && errorCode != 0) { - mMediaPlayerStateListener.onDeviceError(errorCode); + // 同步更新状态 + for (ILivePullStateListener iLivePullStateListener : mLivePullStateListener) { + if (iLivePullStateListener != null) { + iLivePullStateListener.onDeviceError(errorCode); + } } } }; @@ -472,14 +541,23 @@ public class MoGoLiveManager { } /** - * 直播状态回调 + * 直播推送状态回调 * * @param liveStatusListener 回调监听 */ - public static void setLiveStatusListener(ILiveStatusListener liveStatusListener) { + public static void addLivePushStatusListener(ILivePushStatusListener liveStatusListener) { mLiveStatusListener.add(liveStatusListener); } + /** + * 直播拉流播放状态回调 + * + * @param livePullStateListener 回调监听 + */ + public static void addLivePullStateListener(ILivePullStateListener livePullStateListener) { + mLivePullStateListener.add(livePullStateListener); + } + /** * 初始化自定义采集 */ @@ -698,10 +776,6 @@ public class MoGoLiveManager { mExpressEngine.stopPublishingStream(); } - public void setMediaPlayerStateListener(IMediaPlayerStateListener mediaPlayerStateListener) { - mMediaPlayerStateListener = mediaPlayerStateListener; - } - /** * 开始播放直播 * diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/RequestLiveManager.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/RequestLiveManager.java index 5105016..50557cb 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/RequestLiveManager.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/manager/RequestLiveManager.java @@ -76,9 +76,7 @@ public class RequestLiveManager { @Override public void onNext(@NonNull BaseData baseData) { - if (requestLiveListener != null) { - requestLiveListener.onSuccess(); - } + } @Override @@ -94,6 +92,10 @@ public class RequestLiveManager { } }); + + if (requestLiveListener != null) { + requestLiveListener.onSuccess(); + } } /** diff --git a/gradle.properties b/gradle.properties index f9fa4b1..ec19963 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,24 +36,24 @@ PASSWORD=xintai2018 RELEASE=true # AI CLOUD 云平台 # 工具类 -MOGO_UTILS_VERSION=1.4.6.6 +MOGO_UTILS_VERSION=1.4.6.7 # 网络请求 -MOGO_NETWORK_VERSION=1.4.6.6 +MOGO_NETWORK_VERSION=1.4.6.7 # 鉴权 -MOGO_PASSPORT_VERSION=1.4.6.6 +MOGO_PASSPORT_VERSION=1.4.6.7 # 常链接 -MOGO_SOCKET_VERSION=1.4.6.6 +MOGO_SOCKET_VERSION=1.4.6.7 # 数据采集 -MOGO_REALTIME_VERSION=1.4.6.6 +MOGO_REALTIME_VERSION=1.4.6.7 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.4.6.6 +MOGO_TANLU_VERSION=1.4.6.7 # 直播推流 -MOGO_LIVE_VERSION=1.4.6.6 +MOGO_LIVE_VERSION=1.4.6.7 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.4.6.6 +MOGO_TRAFFICLIVE_VERSION=1.4.6.7 # 定位服务 -MOGO_LOCATION_VERSION=1.4.6.6 +MOGO_LOCATION_VERSION=1.4.6.7 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.4.6.6 +MOGO_TELEMATIC_VERSION=1.4.6.7 # v2x -MOGO_V2X_VERSION=1.4.6.6 +MOGO_V2X_VERSION=1.4.6.7 diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficCarLiveCallBack.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficCarLiveCallBack.java index b1c827b..c659461 100644 --- a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficCarLiveCallBack.java +++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficCarLiveCallBack.java @@ -19,6 +19,22 @@ public interface ITrafficCarLiveCallBack { void onDisConnect(); + /** + * 连接失败,播放失败,都走这里,可以展示播失败信息 + * + * @param errorMsg + */ void onError(String errorMsg); + /** + * 拉流成功且处于播放中 + */ + void onPlaying(); + + /** + * 拉流重试中,还没成功,可以做Loading + */ + void onPlaRequesting(); + + } 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 9c6145f..db71a5d 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 @@ -1,5 +1,9 @@ package com.mogo.cloud.trafficlive.core; +import static com.mogo.cloud.live.constant.LiveConstant.LIVE_TYPE_CLOSE; +import static com.mogo.cloud.live.constant.LiveConstant.LIVE_TYPE_OPEN; +import static com.mogo.cloud.trafficlive.constant.TrafficLiveConstant.TAG; + import android.text.TextUtils; import android.util.Log; import android.view.SurfaceView; @@ -7,7 +11,7 @@ import android.view.TextureView; import com.mogo.cloud.live.listener.ILiveMultiRoomStatusListener; import com.mogo.cloud.live.listener.ILiveProgressListener; -import com.mogo.cloud.live.listener.IMediaPlayerStateListener; +import com.mogo.cloud.live.listener.ILivePullStateListener; import com.mogo.cloud.live.listener.IRequestLiveListener; import com.mogo.cloud.live.manager.MoGoLiveManager; import com.mogo.cloud.live.manager.MoGoLivePushConfig; @@ -16,10 +20,6 @@ import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack; import com.mogo.cloud.trafficlive.api.ITrafficIntersectionLiveCallBack; -import static com.mogo.cloud.live.constant.LiveConstant.LIVE_TYPE_CLOSE; -import static com.mogo.cloud.live.constant.LiveConstant.LIVE_TYPE_OPEN; -import static com.mogo.cloud.trafficlive.constant.TrafficLiveConstant.TAG; - public class TrafficLiveCurrentManager implements ILiveProgressListener, ILiveMultiRoomStatusListener { @@ -142,7 +142,7 @@ public class TrafficLiveCurrentManager mLivePushConfig.setDevicesId(sn); // 登录要查看的SN房间 MoGoLiveManager.getInstance().loginMultiRoom(liveSn); - MoGoLiveManager.getInstance().setMediaPlayerStateListener(mediaPlayerStateListener); + MoGoLiveManager.getInstance().addLivePullStateListener(mediaPlayerStateListener); // 直接 查看对应SN的直播 MoGoLiveManager.getInstance().startLive(surfaceView); if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) { @@ -165,7 +165,7 @@ public class TrafficLiveCurrentManager mLivePushConfig.setDevicesId(sn); // 登录要查看的SN房间 MoGoLiveManager.getInstance().loginMultiRoom(liveSn); - MoGoLiveManager.getInstance().setMediaPlayerStateListener(mediaPlayerStateListener); + MoGoLiveManager.getInstance().addLivePullStateListener(mediaPlayerStateListener); // 直接 查看对应SN的直播 MoGoLiveManager.getInstance().startLive(textureView); if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) { @@ -271,7 +271,8 @@ public class TrafficLiveCurrentManager trafficLiveCallBack.onDisConnect(); } } - private IMediaPlayerStateListener mediaPlayerStateListener = new IMediaPlayerStateListener() { + + private ILivePullStateListener mediaPlayerStateListener = new ILivePullStateListener() { @Override public void onVideoFirstFrame() { if (trafficLiveCallBack != null) { @@ -280,23 +281,30 @@ public class TrafficLiveCurrentManager } @Override - public void remoteDeviceError() { + public void onPlayerStateUpdate(int statusCode) { if (trafficLiveCallBack != null) { - trafficLiveCallBack.onError(""); + switch (statusCode) { + case 0: { + trafficLiveCallBack.onError("onPullStreamError:"); + break; + } + case 1: { + trafficLiveCallBack.onPlaRequesting(); + break; + } + case 2: { + trafficLiveCallBack.onPlaying(); + break; + } + } } } - @Override - public void onPullStreamError(int errorCode) { - if (trafficLiveCallBack != null) { - trafficLiveCallBack.onError("" + errorCode); - } - } @Override public void onDeviceError(int errorCode) { if (trafficLiveCallBack != null) { - trafficLiveCallBack.onError("" + errorCode); + trafficLiveCallBack.onError("onDeviceError:" + errorCode); } } };