Jelajahi Sumber

云端录制,还没写完

zouxuan 3 tahun lalu
induk
melakukan
eec17f53b7

+ 1 - 0
mec-im/src/main/java/com/ym/config/IMProperties.java

@@ -14,4 +14,5 @@ public class IMProperties {
     private String appKey;
     private String secret;
     private String host;
+    private String rtcHost;
 }

+ 42 - 0
mec-im/src/main/java/com/ym/http/HttpHelper.java

@@ -4,6 +4,7 @@ import com.ym.config.IMProperties;
 import com.ym.utils.CodeUtil;
 import io.rong.util.GsonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -252,4 +253,45 @@ public class HttpHelper {
         conn.setReadTimeout(30000);
         conn.setRequestProperty("Content-Type", contentType);
     }
+
+    public HttpURLConnection createIMRtcPostHttpConnection(String uri, String contentType,String roomId)
+            throws IOException{
+        return createCommonRtcPostHttpConnection(imProperties.getRtcHost(),
+                imProperties.getAppKey(), imProperties.getSecret(), uri,
+                contentType,roomId);
+    }
+
+    public HttpURLConnection createCommonRtcPostHttpConnection(String host, String appKey,
+                                                               String appSecret, String uri, String contentType,String roomId)
+            throws IOException{
+        String nonce = String.valueOf(Math.random() * 1000000);
+        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+        StringBuilder toSign = new StringBuilder(appSecret).append(nonce).append(timestamp);
+        String sign = CodeUtil.hexSHA1(toSign.toString());
+        uri = host + uri;
+        URL url = new URL(uri);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        if (conn == null) {
+            log.info("open url connectin fail, url={}", uri);
+            return null;
+        }
+
+        conn.setUseCaches(false);
+        conn.setDoInput(true);
+        conn.setDoOutput(true);
+        conn.setRequestMethod("POST");
+        conn.setInstanceFollowRedirects(true);
+        conn.setConnectTimeout(30000);
+        conn.setReadTimeout(30000);
+
+        conn.setRequestProperty("App-Key", appKey);
+        conn.setRequestProperty("Nonce", nonce);
+        conn.setRequestProperty("Timestamp", timestamp);
+        conn.setRequestProperty("Signature", sign);
+        if(StringUtils.isNotEmpty(roomId)){
+            conn.setRequestProperty("Room-Id", roomId);
+        }
+        conn.setRequestProperty("Content-Type", contentType);
+        return conn;
+    }
 }

+ 43 - 0
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -1,13 +1,19 @@
 package com.ym.service.Impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.ym.http.HttpHelper;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.im.IMHelper;
 import com.ym.pojo.IMApiResultInfo;
 import com.ym.service.LiveRoomService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.net.HttpURLConnection;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -21,6 +27,10 @@ public class LiveRoomServiceImpl implements LiveRoomService {
 
     @Autowired
     private IMHelper imHelper;
+    @Autowired
+    private HttpHelper httpHelper;
+    @Autowired
+    private RedissonClient redissonClient;
 
     /**
      * 创建房间-聊天室
@@ -67,4 +77,37 @@ public class LiveRoomServiceImpl implements LiveRoomService {
         return resultInfo;
     }
 
+    @Override
+    public void startRecord(String roomId) {
+
+    }
+
+    public String getRoomSessionId(String roomId){
+        RBucket<String> bucket = redissonClient.getBucket("sessionId:" + roomId);
+        String sessionId = bucket.get();
+        if(StringUtils.isNotEmpty(sessionId)){
+            return sessionId;
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("roomId",roomId);
+
+        HttpURLConnection conn = null;
+        try {
+            conn = httpHelper.createIMRtcPostHttpConnection("/rtc/room/query.json", "application/json",null);
+            httpHelper.setBodyParameter(jsonObject.toJSONString(), conn);
+            String returnResult = httpHelper.returnResult(conn, jsonObject.toJSONString());
+            JSONObject resultObject = JSONObject.parseObject(returnResult);
+            String code = resultObject.get("code").toString();
+            if("200".equals(code)){
+                bucket.set(resultObject.get("sessionId").toString());
+            }else {
+                log.error("获取sessionId失败 returnResult:{}",returnResult);
+                throw new BizException("获取sessionId失败");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return sessionId;
+    }
+
 }

+ 9 - 0
mec-im/src/main/java/com/ym/service/LiveRoomService.java

@@ -11,4 +11,13 @@ public interface LiveRoomService {
     IMApiResultInfo createLiveRoom(String roomId, String roomName) throws Exception;
 
     IMApiResultInfo destroyLiveRoom(String roomId) throws Exception;
+
+    /**
+    * @description: 开始录制直播
+     * @param roomId
+    * @return void
+    * @author zx
+    * @date 2022/2/25 10:00
+    */
+    void startRecord(String roomId);
 }