视频预览 工厂模式下各区域的实现
This commit is contained in:
parent
2d677cfefc
commit
5045213674
|
@ -14,5 +14,6 @@ import org.springframework.stereotype.Component;
|
|||
@PropertySource("classpath:/domain/tsingtao-xha.properties")
|
||||
@ConfigurationProperties(prefix = "tsingtao-xha")
|
||||
public class Tsingtao_xhaProperties {
|
||||
|
||||
private String cloudhls;
|
||||
private String localhls;
|
||||
}
|
||||
|
|
|
@ -81,4 +81,6 @@ public interface ResourceService extends CrudService<ResourceEntity, ResourceDTO
|
|||
void KnowledgeBase();
|
||||
|
||||
Object componentServiceRank(String type);
|
||||
|
||||
Integer getProjectPlace();
|
||||
}
|
|
@ -58,6 +58,9 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
|
|||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ResourceServiceImpl.class);
|
||||
|
||||
@Value("${project.place}")
|
||||
private Integer projectPlace;
|
||||
|
||||
@Value("${zsk.appid}")
|
||||
private String appId;
|
||||
|
||||
|
@ -730,4 +733,9 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
|
|||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getProjectPlace() {
|
||||
return this.projectPlace;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package io.renren.modules.resource.videoPreview;
|
||||
|
||||
|
||||
/**
|
||||
* 视频预览抽象类
|
||||
*/
|
||||
public abstract class AbstractVideoPreviewService {
|
||||
|
||||
/**
|
||||
* 获取hls预览地址
|
||||
*
|
||||
* @param key 获取hls地址的键
|
||||
* @return
|
||||
*/
|
||||
public abstract String getHls(String key);
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package io.renren.modules.resource.videoPreview;
|
||||
|
||||
|
||||
import io.renren.common.constant.Constant;
|
||||
import io.renren.common.domain.BaoTouProperties;
|
||||
import io.renren.common.domain.TsingtaoProperties;
|
||||
import io.renren.common.domain.Tsingtao_xhaProperties;
|
||||
import io.renren.common.utils.SpringContextUtils;
|
||||
import io.renren.modules.monitor.service.MonitorService;
|
||||
import io.renren.modules.resource.service.ResourceService;
|
||||
import io.renren.modules.resource.videoPreview.domain.BaoTouVideoPreviewService;
|
||||
import io.renren.modules.resource.videoPreview.domain.TsingtaoVideoPreviewService;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 视频预览工厂类
|
||||
*/
|
||||
public final class VideoPreviewFactory {
|
||||
private static ResourceService resourceService;
|
||||
private static int projectPlace;
|
||||
|
||||
private static BaoTouProperties baoTouProperties; // 包头配置
|
||||
|
||||
private static MonitorService monitorService;
|
||||
|
||||
private static TsingtaoProperties tsingtaoProperties; // 青岛市区配置
|
||||
|
||||
private static Tsingtao_xhaProperties tsingtao_xhaProperties; // 青岛西海岸配置
|
||||
|
||||
static {
|
||||
VideoPreviewFactory.resourceService = SpringContextUtils.getBean(ResourceService.class);
|
||||
VideoPreviewFactory.projectPlace = resourceService.getProjectPlace();
|
||||
VideoPreviewFactory.baoTouProperties = SpringContextUtils.getBean(BaoTouProperties.class);
|
||||
VideoPreviewFactory.monitorService = SpringContextUtils.getBean(MonitorService.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预览服务实现
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Optional<AbstractVideoPreviewService> build() {
|
||||
AbstractVideoPreviewService abstractVideoPreviewService = null;
|
||||
switch (Constant.ProjectPlace.getByFlag(projectPlace)) {
|
||||
case TSINGTAO: { // 青岛市局
|
||||
abstractVideoPreviewService = new TsingtaoVideoPreviewService(monitorService);
|
||||
}
|
||||
break;
|
||||
case TSINGTAO_XHA: { // 青岛西海岸
|
||||
|
||||
}
|
||||
break;
|
||||
case BAOTOU: { // 包头
|
||||
abstractVideoPreviewService = new BaoTouVideoPreviewService(baoTouProperties);
|
||||
}
|
||||
case UNKNOWN: { // 未知区域
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
return Optional.ofNullable(abstractVideoPreviewService);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package io.renren.modules.resource.videoPreview.domain;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.renren.common.domain.BaoTouProperties;
|
||||
import io.renren.modules.resource.videoPreview.AbstractVideoPreviewService;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* 包头预览
|
||||
*/
|
||||
public class BaoTouVideoPreviewService extends AbstractVideoPreviewService {
|
||||
private static Logger logger = LoggerFactory.getLogger(BaoTouVideoPreviewService.class);
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
|
||||
private BaoTouProperties baoTouProperties;
|
||||
|
||||
public BaoTouVideoPreviewService(BaoTouProperties baoTouProperties) {
|
||||
this.baoTouProperties = baoTouProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取hls预览地址
|
||||
*
|
||||
* @param key 获取hls地址的键
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getHls(String key) {
|
||||
String hls = null;
|
||||
Request request = new Request.Builder().url(String.format(baoTouProperties.getHlsurl(), key)).build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
if (response.isSuccessful()) {
|
||||
JSONObject jsonObject = JSON.parseObject(response.body().string());
|
||||
if (jsonObject.containsKey("data")) {
|
||||
hls = jsonObject.getString("data");
|
||||
}
|
||||
} else {
|
||||
logger.error("包头预览地址获取失败");
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
logger.error("包头预览地址获取失败", exception);
|
||||
}
|
||||
return hls;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package io.renren.modules.resource.videoPreview.domain;
|
||||
|
||||
import io.renren.modules.monitor.service.MonitorService;
|
||||
import io.renren.modules.resource.videoPreview.AbstractVideoPreviewService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 青岛市局预览
|
||||
*/
|
||||
public class TsingtaoVideoPreviewService extends AbstractVideoPreviewService {
|
||||
private static Logger logger = LoggerFactory.getLogger(BaoTouVideoPreviewService.class);
|
||||
|
||||
private MonitorService monitorService;
|
||||
|
||||
public TsingtaoVideoPreviewService(MonitorService monitorService) {
|
||||
this.monitorService = monitorService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取hls预览地址
|
||||
*
|
||||
* @param key 获取hls地址的键
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getHls(String key) {
|
||||
try {
|
||||
return monitorService.fileCode(key);
|
||||
} catch (IOException e) {
|
||||
logger.error("青岛市局获取预览地址失败", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package io.renren.modules.resource.videoPreview.domain;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.renren.common.domain.Tsingtao_xhaProperties;
|
||||
import io.renren.modules.resource.videoPreview.AbstractVideoPreviewService;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* 青岛西海岸
|
||||
*/
|
||||
public class TsingtaoXHAVideoPreviewService extends AbstractVideoPreviewService {
|
||||
private static Logger logger = LoggerFactory.getLogger(TsingtaoXHAVideoPreviewService.class);
|
||||
Tsingtao_xhaProperties tsingtao_xhaProperties;
|
||||
|
||||
public TsingtaoXHAVideoPreviewService(Tsingtao_xhaProperties tsingtao_xhaProperties) {
|
||||
this.tsingtao_xhaProperties = tsingtao_xhaProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取hls预览地址
|
||||
*
|
||||
* @param key 获取hls地址的键
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getHls(String key) {
|
||||
List<String> result = new CopyOnWriteArrayList<>();
|
||||
CompletableFuture cloud =
|
||||
CompletableFuture.runAsync(() -> { // 云脑专网
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
Request request = new Request.Builder().url(String.format(tsingtao_xhaProperties.getCloudhls(), key)).build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
if (response.isSuccessful()) {
|
||||
JSONObject jsonObject = JSON.parseObject(response.body().string());
|
||||
if (jsonObject.containsKey("data")) {
|
||||
result.add(jsonObject.getString("data"));
|
||||
}
|
||||
} else {
|
||||
logger.error("包头预览地址获取失败");
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
logger.error("包头预览地址获取失败", exception);
|
||||
}
|
||||
});
|
||||
CompletableFuture local =
|
||||
CompletableFuture.runAsync(() -> { // 金宏网
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
Request request = new Request.Builder().url(String.format(tsingtao_xhaProperties.getLocalhls(), key)).build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
if (response.isSuccessful()) {
|
||||
JSONObject jsonObject = JSON.parseObject(response.body().string());
|
||||
if (jsonObject.containsKey("data")) {
|
||||
result.add(jsonObject.getString("data"));
|
||||
}
|
||||
} else {
|
||||
logger.error("包头预览地址获取失败");
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
logger.error("包头预览地址获取失败", exception);
|
||||
}
|
||||
});
|
||||
CompletableFuture.allOf(cloud, local);
|
||||
return result.stream().filter(index -> StringUtils.isNotEmpty(index)).findAny().orElse(null);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
tsingtao-xha.cloudhls=http://10.10.30.9:8001/hx-weatherwarning/camera/getCameraLiveStreamByCode?cameraCode=%s&protocol=hls
|
||||
tsingtao-xha.localhls=http://10.134.135.9:8001/hx-weatherwarning/camera/getCameraLiveStreamByCode?cameraCode=%s&protocol=hls
|
|
@ -1,5 +1,7 @@
|
|||
package io.renren.common.constant;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 常量
|
||||
*/
|
||||
|
@ -228,7 +230,11 @@ public interface Constant {
|
|||
/**
|
||||
* 包头
|
||||
*/
|
||||
BAOTOU(2);
|
||||
BAOTOU(2),
|
||||
/**
|
||||
* 未知
|
||||
*/
|
||||
UNKNOWN(Integer.MAX_VALUE);
|
||||
private int value;
|
||||
|
||||
ProjectPlace(int value) {
|
||||
|
@ -238,5 +244,10 @@ public interface Constant {
|
|||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static ProjectPlace getByFlag(int flag) {
|
||||
ProjectPlace[] index = ProjectPlace.values();
|
||||
return Arrays.asList(index).stream().filter(index_ -> index_.value == flag).findAny().orElse(ProjectPlace.UNKNOWN);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue