From b6e604f2449bb65dfaafb0f0741ba54ff0d2f9c2 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 30 四月 2024 15:20:03 +0800
Subject: [PATCH] 修改云端录像详情页使用直接访问zlm的方式播放录像
---
src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java | 205 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 174 insertions(+), 31 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
index 36ae1b8..6f6d5ea 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
@@ -1,8 +1,9 @@
package com.genersoft.iot.vmp.media.zlm;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.media.bean.MediaServer;
+import com.genersoft.iot.vmp.utils.SSLSocketClientUtil;
import okhttp3.*;
import okhttp3.logging.HttpLoggingInterceptor;
import org.jetbrains.annotations.NotNull;
@@ -10,13 +11,13 @@
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
-import java.io.File;
-import java.io.FileOutputStream;
+import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.ConnectException;
+import java.net.SocketTimeoutException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -26,39 +27,64 @@
private final static Logger logger = LoggerFactory.getLogger(AssistRESTfulUtils.class);
+
+ private OkHttpClient client;
+
+
public interface RequestCallback{
void run(JSONObject response);
}
private OkHttpClient getClient(){
- OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
- if (logger.isDebugEnabled()) {
- HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> {
- logger.debug("http璇锋眰鍙傛暟锛�" + message);
- });
- logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
- // OkHttp閫茶娣诲姞鏀旀埅鍣╨oggingInterceptor
- httpClientBuilder.addInterceptor(logging);
+ return getClient(null);
+ }
+
+ private OkHttpClient getClient(Integer readTimeOut){
+ if (client == null) {
+ if (readTimeOut == null) {
+ readTimeOut = 10;
+ }
+ OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
+ // 璁剧疆杩炴帴瓒呮椂鏃堕棿
+ httpClientBuilder.connectTimeout(8, TimeUnit.SECONDS);
+ // 璁剧疆璇诲彇瓒呮椂鏃堕棿
+ httpClientBuilder.readTimeout(readTimeOut,TimeUnit.SECONDS);
+ // 璁剧疆杩炴帴姹�
+ httpClientBuilder.connectionPool(new ConnectionPool(16, 5, TimeUnit.MINUTES));
+ if (logger.isDebugEnabled()) {
+ HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> {
+ logger.debug("http璇锋眰鍙傛暟锛�" + message);
+ });
+ logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
+ // OkHttp閫茶娣诲姞鏀旀埅鍣╨oggingInterceptor
+ httpClientBuilder.addInterceptor(logging);
+ }
+ X509TrustManager manager = SSLSocketClientUtil.getX509TrustManager();
+ // 璁剧疆ssl
+ httpClientBuilder.sslSocketFactory(SSLSocketClientUtil.getSocketFactory(manager), manager);
+ httpClientBuilder.hostnameVerifier(SSLSocketClientUtil.getHostnameVerifier());//蹇界暐鏍¢獙
+ client = httpClientBuilder.build();
}
- return httpClientBuilder.build();
+ return client;
+
}
- public JSONObject sendGet(MediaServerItem mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
+ public JSONObject sendGet(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
OkHttpClient client = getClient();
if (mediaServerItem == null) {
return null;
}
- if (ObjectUtils.isEmpty(mediaServerItem.getRecordAssistPort())) {
+ if (mediaServerItem.getRecordAssistPort() <= 0) {
logger.warn("鏈惎鐢ˋssist鏈嶅姟");
return null;
}
- StringBuffer stringBuffer = new StringBuffer();
- stringBuffer.append(String.format("http://%s:%s/%s", mediaServerItem.getIp(), mediaServerItem.getRecordAssistPort(), api));
+ StringBuilder stringBuffer = new StringBuilder();
+ stringBuffer.append(api);
JSONObject responseJSON = null;
- if (param != null && param.keySet().size() > 0) {
+ if (param != null && !param.keySet().isEmpty()) {
stringBuffer.append("?");
int index = 1;
for (String key : param.keySet()){
@@ -73,6 +99,7 @@
}
String url = stringBuffer.toString();
+ logger.info("[璁块棶assist]锛� {}", url);
Request request = new Request.Builder()
.get()
.url(url)
@@ -128,21 +155,137 @@
return responseJSON;
}
+ public JSONObject sendPost(MediaServer mediaServerItem, String url,
+ JSONObject param, ZLMRESTfulUtils.RequestCallback callback,
+ Integer readTimeOut) {
+ OkHttpClient client = getClient(readTimeOut);
- public JSONObject fileDuration(MediaServerItem mediaServerItem, String app, String stream, RequestCallback callback){
- Map<String, Object> param = new HashMap<>();
- param.put("app",app);
- param.put("stream",stream);
- param.put("recordIng",true);
- return sendGet(mediaServerItem, "api/record/file/duration",param, callback);
+ if (mediaServerItem == null) {
+ return null;
+ }
+ logger.info("[璁块棶assist]锛� {}, 鍙傛暟锛� {}", url, param);
+ JSONObject responseJSON = new JSONObject();
+ //-2鑷畾涔夋祦濯掍綋 璋冪敤閿欒鐮�
+ responseJSON.put("code",-2);
+ responseJSON.put("msg","ASSIST璋冪敤澶辫触");
+
+ RequestBody requestBodyJson = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), param.toString());
+
+ Request request = new Request.Builder()
+ .post(requestBodyJson)
+ .url(url)
+ .addHeader("Content-Type", "application/json")
+ .build();
+ if (callback == null) {
+ try {
+ Response response = client.newCall(request).execute();
+ if (response.isSuccessful()) {
+ ResponseBody responseBody = response.body();
+ if (responseBody != null) {
+ String responseStr = responseBody.string();
+ responseJSON = JSON.parseObject(responseStr);
+ }
+ }else {
+ response.close();
+ Objects.requireNonNull(response.body()).close();
+ }
+ }catch (IOException e) {
+ logger.error(String.format("[ %s ]ASSIST璇锋眰澶辫触: %s", url, e.getMessage()));
+
+ if(e instanceof SocketTimeoutException){
+ //璇诲彇瓒呮椂瓒呮椂寮傚父
+ logger.error(String.format("璇诲彇ASSIST鏁版嵁澶辫触: %s, %s", url, e.getMessage()));
+ }
+ if(e instanceof ConnectException){
+ //鍒ゆ柇杩炴帴寮傚父锛屾垜杩欓噷鏄姤Failed to connect to 10.7.5.144
+ logger.error(String.format("杩炴帴ASSIST澶辫触: %s, %s", url, e.getMessage()));
+ }
+
+ }catch (Exception e){
+ logger.error(String.format("璁块棶ASSIST澶辫触: %s, %s", url, e.getMessage()));
+ }
+ }else {
+ client.newCall(request).enqueue(new Callback(){
+
+ @Override
+ public void onResponse(@NotNull Call call, @NotNull Response response){
+ if (response.isSuccessful()) {
+ try {
+ String responseStr = Objects.requireNonNull(response.body()).string();
+ callback.run(JSON.parseObject(responseStr));
+ } catch (IOException e) {
+ logger.error(String.format("[ %s ]璇锋眰澶辫触: %s", url, e.getMessage()));
+ }
+
+ }else {
+ response.close();
+ Objects.requireNonNull(response.body()).close();
+ }
+ }
+
+ @Override
+ public void onFailure(@NotNull Call call, @NotNull IOException e) {
+ logger.error(String.format("杩炴帴ZLM澶辫触: %s, %s", call.request().toString(), e.getMessage()));
+
+ if(e instanceof SocketTimeoutException){
+ //璇诲彇瓒呮椂瓒呮椂寮傚父
+ logger.error(String.format("璇诲彇ZLM鏁版嵁澶辫触: %s, %s", call.request().toString(), e.getMessage()));
+ }
+ if(e instanceof ConnectException){
+ //鍒ゆ柇杩炴帴寮傚父锛屾垜杩欓噷鏄姤Failed to connect to 10.7.5.144
+ logger.error(String.format("杩炴帴ZLM澶辫触: %s, %s", call.request().toString(), e.getMessage()));
+ }
+ }
+ });
+ }
+
+
+
+ return responseJSON;
}
- public JSONObject addStreamCallInfo(MediaServerItem mediaServerItem, String app, String stream, String callId, RequestCallback callback){
+ public JSONObject getInfo(MediaServer mediaServerItem, RequestCallback callback){
Map<String, Object> param = new HashMap<>();
- param.put("app",app);
- param.put("stream",stream);
- param.put("callId",callId);
- return sendGet(mediaServerItem, "api/record/addStreamCallInfo",param, callback);
+ return sendGet(mediaServerItem, "api/record/info",param, callback);
}
+ public JSONObject addTask(MediaServer mediaServerItem, String app, String stream, String startTime,
+ String endTime, String callId, List<String> filePathList, String remoteHost) {
+
+ JSONObject videoTaskInfoJSON = new JSONObject();
+ videoTaskInfoJSON.put("app", app);
+ videoTaskInfoJSON.put("stream", stream);
+ videoTaskInfoJSON.put("startTime", startTime);
+ videoTaskInfoJSON.put("endTime", endTime);
+ videoTaskInfoJSON.put("callId", callId);
+ videoTaskInfoJSON.put("filePathList", filePathList);
+ if (!ObjectUtils.isEmpty(remoteHost)) {
+ videoTaskInfoJSON.put("remoteHost", remoteHost);
+ }
+ String urlStr = String.format("%s/api/record/file/download/task/add", remoteHost);;
+ return sendPost(mediaServerItem, urlStr, videoTaskInfoJSON, null, 30);
+ }
+
+ public JSONObject queryTaskList(MediaServer mediaServerItem, String app, String stream, String callId,
+ String taskId, Boolean isEnd, String scheme) {
+ Map<String, Object> param = new HashMap<>();
+ if (!ObjectUtils.isEmpty(app)) {
+ param.put("app", app);
+ }
+ if (!ObjectUtils.isEmpty(stream)) {
+ param.put("stream", stream);
+ }
+ if (!ObjectUtils.isEmpty(callId)) {
+ param.put("callId", callId);
+ }
+ if (!ObjectUtils.isEmpty(taskId)) {
+ param.put("taskId", taskId);
+ }
+ if (!ObjectUtils.isEmpty(isEnd)) {
+ param.put("isEnd", isEnd);
+ }
+ String urlStr = String.format("%s://%s:%s/api/record/file/download/task/list",
+ scheme, mediaServerItem.getIp(), mediaServerItem.getRecordAssistPort());;
+ return sendGet(mediaServerItem, urlStr, param, null);
+ }
}
--
Gitblit v1.8.0