diff --git a/.idea/dictionaries/zhongchao.xml b/.idea/dictionaries/zhongchao.xml
index 2685c01..8318e67 100644
--- a/.idea/dictionaries/zhongchao.xml
+++ b/.idea/dictionaries/zhongchao.xml
@@ -3,6 +3,7 @@
amap
coor
+ designative
mogo
diff --git a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java
index e744ef6..d85c818 100644
--- a/app/src/main/java/com/mogo/cloud/LivePlayActivity.java
+++ b/app/src/main/java/com/mogo/cloud/LivePlayActivity.java
@@ -10,14 +10,13 @@ import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
-
-import com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack;
+import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack;
import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive;
import com.mogo.cloud.wifi.IWifiStateListener;
import com.mogo.cloud.wifi.WifiStateManager;
-public class LivePlayActivity extends AppCompatActivity implements ITrafficLiveCallBack, IWifiStateListener {
+public class LivePlayActivity extends AppCompatActivity implements ITrafficCarLiveCallBack, IWifiStateListener {
private String TAG = "LiveActivity";
private SurfaceView surfaceView;
@@ -38,9 +37,10 @@ public class LivePlayActivity extends AppCompatActivity implements ITrafficLiveC
Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show();
if (isChecked) {
liveSn = etLookRoomId.getText().toString().trim();
- MoGoAiCloudTrafficLive.viewVehicleHeadLive(this.getApplication(), liveSn, surfaceView, this);
+ MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn, surfaceView, this);
+// MoGoAiCloudTrafficLive.viewFrontVehicleLive(39.968253, 116.410829, 0, surfaceView, this);
} else {
- MoGoAiCloudTrafficLive.stopLive(liveSn);
+ MoGoAiCloudTrafficLive.stopCarLive(liveSn);
}
});
WifiStateManager.getInstance().registerWifiStateListener(this);
@@ -49,7 +49,7 @@ public class LivePlayActivity extends AppCompatActivity implements ITrafficLiveC
@Override
protected void onDestroy() {
super.onDestroy();
- MoGoAiCloudTrafficLive.stopLive(liveSn);
+ MoGoAiCloudTrafficLive.stopCarLive(liveSn);
WifiStateManager.getInstance().unRegisterWifiStateListener(this);
}
diff --git a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java
index 314a4ef..d24c00e 100644
--- a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java
+++ b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java
@@ -7,18 +7,17 @@ import android.util.Log;
import com.mogo.cloud.live.listener.ILiveStatusListener;
import com.mogo.cloud.live.manager.LiveStreamManagerImpl;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
-import com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack;
+import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack;
import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive;
import com.mogo.cloud.utils.logger.Logger;
import com.mogo.cloud.wifi.IWifiStateListener;
-import com.mogo.cloud.wifi.WifiStateManager;
/**
* 推流和拉流页面
*/
public class LivePlayAndPushActivity extends BaseLiveActivity
- implements ITrafficLiveCallBack, IWifiStateListener {
+ implements ITrafficCarLiveCallBack, IWifiStateListener {
public static final String TAG = "LivePlayAndPushActivity";
private String liveSn;
@@ -90,10 +89,9 @@ public class LivePlayAndPushActivity extends BaseLiveActivity
public void togglePlay(boolean isPlay) {
if (isPlay) {
liveSn = etLookRoomId.getText().toString().trim();
- MoGoAiCloudTrafficLive.viewVehicleHeadLive(this.getApplication(),
- liveSn, surfacePlayView, this);
+ MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(liveSn, surfacePlayView, this);
} else {
- MoGoAiCloudTrafficLive.stopLive(liveSn);
+ MoGoAiCloudTrafficLive.stopCarLive(liveSn);
}
}
@@ -117,7 +115,7 @@ public class LivePlayAndPushActivity extends BaseLiveActivity
liveStreamManager.release();
}
- MoGoAiCloudTrafficLive.stopLive(liveSn);
+ MoGoAiCloudTrafficLive.stopCarLive(liveSn);
// WifiStateManager.getInstance().unRegisterWifiStateListener(this);
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index c3e69bd..a867d29 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -90,7 +90,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="直播SDK观看测试"
- android:visibility="gone" />
+ android:visibility="visible" />
\ No newline at end of file
diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IRequestLiveListener.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IRequestLiveListener.java
index 958699c..63be4a3 100644
--- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IRequestLiveListener.java
+++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/listener/IRequestLiveListener.java
@@ -2,7 +2,14 @@ package com.mogo.cloud.live.listener;
public interface IRequestLiveListener {
- void onSuccess();
+ default void onSuccess() {
+ }
+
+ default void onSuccess(String liveUrl) {
+ }
+
+ default void onSuccess(String liveSn, String liveUrl, double lat, double lon) {
+ }
void onError(Throwable e);
}
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 df34be9..75a126c 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
@@ -5,6 +5,7 @@ import com.mogo.cloud.live.constant.LiveConstant;
import com.mogo.cloud.live.listener.IRequestLiveListener;
import com.mogo.cloud.live.model.BaseData;
import com.mogo.cloud.live.model.LivePush;
+import com.mogo.cloud.live.model.LiveReceive;
import com.mogo.cloud.live.network.LiveApiServer;
import com.mogo.cloud.network.NetConstants;
import com.mogo.cloud.network.RetrofitFactory;
@@ -32,7 +33,7 @@ public class RequestLiveManager {
private final LiveApiServer liveApiServer;
private RequestLiveManager() {
- liveApiServer = RetrofitFactory.INSTANCE.getInstance(NetConstants.DEVA_HOST)
+ liveApiServer = RetrofitFactory.INSTANCE.getInstance(NetConstants.DEVA_HOST) //todo 涉及直播接口 没有对HttpDNS进行配置
.create(LiveApiServer.class);
}
@@ -50,18 +51,18 @@ public class RequestLiveManager {
/**
* 请求服务器查看指定车机开启或关闭直播
*
- * @param type
- * @param liveSn
- * @param requestLiveListener
+ * @param type 0:open 1:close
+ * @param liveSn 直播SN
+ * @param requestLiveListener {@link IRequestLiveListener}
*/
- public void requestVehicleHeadLive(String type, String liveSn, IRequestLiveListener requestLiveListener) {
+ public void requestDesignativeVehicleLive(String type, String liveSn, IRequestLiveListener requestLiveListener) {
Gson gson = new Gson();
LivePush livePush = new LivePush(liveSn, type, FRONT_CAMERA);
String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
Map map = new HashMap<>();
map.put("sn", sn);
map.put("data", gson.toJson(livePush));
- liveApiServer.getVehicleHeadLive(map)
+ liveApiServer.getDesignativeVehicleLive(map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@@ -82,7 +83,153 @@ public class RequestLiveManager {
if (requestLiveListener != null) {
requestLiveListener.onError(e);
}
- Logger.e(LiveConstant.TAG, "requestVehicleHeadLive exception : " + e);
+ Logger.e(LiveConstant.TAG, "requestDesignativeVehicleLive exception : " + e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 请求服务器查看前方车机开启直播
+ *
+ * @param lat 纬度
+ * @param lon 经度
+ * @param bearing 方向角
+ * @param requestLiveListener {@link IRequestLiveListener}
+ */
+ public void requestFrontVehicleLive(double lat, double lon, int bearing, IRequestLiveListener requestLiveListener) {
+ Gson gson = new Gson();
+ String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
+ LivePush livePush = new LivePush(sn, FRONT_CAMERA, lat, lon, bearing);
+ Map map = new HashMap<>();
+ map.put("sn", sn);
+ map.put("data", gson.toJson(livePush));
+ liveApiServer.getFrontVehicleLive(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseData baseData) {
+ if (requestLiveListener != null) {
+ LiveReceive liveReceive = baseData.result;
+ if (liveReceive != null && liveReceive.getLive() != null && liveReceive.getSn() != null) {
+ requestLiveListener.onSuccess(liveReceive.getSn(), liveReceive.getLive(),
+ liveReceive.getLat(), liveReceive.getLon());
+ } else {
+ Logger.e(LiveConstant.TAG, "requestFrontVehicleLive exception : live receive msg is wrong, please check param");
+ }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ if (requestLiveListener != null) {
+ requestLiveListener.onError(e);
+ }
+ Logger.e(LiveConstant.TAG, "requestFrontVehicleLive exception : " + e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 请求服务器查看前方路口直播
+ *
+ * @param lat 纬度
+ * @param lon 经度
+ * @param bearing 方向角
+ * @param requestLiveListener {@link IRequestLiveListener}
+ */
+ public void requestFrontIntersectionLive(double lat, double lon, int bearing, IRequestLiveListener requestLiveListener) {
+ Gson gson = new Gson();
+ String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
+ LivePush livePush = new LivePush(sn, lat, lon, bearing);
+ Map map = new HashMap<>();
+ map.put("sn", sn);
+ map.put("data", gson.toJson(livePush));
+ liveApiServer.getFrontIntersectionLive(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseData baseData) {
+ if (requestLiveListener != null) {
+ LiveReceive liveReceive = baseData.result;
+ if (liveReceive != null && liveReceive.getLive() != null) {
+ requestLiveListener.onSuccess(liveReceive.getLive());
+ } else {
+ Logger.e(LiveConstant.TAG, "requestFrontIntersectionLive exception : live receive msg is wrong, please connect tech");
+ }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ if (requestLiveListener != null) {
+ requestLiveListener.onError(e);
+ }
+ Logger.e(LiveConstant.TAG, "requestFrontIntersectionLive exception : " + e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ public void requestDesignativeIntersectionLive(int cameraId, double lat, double lon, IRequestLiveListener requestLiveListener) {
+ Gson gson = new Gson();
+ String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
+ LivePush livePush = new LivePush(cameraId, lat, lon);
+ Map map = new HashMap<>();
+ map.put("sn", sn);
+ map.put("data", gson.toJson(livePush));
+ liveApiServer.getDesignativeIntersectionLive(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseData baseData) {
+ if (requestLiveListener != null) {
+ LiveReceive liveReceive = baseData.result;
+ if (liveReceive != null && liveReceive.getLive() != null) {
+ requestLiveListener.onSuccess(liveReceive.getLive());
+ } else {
+ Logger.e(LiveConstant.TAG, "requestDesignativeIntersectionLive exception : live receive msg is wrong, please connect tech");
+ }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ if (requestLiveListener != null) {
+ requestLiveListener.onError(e);
+ }
+ Logger.e(LiveConstant.TAG, "requestDesignativeIntersectionLive exception : " + e);
}
@Override
diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/BaseData.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/BaseData.java
index 035b97b..0e89d6e 100644
--- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/BaseData.java
+++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/BaseData.java
@@ -4,10 +4,11 @@ import com.elegant.network.NetConstants;
import java.io.Serializable;
-public class BaseData implements Serializable, Cloneable {
+public class BaseData implements Serializable, Cloneable {
public int code = NetConstants.NO_DATA;
public String msg;
+ public T result;
public BaseData clone() {
BaseData obj = null;
@@ -18,4 +19,8 @@ public class BaseData implements Serializable, Cloneable {
}
return obj;
}
+
+ public T getT() {
+ return result;
+ }
}
diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LivePush.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LivePush.java
index 9a90c85..0765cd7 100644
--- a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LivePush.java
+++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LivePush.java
@@ -5,9 +5,19 @@ package com.mogo.cloud.live.model;
*/
public class LivePush {
- private String sn;
- private String type;
+ private int id; //路口摄像头id
+ private String sn; //直播车机sn
+ private String type; //直播类型 0:开启直播 1:关闭直播
private String videoChannel; //C_1 前摄
+ private double lat; //本机纬度
+ private double lon; //本机经度
+ private int bearing; //本机方向角
+
+ public LivePush(int id, double lat, double lon) {
+ this.id = id;
+ this.lat = lat;
+ this.lon = lon;
+ }
public LivePush(String sn, String type, String videoChannel) {
this.sn = sn;
@@ -15,6 +25,29 @@ public class LivePush {
this.videoChannel = videoChannel;
}
+ public LivePush(String sn, double lat, double lon, int bearing) {
+ this.sn = sn;
+ this.lat = lat;
+ this.lon = lon;
+ this.bearing = bearing;
+ }
+
+ public LivePush(String sn, String videoChannel, double lat, double lon, int bearing) {
+ this.sn = sn;
+ this.videoChannel = videoChannel;
+ this.lat = lat;
+ this.lon = lon;
+ this.bearing = bearing;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
public String getSn() {
return sn;
}
@@ -39,12 +72,40 @@ public class LivePush {
this.videoChannel = videoChannel;
}
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public int getBearing() {
+ return bearing;
+ }
+
+ public void setBearing(int bearing) {
+ this.bearing = bearing;
+ }
+
@Override
public String toString() {
return "LivePush{" +
- "sn='" + sn + '\'' +
+ "id=" + id +
+ ", sn='" + sn + '\'' +
", type='" + type + '\'' +
", videoChannel='" + videoChannel + '\'' +
+ ", lat=" + lat +
+ ", lon=" + lon +
+ ", bearing=" + bearing +
'}';
}
}
diff --git a/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveReceive.java b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveReceive.java
new file mode 100644
index 0000000..8d392a3
--- /dev/null
+++ b/foudations/mogo-live/src/main/java/com/mogo/cloud/live/model/LiveReceive.java
@@ -0,0 +1,69 @@
+package com.mogo.cloud.live.model;
+
+/**
+ * 调用服务端接口直播返回数据
+ */
+public class LiveReceive {
+
+ //直播摄像头id
+ private int id;
+ //直播车机sn
+ private String sn;
+ //直播车机纬度
+ private double lat;
+ //直播车机经度
+ private double lon;
+ //直播流url
+ private String live;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getSn() {
+ return sn;
+ }
+
+ public void setSn(String sn) {
+ this.sn = sn;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public String getLive() {
+ return live;
+ }
+
+ public void setLive(String live) {
+ this.live = live;
+ }
+
+ @Override
+ public String toString() {
+ return "LiveReceive{" +
+ "id=" + id +
+ ", sn='" + sn + '\'' +
+ ", lat=" + lat +
+ ", lon=" + lon +
+ ", live='" + live + '\'' +
+ '}';
+ }
+}
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 3d3971a..92786ed 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
@@ -1,6 +1,7 @@
package com.mogo.cloud.live.network;
import com.mogo.cloud.live.model.BaseData;
+import com.mogo.cloud.live.model.LiveReceive;
import java.util.Map;
@@ -14,22 +15,42 @@ import retrofit2.http.POST;
*/
public interface LiveApiServer {
/**
- * 获取车辆前方直播Url
+ * 获取特定车辆直播Url
*
- * @param vehicleHeadLiveMap 请求数据
+ * @param designativeVehicleHeadLiveMap 请求数据
* @return {@link BaseData}
*/
@FormUrlEncoded
@POST("/dataSave/integratedServices/app/push/no/livePushAndSwitch/v1")
- Observable getVehicleHeadLive(@FieldMap Map vehicleHeadLiveMap);
+ Observable getDesignativeVehicleLive(@FieldMap Map designativeVehicleHeadLiveMap);
+
+ /**
+ * 获取前方车辆直播Url
+ *
+ * @param frontVehicleHeadLiveMap 请求数据
+ * @return {@link BaseData}
+ */
+ @FormUrlEncoded
+ @POST("yycp-geo-fence-carService/front/car")
+ Observable> getFrontVehicleLive(@FieldMap Map frontVehicleHeadLiveMap);
/**
* 获取前方路口直播Url
*
- * @param intersectionLiveMap 请求数据
+ * @param frontIntersectionLiveMap 请求数据
+ * @return {@link BaseData}
+ */
+ @FormUrlEncoded
+ @POST("yycp-geo-fence-carService/front/crossing")
+ Observable> getFrontIntersectionLive(@FieldMap Map frontIntersectionLiveMap);
+
+ /**
+ * 获取固定路口摄像头直播Url
+ *
+ * @param designativeIntersectionLiveMap 请求数据
* @return {@link BaseData}
*/
@FormUrlEncoded
@POST("")
- Observable getIntersectionLive(@FieldMap Map intersectionLiveMap);
+ Observable> getDesignativeIntersectionLive(@FieldMap Map designativeIntersectionLiveMap);
}
diff --git a/gradle.properties b/gradle.properties
index 1b2fe81..8999ce0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -27,23 +27,23 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/
USERNAME=xintai
PASSWORD=xintai2018
# 编译模式: false - 依赖本地版本, true - 依赖 maven 版本
-RELEASE=true
+RELEASE=false
# AI CLOUD 云平台
# 工具类
-MOGO_UTILS_VERSION=1.0.58
+MOGO_UTILS_VERSION=1.0.59
# 网络请求
-MOGO_NETWORK_VERSION=1.0.58
+MOGO_NETWORK_VERSION=1.0.59
# 网络DNS
-MOGO_HTTPDNS_VERSION=1.0.58
+MOGO_HTTPDNS_VERSION=1.0.59
# 鉴权
-MOGO_PASSPORT_VERSION=1.0.58
+MOGO_PASSPORT_VERSION=1.0.59
# 常链接
-MOGO_SOCKET_VERSION=1.0.58
+MOGO_SOCKET_VERSION=1.0.59
# 数据采集
-MOGO_REALTIME_VERSION=1.0.58
+MOGO_REALTIME_VERSION=1.0.59
# 探路,道路事件发布,获取
-MOGO_TANLU_VERSION=1.0.58
+MOGO_TANLU_VERSION=1.0.59
# 直播推流
-MOGO_LIVE_VERSION=1.0.58
+MOGO_LIVE_VERSION=1.0.59
# 直播拉流
-MOGO_TRAFFICLIVE_VERSION=1.0.58
+MOGO_TRAFFICLIVE_VERSION=1.0.59
diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java
index 0e4126f..d1d0136 100644
--- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java
+++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java
@@ -53,10 +53,30 @@ public class CloudLocationInfo implements Parcelable {
*/
private int vehicleType = 0;
+ /**
+ * 道路ID
+ */
+ private String roadId;
+
+ /**
+ * 车道ID-2D路段
+ */
+ private String laneId;
+
+ /**
+ * 车道号:中心线编号为0,中心线右侧编号为负数,3车道通行Road的车道编号,0,-1,-2,-3
+ */
+ private int laneNum;
+
+ /**
+ * 限速
+ */
+ private double rateLimiting;
+
public CloudLocationInfo() {
}
- public CloudLocationInfo(CloudLocationInfo info ) {
+ public CloudLocationInfo(CloudLocationInfo info) {
this.lat = info.getLat();
this.lon = info.getLon();
this.heading = info.getHeading();
@@ -65,9 +85,13 @@ public class CloudLocationInfo implements Parcelable {
this.alt = info.alt;
this.speed = info.speed;
this.vehicleType = info.vehicleType;
+ this.roadId = info.roadId;
+ this.laneId = info.laneId;
+ this.laneNum = info.laneNum;
+ this.rateLimiting = info.rateLimiting;
}
- protected CloudLocationInfo(Parcel in ) {
+ protected CloudLocationInfo(Parcel in) {
lat = in.readDouble();
lon = in.readDouble();
heading = in.readDouble();
@@ -76,18 +100,26 @@ public class CloudLocationInfo implements Parcelable {
alt = in.readDouble();
speed = in.readDouble();
vehicleType = in.readInt();
+ roadId = in.readString();
+ laneId = in.readString();
+ laneNum = in.readInt();
+ rateLimiting = in.readDouble();
}
@Override
- public void writeToParcel( Parcel dest, int flags ) {
- dest.writeDouble( lat );
- dest.writeDouble( lon );
- dest.writeDouble( heading );
- dest.writeLong( systemTime );
- dest.writeLong( satelliteTime );
- dest.writeDouble( alt );
- dest.writeDouble( speed );
- dest.writeInt( vehicleType );
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeDouble(lat);
+ dest.writeDouble(lon);
+ dest.writeDouble(heading);
+ dest.writeLong(systemTime);
+ dest.writeLong(satelliteTime);
+ dest.writeDouble(alt);
+ dest.writeDouble(speed);
+ dest.writeInt(vehicleType);
+ dest.writeString(roadId);
+ dest.writeString(laneId);
+ dest.writeInt(laneNum);
+ dest.writeDouble(rateLimiting);
}
@Override
@@ -95,14 +127,14 @@ public class CloudLocationInfo implements Parcelable {
return 0;
}
- public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() {
+ public static final Creator CREATOR = new Creator() {
@Override
- public CloudLocationInfo createFromParcel( Parcel in ) {
- return new CloudLocationInfo( in );
+ public CloudLocationInfo createFromParcel(Parcel in) {
+ return new CloudLocationInfo(in);
}
@Override
- public CloudLocationInfo[] newArray( int size ) {
+ public CloudLocationInfo[] newArray(int size) {
return new CloudLocationInfo[size];
}
};
@@ -111,7 +143,7 @@ public class CloudLocationInfo implements Parcelable {
return lat;
}
- public void setLat( double lat ) {
+ public void setLat(double lat) {
this.lat = lat;
}
@@ -119,7 +151,7 @@ public class CloudLocationInfo implements Parcelable {
return lon;
}
- public void setLon( double lon ) {
+ public void setLon(double lon) {
this.lon = lon;
}
@@ -127,7 +159,7 @@ public class CloudLocationInfo implements Parcelable {
return heading;
}
- public void setHeading( double heading ) {
+ public void setHeading(double heading) {
this.heading = heading;
}
@@ -135,7 +167,7 @@ public class CloudLocationInfo implements Parcelable {
return systemTime;
}
- public void setSystemTime( long systemTime ) {
+ public void setSystemTime(long systemTime) {
this.systemTime = systemTime;
}
@@ -143,7 +175,7 @@ public class CloudLocationInfo implements Parcelable {
return satelliteTime;
}
- public void setSatelliteTime( long satelliteTime ) {
+ public void setSatelliteTime(long satelliteTime) {
this.satelliteTime = satelliteTime;
}
@@ -151,7 +183,7 @@ public class CloudLocationInfo implements Parcelable {
return alt;
}
- public void setAlt( double alt ) {
+ public void setAlt(double alt) {
this.alt = alt;
}
@@ -159,7 +191,7 @@ public class CloudLocationInfo implements Parcelable {
return speed;
}
- public void setSpeed( double speed ) {
+ public void setSpeed(double speed) {
this.speed = speed;
}
@@ -171,6 +203,38 @@ public class CloudLocationInfo implements Parcelable {
this.vehicleType = vehicleType;
}
+ public String getRoadId() {
+ return roadId;
+ }
+
+ public void setRoadId(String roadId) {
+ this.roadId = roadId;
+ }
+
+ public String getLaneId() {
+ return laneId;
+ }
+
+ public void setLaneId(String laneId) {
+ this.laneId = laneId;
+ }
+
+ public int getLaneNum() {
+ return laneNum;
+ }
+
+ public void setLaneNum(int laneNum) {
+ this.laneNum = laneNum;
+ }
+
+ public double getRateLimiting() {
+ return rateLimiting;
+ }
+
+ public void setRateLimiting(double rateLimiting) {
+ this.rateLimiting = rateLimiting;
+ }
+
@Override
public String toString() {
return "CloudLocationInfo{" +
@@ -182,6 +246,10 @@ public class CloudLocationInfo implements Parcelable {
", alt=" + alt +
", speed=" + speed +
", vehicleType=" + vehicleType +
+ ", roadId='" + roadId + '\'' +
+ ", laneId='" + laneId + '\'' +
+ ", laneNum=" + laneNum +
+ ", rateLimiting=" + rateLimiting +
'}';
}
@@ -191,21 +259,21 @@ public class CloudLocationInfo implements Parcelable {
}
@Override
- public boolean equals( Object o ) {
- if ( this == o ) {
+ public boolean equals(Object o) {
+ if (this == o) {
return true;
}
- if ( o == null || getClass() != o.getClass() ) {
+ if (o == null || getClass() != o.getClass()) {
return false;
}
- CloudLocationInfo that = ( CloudLocationInfo ) o;
- return Double.compare( that.lat, lat ) == 0 &&
- Double.compare( that.lon, lon ) == 0;
+ CloudLocationInfo that = (CloudLocationInfo) o;
+ return Double.compare(that.lat, lat) == 0 &&
+ Double.compare(that.lon, lon) == 0;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {
- return Objects.hash( lat, lon );
+ return Objects.hash(lat, lon);
}
}
diff --git a/modules/mogo-trafficlive/consumer-rules.pro b/modules/mogo-trafficlive/consumer-rules.pro
index b58a6ca..0bd704f 100644
--- a/modules/mogo-trafficlive/consumer-rules.pro
+++ b/modules/mogo-trafficlive/consumer-rules.pro
@@ -1,2 +1,2 @@
--keep class com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack{*;}
+-keep class com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack{*;}
-keep class com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive{*;}
\ No newline at end of file
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/ITrafficCarLiveCallBack.java
similarity index 83%
rename from modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficLiveCallBack.java
rename to modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficCarLiveCallBack.java
index ef64aa0..0c702aa 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/ITrafficCarLiveCallBack.java
@@ -1,6 +1,6 @@
package com.mogo.cloud.trafficlive.api;
-public interface ITrafficLiveCallBack {
+public interface ITrafficCarLiveCallBack {
default void onLiveConnecting() {
diff --git a/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficIntersectionLiveCallBack.java b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficIntersectionLiveCallBack.java
new file mode 100644
index 0000000..774442d
--- /dev/null
+++ b/modules/mogo-trafficlive/src/main/java/com/mogo/cloud/trafficlive/api/ITrafficIntersectionLiveCallBack.java
@@ -0,0 +1,8 @@
+package com.mogo.cloud.trafficlive.api;
+
+public interface ITrafficIntersectionLiveCallBack {
+
+ void liveUrlResult(String liveUrl);
+
+ void onError(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 7c5b420..aa28ccd 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,5 @@
package com.mogo.cloud.trafficlive.api;
-import android.app.Application;
import android.view.SurfaceView;
import com.mogo.cloud.trafficlive.core.TrafficLiveCurrentManager;
@@ -11,37 +10,92 @@ import static com.mogo.cloud.trafficlive.constant.TrafficLiveConstant.TAG;
public class MoGoAiCloudTrafficLive {
/**
- * 查看指定SN车辆直播
+ * 查看前方车辆直播
+ *
+ * @param lat 纬度
+ * @param lon 经度
+ * @param bearing 方向角
+ * @param surfaceView 直播界面
+ * @param callBack {@link ITrafficCarLiveCallBack}直播回调
*/
- public static void viewVehicleHeadLive(Application application, String liveSn, SurfaceView surfaceView, ITrafficLiveCallBack callBack) {
+ public static void viewFrontVehicleLive(double lat, double lon, int bearing, SurfaceView surfaceView, ITrafficCarLiveCallBack callBack) {
try {
- TrafficLiveCurrentManager.getInstance().viewVehicleHeadLive(application, liveSn, surfaceView, callBack);
+ TrafficLiveCurrentManager.getInstance().viewFrontVehicleLive(lat, lon, bearing, surfaceView, callBack);
} catch (Exception e) {
- Logger.e(TAG, " viewVehicleHeadLive error : " + e);
+ Logger.e(TAG, " viewFrontVehicleLive error : " + e);
+ callBack.onError(e != null ? e.getMessage() : "check input param");
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 查看指定SN车辆直播
+ *
+ * @param liveSn 直播车辆SN
+ * @param surfaceView 直播界面
+ * @param callBack {@link ITrafficCarLiveCallBack}直播回调
+ */
+ public static void viewDesignativeVehicleLive(String liveSn, SurfaceView surfaceView, ITrafficCarLiveCallBack callBack) {
+ try {
+ TrafficLiveCurrentManager.getInstance().viewDesignativeVehicleLive(liveSn, surfaceView, callBack);
+ } catch (Exception e) {
+ Logger.e(TAG, " viewDesignativeVehicleLive error : " + e);
+ callBack.onError(e != null ? e.getMessage() : "check input param");
e.printStackTrace();
}
}
/**
* 查看前方路口直播
+ *
+ * @param lat 纬度
+ * @param lon 经度
+ * @param bearing 方向角
+ * @param callBack {@link ITrafficIntersectionLiveCallBack}直播回调
*/
- public static void viewIntersectionLive(ITrafficLiveCallBack callBack) {
- TrafficLiveCurrentManager.getInstance().viewIntersectionLive(callBack);
+ public static void viewFrontIntersectionLive(double lat, double lon, int bearing, ITrafficIntersectionLiveCallBack callBack) {
+ try {
+ TrafficLiveCurrentManager.getInstance().viewFrontIntersectionLive(lat, lon, bearing, callBack);
+ } catch (Exception e) {
+ Logger.e(TAG, " viewFrontIntersectionLive error : " + e);
+ callBack.onError(e != null ? e.getMessage() : "check input param");
+ e.printStackTrace();
+ }
}
/**
- * 停止观看直播
+ * 查看指定路口摄像头直播
+ *
+ * @param cameraId 设备id
+ * @param lat 纬度
+ * @param lon 经度
+ * @param callBack {@link ITrafficIntersectionLiveCallBack}直播回调
*/
- public static void stopLive(String liveSn) {
- TrafficLiveCurrentManager.getInstance().stopLive(liveSn);
+ public static void viewDesignativeIntersectionLive(int cameraId, double lat, double lon, ITrafficIntersectionLiveCallBack callBack) {
+ try {
+ TrafficLiveCurrentManager.getInstance().viewDesignativeIntersectionLive(cameraId, lat, lon, callBack);
+ } catch (Exception e) {
+ Logger.e(TAG, " viewDesignativeIntersectionLive error : " + e);
+ callBack.onError(e != null ? e.getMessage() : "check input param");
+ e.printStackTrace();
+ }
}
/**
- * 是否在直播中
+ * 停止观看车辆直播
+ *
+ * @param liveSn 车辆SN
+ */
+ public static void stopCarLive(String liveSn) {
+ TrafficLiveCurrentManager.getInstance().stopCarLive(liveSn);
+ }
+
+ /**
+ * 车辆是否在直播中
*
* @return 直播状态
*/
- public static boolean isOnLive() {
- return TrafficLiveCurrentManager.getInstance().isOnLive();
+ public static boolean isCarOnLive() {
+ return TrafficLiveCurrentManager.getInstance().isCarOnLive();
}
}
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 799c4c8..69e2520 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,7 +1,5 @@
package com.mogo.cloud.trafficlive.core;
-import android.app.Application;
-import android.os.SystemClock;
import android.text.TextUtils;
import android.view.SurfaceView;
@@ -12,7 +10,8 @@ import com.mogo.cloud.live.manager.MoGoLiveManager;
import com.mogo.cloud.live.manager.MoGoLivePushConfig;
import com.mogo.cloud.live.manager.RequestLiveManager;
import com.mogo.cloud.passport.MoGoAiCloudClient;
-import com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack;
+import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack;
+import com.mogo.cloud.trafficlive.api.ITrafficIntersectionLiveCallBack;
import com.mogo.cloud.utils.logger.Logger;
import static com.mogo.cloud.live.constant.LiveConstant.LIVE_TYPE_CLOSE;
@@ -24,10 +23,7 @@ public class TrafficLiveCurrentManager
private static volatile TrafficLiveCurrentManager mInstance;
private final RequestLiveManager requestLiveManager;
- private ITrafficLiveCallBack trafficLiveCallBack;
- private SurfaceView surfaceView;
- private String mStreamId;
- private boolean isLoginSuccess = false;
+ private ITrafficCarLiveCallBack trafficLiveCallBack;
private TrafficLiveCurrentManager() {
requestLiveManager = RequestLiveManager.getInstance();
@@ -45,12 +41,40 @@ public class TrafficLiveCurrentManager
return mInstance;
}
- public boolean isOnLive() {
+ public boolean isCarOnLive() {
return MoGoLiveManager.getInstance().getLiveStatusModel().isPlaying();
}
- public void viewVehicleHeadLive(Application application, String liveSn, SurfaceView surfaceView, ITrafficLiveCallBack trafficLiveCallBack) throws Exception {
- if (trafficLiveCallBack == null) {
+ public void viewFrontVehicleLive(double lat, double lon, int bearing, SurfaceView surfaceView, ITrafficCarLiveCallBack callBack) throws Exception {
+ if (callBack == null) {
+ throw new Exception("ITrafficLiveCallBack can not be null");
+ }
+ if (surfaceView == null) {
+ throw new Exception("SurfaceView can not be null");
+ }
+ if (lat == 0.0 || lon == 0.0) {
+ throw new Exception("param lat and lon can not be 0.0f");
+ }
+ if (bearing < 0) {
+ throw new Exception("param bearing can not less than 0");
+ }
+
+ this.trafficLiveCallBack = callBack;
+ requestLiveManager.requestFrontVehicleLive(lat, lon, bearing, new IRequestLiveListener() {
+ @Override
+ public void onSuccess(String liveSn, String liveUrl, double lat, double lon) {
+ onVehicleLiveSuccess(liveSn, surfaceView);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ onVehicleLiveError(e.getMessage());
+ }
+ });
+ }
+
+ public void viewDesignativeVehicleLive(String liveSn, SurfaceView surfaceView, ITrafficCarLiveCallBack callBack) throws Exception {
+ if (callBack == null) {
throw new Exception("ITrafficLiveCallBack can not be null");
}
if (surfaceView == null) {
@@ -60,45 +84,42 @@ public class TrafficLiveCurrentManager
throw new Exception("liveSn can not be null");
}
- this.trafficLiveCallBack = trafficLiveCallBack;
- this.surfaceView = surfaceView;
- Logger.i(TAG, "申请拉流 systemClock :" + SystemClock.elapsedRealtime() + " SystemTime : " + System.currentTimeMillis());
- requestLiveManager.requestVehicleHeadLive(LIVE_TYPE_OPEN, liveSn, new IRequestLiveListener() {
+ this.trafficLiveCallBack = callBack;
+ requestLiveManager.requestDesignativeVehicleLive(LIVE_TYPE_OPEN, liveSn, new IRequestLiveListener() {
@Override
public void onSuccess() {
- Logger.i(TAG, "主播开始直播了 systemClock :" + SystemClock.elapsedRealtime() + " SystemTime : " + System.currentTimeMillis());
- String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
- mStreamId = MoGoLiveManager.STREAM_ID_PREFIX + liveSn;
-
- // 初始化配置文件
- MoGoLivePushConfig mLivePushConfig = MoGoLivePushConfig.getInstance();
- mLivePushConfig.setDevicesId(sn);
-
- // 登录要查看的SN房间
- MoGoLiveManager.getInstance().loginMultiRoom(liveSn);
-
- // 直接 查看对应SN的直播
- MoGoLiveManager.getInstance().startLive(surfaceView);
- if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) {
- TrafficLiveCurrentManager.this.trafficLiveCallBack.onLive();
- }
+ onVehicleLiveSuccess(liveSn, surfaceView);
}
@Override
public void onError(Throwable e) {
- if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) {
- TrafficLiveCurrentManager.this.trafficLiveCallBack.onError(e.getMessage());
- }
+ onVehicleLiveError(e.getMessage());
}
});
}
- public void viewIntersectionLive(ITrafficLiveCallBack callBack) {
-
+ private void onVehicleLiveSuccess(String liveSn, SurfaceView surfaceView) {
+ String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn();
+ // 初始化配置文件
+ MoGoLivePushConfig mLivePushConfig = MoGoLivePushConfig.getInstance();
+ mLivePushConfig.setDevicesId(sn);
+ // 登录要查看的SN房间
+ MoGoLiveManager.getInstance().loginMultiRoom(liveSn);
+ // 直接 查看对应SN的直播
+ MoGoLiveManager.getInstance().startLive(surfaceView);
+ if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) {
+ TrafficLiveCurrentManager.this.trafficLiveCallBack.onLive();
+ }
}
- public void stopLive(String liveSn) {
- requestLiveManager.requestVehicleHeadLive(LIVE_TYPE_CLOSE, liveSn, new IRequestLiveListener() {
+ private void onVehicleLiveError(String errorMsg) {
+ if (TrafficLiveCurrentManager.this.trafficLiveCallBack != null) {
+ TrafficLiveCurrentManager.this.trafficLiveCallBack.onError(errorMsg);
+ }
+ }
+
+ public void stopCarLive(String liveSn) {
+ requestLiveManager.requestDesignativeVehicleLive(LIVE_TYPE_CLOSE, liveSn, new IRequestLiveListener() {
@Override
public void onSuccess() {
}
@@ -111,10 +132,47 @@ public class TrafficLiveCurrentManager
}
});
MoGoLiveManager.getInstance().stopLive();
- surfaceView = null;
trafficLiveCallBack = null;
- isLoginSuccess = false;
- mStreamId = null;
+ }
+
+ public void viewFrontIntersectionLive(double lat, double lon, int bearing, ITrafficIntersectionLiveCallBack callBack) throws Exception {
+ if (lat == 0.0 || lon == 0.0) {
+ throw new Exception("param lat and lon can not be 0.0f");
+ }
+ if (bearing < 0) {
+ throw new Exception("param bearing can not less than 0");
+ }
+ requestLiveManager.requestFrontIntersectionLive(lat, lon, bearing, new IRequestLiveListener() {
+ @Override
+ public void onSuccess(String liveUrl) {
+ callBack.liveUrlResult(liveUrl);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ callBack.onError(e.getMessage());
+ }
+ });
+ }
+
+ public void viewDesignativeIntersectionLive(int cameraId, double lat, double lon, ITrafficIntersectionLiveCallBack callBack) throws Exception {
+ if (lat == 0.0 || lon == 0.0) {
+ throw new Exception("param lat and lon can not be 0.0f");
+ }
+ if (cameraId < 0) {
+ throw new Exception("param bearing can not less than 0");
+ }
+ requestLiveManager.requestDesignativeIntersectionLive(cameraId, lat, lon, new IRequestLiveListener() {
+ @Override
+ public void onSuccess(String liveUrl) {
+ callBack.liveUrlResult(liveUrl);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ callBack.onError(e.getMessage());
+ }
+ });
}
@Override
@@ -135,7 +193,6 @@ public class TrafficLiveCurrentManager
}
}
-
@Override
public void onMultiRoomConnecting() {
if (trafficLiveCallBack != null) {
@@ -145,7 +202,6 @@ public class TrafficLiveCurrentManager
@Override
public void onMultiRoomConnected() {
- isLoginSuccess = true;
if (trafficLiveCallBack != null) {
trafficLiveCallBack.onLiveConnected();
}
@@ -153,9 +209,9 @@ public class TrafficLiveCurrentManager
@Override
public void onMultiRoomDisconnected() {
- isLoginSuccess = false;
if (trafficLiveCallBack != null) {
trafficLiveCallBack.onDisConnect();
}
}
+
}