diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 1f8e3ef..5674e0c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -26,6 +26,7 @@ diff --git a/app/build.gradle b/app/build.gradle index 6c34267..c33760b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,6 +52,7 @@ dependencies { implementation project(":modules:mogo-tanlu") implementation project(":modules:mogo-realtime") implementation project(":foudations:mogo-live") + implementation project(":modules:mogo-trafficlive") } annotationProcessor 'com.elegant.spi:compiler:1.0.3' //编译时库 diff --git a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java index 02acde9..758f86e 100644 --- a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java @@ -9,12 +9,11 @@ import android.widget.ToggleButton; import androidx.appcompat.app.AppCompatActivity; -import com.mogo.cloud.live.listener.ILiveProgressListener; -import com.mogo.cloud.live.manager.MoGoLiveManager; -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack; +import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive; -public class LivePlayActivity extends AppCompatActivity { +public class LivePlayActivity extends AppCompatActivity implements ITrafficLiveCallBack { private String TAG = "LiveActivity"; private SurfaceView surfaceView; @@ -35,65 +34,32 @@ public class LivePlayActivity extends AppCompatActivity { Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); if (isChecked) { String roomId = etLookRoomId.getText().toString().trim(); - MoGoLiveManager.getInstance().init(this.getApplication(), null); - MoGoLiveManager.getInstance().loginRoom(MoGoAiCloudClientConfig.getInstance().getSn(), roomId); - MoGoLiveManager.getInstance().setLiveProgressListener(listener); + MoGoAiCloudTrafficLive.viewVehicleHeadLive(this.getApplication(), roomId, surfaceView, this); } else { - MoGoLiveManager.getInstance().stopLive(); + MoGoAiCloudTrafficLive.stopLive(); } }); } - private ILiveProgressListener listener = new ILiveProgressListener() { - - @Override - public void onConnecting() { - - } - - @Override - public void onConnected(String roomId) { - Log.i(TAG, "onConnected:" + roomId); - isLoginSuccess = true; - toggleLive(true); - } - - @Override - public void onDisConnect() { - Log.i(TAG, "onDisConnect:"); - isLoginSuccess = false; - toggleLive(false); - } - - @Override - public void onDebugError(int errorCode, String funcName, String errorInfo) { - - } - - @Override - public void onRoomStreamUpdate(String streamId, boolean isLive) { - Log.i(TAG, "onRoomStreamUpdate:" + streamId); - if (streamId != null && isLive) { - Toast.makeText(LivePlayActivity.this, "主播开始直播了", Toast.LENGTH_SHORT).show(); - mStreamId = streamId; - } else { - Toast.makeText(LivePlayActivity.this, "主播已离线", Toast.LENGTH_SHORT).show(); - } - } - }; - - private void toggleLive(boolean isChecked) { - if (isChecked) { - mStreamId = MoGoLiveManager.getInstance().startLive(surfaceView); - } else { - MoGoLiveManager.getInstance().stopLive(); - } - Log.i(TAG, "toggleLive status : " + isChecked + " , mStreamId : " + mStreamId); - } - @Override protected void onDestroy() { super.onDestroy(); - MoGoLiveManager.getInstance().onDestroyLive(); + MoGoAiCloudTrafficLive.stopLive(); + MoGoAiCloudTrafficLive.destroyLive(); + } + + @Override + public void onLive() { + Log.d(TAG, "开始直播 onLive"); + } + + @Override + public void onDisConnect() { + Log.d(TAG, "失去连接 onDisConnect"); + } + + @Override + public void onError(String errorMsg) { + Log.d(TAG, "发生错误 onError msg: " + errorMsg); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_live_play.xml b/app/src/main/res/layout/activity_live_play.xml index 56cca6a..277ca9a 100644 --- a/app/src/main/res/layout/activity_live_play.xml +++ b/app/src/main/res/layout/activity_live_play.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入要查看的车机SN" - android:text="X1020210128F803EB2046PZD00149" + android:text="F803EB2046PZD00273" android:textColor="#FFFF" app:layout_constraintBottom_toTopOf="@+id/liveToggleBtn" app:layout_constraintEnd_toEndOf="parent" diff --git a/foudations/mogo-live/build.gradle b/foudations/mogo-live/build.gradle index 341b8be..cbacbcc 100644 --- a/foudations/mogo-live/build.gradle +++ b/foudations/mogo-live/build.gradle @@ -38,6 +38,8 @@ dependencies { api 'com.zhidao.libyuv:libyuv:1.0.1.0' implementation 'com.zhidao.ptech:connsvr-protoco:0.1.23' implementation 'com.google.protobuf:protobuf-java:3.5.1' + implementation rootProject.ext.dependencies.rxjava + implementation rootProject.ext.dependencies.rxandroid if (Boolean.valueOf(RELEASE)) { implementation "com.mogo.cloud:network:${MOGO_NETWORK_VERSION}" 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 fabae5e..2efed2f 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 @@ -367,7 +367,9 @@ public class MoGoLiveManager { * 退出房间 */ private void logOutRoom() { - mExpressEngine.logoutRoom(currentRoomId); + if (!TextUtils.isEmpty(currentRoomId)) { + mExpressEngine.logoutRoom(currentRoomId); + } mExpressEngine.enableCustomVideoCapture(false, customVideoCaptureConfig, ZegoPublishChannel.MAIN); mExpressEngine.setEventHandler(null); } @@ -401,7 +403,9 @@ public class MoGoLiveManager { * 停止直播 */ public void stopLive() { - mExpressEngine.stopPlayingStream(currentStreamId); + if (!TextUtils.isEmpty(currentRoomId)) { + mExpressEngine.stopPlayingStream(currentStreamId); + } stopPreview(); logOutRoom(); } 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 256613e..0d029cc 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 @@ -4,7 +4,6 @@ import android.app.Application; import com.google.gson.Gson; import com.mogo.cloud.live.constant.LiveConstant; -import com.mogo.cloud.live.listener.ILiveProgressListener; import com.mogo.cloud.live.listener.IRequestLiveListener; import com.mogo.cloud.live.model.BaseData; import com.mogo.cloud.live.model.LivePush; @@ -17,9 +16,12 @@ import com.mogo.utils.logger.Logger; import java.util.HashMap; import java.util.Map; -import rx.Observer; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + /** * 请求直播管理类 @@ -51,29 +53,34 @@ public class RequestLiveManager { String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn(); Map map = new HashMap<>(); map.put("sn", sn); - map.put("type", gson.toJson(livePush)); + map.put("data", gson.toJson(livePush)); liveApiServer.getVehicleHeadLive(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override - public void onCompleted() { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onError(Throwable e) { - if(requestLiveListener != null){ + public void onNext(@NonNull BaseData baseData) { + if (requestLiveListener != null) { + requestLiveListener.onSuccess(); + } + } + + @Override + public void onError(@NonNull Throwable e) { + if (requestLiveListener != null) { requestLiveListener.onError(e); } Logger.e(LiveConstant.TAG, "requestVehicleHeadLive exception : " + e); } @Override - public void onNext(BaseData baseData) { - if(requestLiveListener != null){ - requestLiveListener.onSuccess(); - } + public void onComplete() { + } }); } diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/network/LiveApiServer.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/network/LiveApiServer.java index 692d569..9dec358 100644 --- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/network/LiveApiServer.java +++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/network/LiveApiServer.java @@ -6,13 +6,13 @@ import com.mogo.cloud.live.model.StartCarAlarmInfo; import java.util.Map; +import io.reactivex.Observable; import okhttp3.RequestBody; import retrofit2.http.Body; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.Headers; import retrofit2.http.POST; -import rx.Observable; /** * 直播功能使用到的接口 diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficLiveCallBack.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficLiveCallBack.java index 3717174..d74716e 100644 --- a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficLiveCallBack.java +++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficLiveCallBack.java @@ -2,19 +2,19 @@ package com.mogo.cloud.trafficlive.api; public interface ITrafficLiveCallBack { - default void onStart(){ + default void onLiveStart() { } - default void onStop(){ + default void onLiveStop() { } - default void onConnecting(){ + default void onLiveConnecting() { } - default void onConnected(){ + default void onLiveConnected() { } @@ -24,5 +24,4 @@ public interface ITrafficLiveCallBack { void onError(String errorMsg); -// void onError(int errorCode, String errorMsg); } diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/MoGoAiCloudTrafficLive.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/MoGoAiCloudTrafficLive.java index 570dcf1..f5558df 100644 --- a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/MoGoAiCloudTrafficLive.java +++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/MoGoAiCloudTrafficLive.java @@ -1,6 +1,7 @@ package com.mogo.cloud.trafficlive.api; import android.app.Application; +import android.view.SurfaceView; import com.mogo.cloud.trafficlive.core.TrafficLiveManager; import com.mogo.utils.logger.Logger; @@ -12,9 +13,9 @@ public class MoGoAiCloudTrafficLive { /** * 查看前方车辆直播 */ - public static void viewVehicleHeadLive(Application application, String liveSn, ITrafficLiveCallBack callBack) { + public static void viewVehicleHeadLive(Application application, String liveSn, SurfaceView surfaceView, ITrafficLiveCallBack callBack) { try { - TrafficLiveManager.getInstance().viewVehicleHeadLive(application, liveSn, callBack); + TrafficLiveManager.getInstance().viewVehicleHeadLive(application, liveSn, surfaceView, callBack); } catch (Exception e) { Logger.e(TAG, " viewVehicleHeadLive error : " + e); e.printStackTrace(); @@ -38,7 +39,7 @@ public class MoGoAiCloudTrafficLive { /** * 关闭直播组件 */ - public static void destroyLive(){ + public static void destroyLive() { TrafficLiveManager.getInstance().destroyLive(); } diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveManager.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveManager.java index 9acd8cf..e392000 100644 --- a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveManager.java +++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/core/TrafficLiveManager.java @@ -17,13 +17,14 @@ import static com.mogo.cloud.trafficlive.constant.TrafficLiveConstant.TAG; public class TrafficLiveManager implements ILiveProgressListener { private static volatile TrafficLiveManager mInstance; - private RequestLiveManager requestLiveManager; + private final RequestLiveManager requestLiveManager; private ITrafficLiveCallBack callBack; private SurfaceView surfaceView; private String mStreamId; private boolean isLoginSuccess = false; private TrafficLiveManager() { + requestLiveManager = RequestLiveManager.getInstance(); } public static TrafficLiveManager getInstance() { @@ -52,17 +53,13 @@ public class TrafficLiveManager implements ILiveProgressListener { throw new Exception("liveSn can not be null"); } - if (!isLoginSuccess) { - callBack.onError("暂未进房,请勿重复请求"); - return; - } if (MoGoLiveManager.getInstance().isPlaying()) { - callBack.onError("正在直播中,请勿重复请求"); + trafficLiveCallBack.onError("正在直播中,请勿重复请求"); return; } - this.surfaceView = surfaceView; this.callBack = trafficLiveCallBack; + this.surfaceView = surfaceView; requestLiveManager.requestVehicleHeadLive(application, liveSn, new IRequestLiveListener() { @Override public void onSuccess() { @@ -98,23 +95,23 @@ public class TrafficLiveManager implements ILiveProgressListener { @Override public void onStart() { - callBack.onStart(); + callBack.onLiveStart(); } @Override public void onStop() { - callBack.onStop(); + callBack.onLiveStop(); } @Override public void onConnecting() { - callBack.onConnecting(); + callBack.onLiveConnecting(); } @Override public void onConnected(String roomId) { isLoginSuccess = true; - callBack.onConnected(); + callBack.onLiveConnected(); } @Override @@ -132,7 +129,7 @@ public class TrafficLiveManager implements ILiveProgressListener { callBack.onLive(); } else { Logger.i(TAG, "主播已离线"); - callBack.onStop(); //todo 验证 onStop() 与 onRoomStreamUpdate() 回调时机 前后顺序 + callBack.onLiveStop(); //todo 验证 onStop() 与 onRoomStreamUpdate() 回调时机 前后顺序 } }