Quellcode durchsuchen

修复大华地址解析问题

MisterZhang vor 4 Jahren
Ursprung
Commit
c35cad4a82
1 geänderte Dateien mit 48 neuen und 7 gelöschten Zeilen
  1. 48 7
      src/main/java/com/zj/server/FlvHandler.java

+ 48 - 7
src/main/java/com/zj/server/FlvHandler.java

@@ -1,6 +1,8 @@
 package com.zj.server;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.zj.entity.Camera;
 import com.zj.service.CameraRepository;
@@ -61,23 +63,24 @@ public class FlvHandler extends SimpleChannelInboundHandler<Object> {
 				sendError(ctx, HttpResponseStatus.BAD_REQUEST);
 				return;
 			}
+			
+			Map<String, String> parse = parseUrl(req.uri());
 
-			List<String> urlList = decoder.parameters().get("url");
-			List<String> acList = decoder.parameters().get("autoClose");
-
-			if (null != urlList && StrUtil.isBlank(urlList.get(0))) {
+			String streamUrl = parse.get("url");
+			String autoCloseStr = parse.get("autoClose");
+			if (StrUtil.isBlank(streamUrl)) {
 				log.info("url有误");
 				sendError(ctx, HttpResponseStatus.BAD_REQUEST);
 				return;
 			}
 
 			Camera camera = new Camera();
-			camera.setUrl(urlList.get(0));
+			camera.setUrl(streamUrl);
 
 			//是否需要自动关闭流
 			boolean autoClose = true;
-			if (null != acList) {
-				if ("false".equals(acList.get(0))) {
+			if (StrUtil.isNotBlank(autoCloseStr)) {
+				if ("false".equals(autoCloseStr)) {
 					autoClose = false;
 					cameraRepository.add(camera);
 				}
@@ -183,5 +186,43 @@ public class FlvHandler extends SimpleChannelInboundHandler<Object> {
 			return;
 		}
 	}
+	
+	private Map<String, String> parseUrl(String url) {
+		String[] split = url.split("url=");
+		String urlParent = split[1];
+		Map<String, String> pMap = new HashMap<String, String>();
+		//有autoClose
+		if(urlParent.indexOf("autoClose") != -1) {
+			
+			String[] urlChild = urlParent.split("\\?");
+			if(urlChild.length > 1) {
+				String rUrl = urlChild[0];
+				String fullParam = urlChild[1];
+				
+				String[] params = fullParam.split("&");
+				
+				StringBuffer sb = new StringBuffer();
+				sb.append(rUrl);
+				sb.append("?");
+				
+				for (String param : params) {
+					if(param.indexOf("autoClose") == -1) {
+						sb.append(param);
+						sb.append("&");
+					} else {
+						String[] as = param.split("=");
+						pMap.put(as[0], as[1]);		
+					}
+				}
+				int lastIndexOf = sb.toString().lastIndexOf("&");
+				String xxx = sb.toString().substring(0, lastIndexOf);
+				pMap.put("url", xxx);
+			}
+			
+		} else {
+			pMap.put("url", urlParent);
+		}
+		return pMap;
+	}
 
 }