package cn.huge.module.xylink.utils;
|
|
|
import cn.huge.base.common.exception.MethodException;
|
import cn.huge.base.common.utils.HttpClientUtils;
|
import cn.huge.base.common.utils.JsonMapper;
|
import cn.huge.module.xylink.domain.dto.XylinkMeetDTO;
|
import cn.huge.module.xylink.domain.dto.XylinkVedioDTO;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.google.common.collect.Maps;
|
import com.xylink.config.SDKConfigMgr;
|
import com.xylink.model.LV;
|
import com.xylink.model.LiveVideo;
|
import com.xylink.model.Status;
|
import com.xylink.util.HttpUtil;
|
import com.xylink.util.Result;
|
import com.xylink.util.SignatureSample;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.lang3.StringUtils;
|
|
import java.io.IOException;
|
import java.util.List;
|
import java.util.Map;
|
|
@Slf4j
|
public class XylinkUtils {
|
|
/**
|
* LOCAL_RECORD(本地小鱼录像机录制), SERVER_RECORD(会议录制), LIVE_RECORD(直播录制),
|
* SERVER_RECORD_TRANSCODING(会议录制转码中,此状态下不能播放、下载视频文件,24小时内处理完成后才可以播放、下载)
|
*/
|
public static String VOD_METADATA_TYPE_1 = "LOCAL_RECORD";
|
public static String VOD_METADATA_TYPE_2 = "SERVER_RECORD";
|
public static String VOD_METADATA_TYPE_3 = "LIVE_RECORD";
|
public static String VOD_METADATA_TYPE_4 = "SERVER_RECORD_TRANSCODING";
|
|
/**
|
* JsonMapper工具类
|
*/
|
private static JsonMapper jsonMapper = new JsonMapper();
|
|
/**
|
* 签名类
|
*/
|
private static SignatureSample signatureSample = new SignatureSample();
|
|
/**
|
* 小鱼相关参数
|
*/
|
public static String token = "964edbc78dfd8caef97acca3a7068fb0603e3e6f5dc25023c5443aaae04b9914";
|
public static String enterpriseId = "9675f5cae97ca23503dd2fbc4c20ba089fecb59d";
|
|
/**
|
* 创建会议室相关地址
|
* @return String
|
*/
|
private static String getCreateMeetingUrl() {
|
return SDKConfigMgr.getServerHost() + "/api/rest/external/v2/create_meeting";
|
}
|
|
/**
|
* 视频链接相关地址
|
*/
|
private static String getPrefixUrl() {
|
return SDKConfigMgr.getServerHost() + "/api/rest/external/v1/";
|
}
|
|
/**
|
* 视频地址
|
*/
|
private static String getVideoUrl() {
|
return SDKConfigMgr.getServerHost() + "/api/rest/external/v1/vods/page";
|
}
|
|
/**
|
* 小鱼设备直播地址
|
* @return
|
*/
|
private static String getxyLiveUrl() {
|
return SDKConfigMgr.getServerHost() + "/api/rest/external/v1/liveVideo2/enterprise/";
|
}
|
|
/**
|
* 会议直播地址
|
* @return
|
*/
|
private static String getLiveUrl() {
|
return SDKConfigMgr.getServerHost() + "/api/rest/external/v1/liveVideo3/enterprise/";
|
}
|
|
/**
|
* 获取签名后的POST请求地址
|
* @param surl 请求url
|
* @param jsonEntity 请求参数
|
* @return String
|
*/
|
private static String getPostUrl(String surl, String jsonEntity){
|
String signature = signatureSample.computeSignature(jsonEntity,"POST", token, surl);
|
return surl + "&signature=" + signature;
|
}
|
|
/**
|
* 获取签名后的Get请求地址
|
* @param surl 请求url
|
* @return String
|
*/
|
private static String getGetUrl(String surl){
|
String signature = signatureSample.computeSignature("","GET", token, surl);
|
return surl + "&signature=" + signature;
|
}
|
|
/**
|
* 获取签名后的DELETE请求地址
|
*
|
* @param surl
|
* @return
|
* @throws Exception
|
*/
|
private static String getDeleteUrl(String surl){
|
String signature = signatureSample.computeSignature("","DELETE",token,surl);
|
return surl + "&signature=" + signature;
|
}
|
|
/**
|
* 创建云会议
|
* @param meetingName 会议名称
|
* @param controlPassword 主持密码
|
* @param password 入会密码
|
* @return JSONObject
|
*/
|
public static XylinkMeetDTO createMeet(String meetingName, String controlPassword, String password) {
|
try{
|
// 云会议室参数
|
Map<String, Object> param = Maps.newHashMap();
|
param.put("meetingName", meetingName);
|
if (StringUtils.isNotEmpty(password)){
|
param.put("password", password);
|
}
|
if (StringUtils.isNotEmpty(controlPassword)){
|
param.put("controlPassword", controlPassword);
|
}
|
// 云会议室扩展配置
|
Map<String, Object> config = Maps.newHashMap();
|
config.put("autoRecord", true);
|
config.put("onlyRecordMainImage", false);
|
config.put("recordAddDeviceName", true);
|
param.put("configs", config);
|
String jsonStr = jsonMapper.toJson(param);
|
String surl = getCreateMeetingUrl() + "?enterpriseId=" + enterpriseId;
|
String url = getPostUrl(surl, jsonStr);
|
String result = HttpClientUtils.httpPostRaw(url, jsonStr, null , null);
|
XylinkMeetDTO xylinkMeetDTO = JSONObject.parseObject(result, XylinkMeetDTO.class);
|
return xylinkMeetDTO;
|
}catch (Exception e){
|
log.error("utils方法[XylinkUtils.createMeet]调用异常:"+e, e);
|
throw new MethodException("XylinkUtils.createMeet", e);
|
}
|
}
|
|
/**
|
* 根据视频会议号获取视频信息
|
* @param meetingRoomNum
|
* @return
|
* @throws Exception
|
*/
|
public static List<XylinkVedioDTO> getMeetingVideos(String meetingRoomNum) {
|
List<XylinkVedioDTO> xylinkVedioDTOList = null;
|
try{
|
String surl = getPrefixUrl() + "meetingroom/" + meetingRoomNum + "/vods?enterpriseId=" + enterpriseId;
|
String url = getGetUrl(surl);
|
String jsonResult = HttpClientUtils.httpGet(url, null, null);
|
JSONArray jsonArray = JSONArray.parseArray(jsonResult);
|
log.info("save saveVideo jsonArray {}", JSON.toJSONString(jsonArray));
|
if (CollectionUtils.isNotEmpty(jsonArray)) {
|
xylinkVedioDTOList = JSONObject.parseArray(jsonArray.toJSONString(), XylinkVedioDTO.class);
|
for (XylinkVedioDTO xylinkVedioDTO: xylinkVedioDTOList) {
|
xylinkVedioDTO.setDownloadUrl(getDownloadUrl(xylinkVedioDTO.getVodId()));
|
xylinkVedioDTO.setPlayUrl(getPlayUrl(xylinkVedioDTO.getVodId()));
|
}
|
}
|
} catch (Exception e){
|
log.error("utils方法[XylinkUtils.getMeetingVideos]调用异常:"+e, e);
|
}
|
return xylinkVedioDTOList;
|
}
|
|
/**
|
* 获取视频会议下载URL
|
* @param vodId 视频编号
|
* @return String
|
*/
|
public static String getDownloadUrl(String vodId) {
|
try{
|
String surl = getPrefixUrl() + "vods/"+ vodId+ "/getdownloadurl?enterpriseId=" + enterpriseId;
|
String url = getGetUrl(surl);
|
String jsonResult = HttpClientUtils.httpGet(url, null, null);
|
JSONObject data = JSONObject.parseObject(jsonResult);
|
String result = data.getString("downloadUrl");
|
return result;
|
}catch (Exception e){
|
log.error("utils方法[XylinkUtils.getDownloadUrl]调用异常:"+e, e);
|
throw new MethodException("XylinkUtils.getDownloadUrl", e);
|
}
|
}
|
|
/**
|
* 获取视频会议播放URL
|
* @param vodId 视频编号
|
* @return String
|
*/
|
public static String getPlayUrl(String vodId) {
|
try{
|
String surl = getPrefixUrl() + "vods/"+ vodId+ "/sharedInfo?enterpriseId=" + enterpriseId;
|
String url = getGetUrl(surl);
|
String jsonResult = HttpClientUtils.httpGet(url, null, null);
|
JSONObject data = JSONObject.parseObject(jsonResult);
|
String result = data.getString("playUrl");
|
return result;
|
}catch (Exception e){
|
log.error("utils方法[XylinkUtils.getPlayUrl]调用异常:"+e, e);
|
throw new MethodException("XylinkUtils.getPlayUrl", e);
|
}
|
}
|
|
/**
|
* 根据视频号删除会议视频
|
*
|
* @param vodId
|
* @return
|
* @throws Exception
|
*/
|
public static String deleteVideo(String vodId) throws Exception{
|
try{
|
String surl = getPrefixUrl() + "vods/"+ vodId+ "?enterpriseId=" + enterpriseId;
|
String url = getDeleteUrl(surl);
|
String jsonResult = HttpClientUtils.httpDelete(url, null, null);
|
return jsonResult;
|
} catch (Exception e){
|
throw new Exception(e.getMessage(), e);
|
}
|
}
|
|
/**
|
* 分页查询企业某段时间的视频列表
|
* @param startTime 开始时间
|
* @param endTime 结束时间
|
* @param pageIndex 页码: 从0开始
|
* @param pageSize 每页查询数量:最大50
|
* @return
|
*/
|
public static String getEnterpriseVideos(long startTime, long endTime, int pageIndex, int pageSize) {
|
List<XylinkVedioDTO> xylinkVedioDTOList = null;
|
try{
|
String surl = getVideoUrl() + "?enterpriseId=" + enterpriseId +
|
"&startTime=" + startTime + "&endTime=" + endTime +
|
"&pageIndex=" + pageIndex + "&pageSize=" + pageSize;
|
String url = getGetUrl(surl);
|
String jsonResult = HttpClientUtils.httpGet(url, null, null);
|
return jsonResult;
|
} catch (Exception e){
|
log.error("utils方法[XylinkUtils.getEnterpriseVideos]调用异常:"+e, e);
|
return null;
|
}
|
}
|
|
/**
|
* 创建自定义会议
|
*
|
* @param meetingName
|
* @return
|
* @throws Exception
|
*/
|
public static JSONObject customMeeting(String meetingName) throws Exception{
|
try{
|
Map<String, Object> param = Maps.newHashMap();
|
param.put("meetingName", meetingName);
|
param.put("controlPassword", "12345678");
|
|
Map<String, Object> config = Maps.newHashMap();
|
config.put("autoRecord", false);
|
config.put("onlyRecordMainImage", false);
|
config.put("recordAddDeviceName", true);
|
param.put("configs", config);
|
JsonMapper jsonMapper = new JsonMapper();
|
String jsonStr = jsonMapper.toJson(param);
|
|
String surl = getCreateMeetingUrl() + "?enterpriseId=" + enterpriseId;
|
String url = getPostUrl(surl, jsonStr);
|
|
String result = HttpClientUtils.httpPostRaw(url, jsonStr, null , null);
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
return jsonObject;
|
}catch (Exception e){
|
throw new Exception(e.getMessage(), e);
|
}
|
}
|
|
/**
|
* 创建小鱼设备直播
|
*
|
* @param nemoNumber
|
* @param liveVideo
|
* @return
|
* @throws IOException
|
*/
|
public static LV newXyLiveVideo(String nemoNumber, LiveVideo liveVideo) throws IOException{
|
String surl = getxyLiveUrl() + enterpriseId + "/xiaoyunumber/" + nemoNumber + "/live?enterpriseId="+enterpriseId;
|
String jsonEntity = new ObjectMapper().writeValueAsString(liveVideo);
|
String signature = signatureSample.computeSignature(jsonEntity,"POST",token,surl);
|
surl += "&signature=" + signature;
|
Result result = HttpUtil.getResponse(surl,"POST", jsonEntity, LV.class);
|
return (LV)result.getData();
|
}
|
|
/**
|
* 开始/结束直播
|
* @param confNo
|
* @param confPwd
|
* @param liveId
|
* @param status
|
* @return
|
* @throws IOException
|
*/
|
public static Result controlLive(String confNo, String confPwd, String liveId, Status status)throws IOException{
|
String surl = getLiveUrl() + enterpriseId + "/conf/" + confNo + "/live/" + liveId + "/status"
|
+ "?enterpriseId="+enterpriseId + "&confPwd=" + confPwd;
|
String jsonEntity = new ObjectMapper().writeValueAsString(status);
|
String signature = signatureSample.computeSignature(jsonEntity,"PUT",token,surl);
|
surl += "&signature=" + signature;
|
return HttpUtil.getResponse(surl,"PUT", jsonEntity, null);
|
}
|
|
/**
|
* 删除小鱼设备直播
|
* @param nemoNumber
|
* @param liveId
|
* @return
|
* @throws IOException
|
*/
|
public static Result deleteXyLiveVideo(String nemoNumber,String liveId)throws IOException{
|
String surl = getxyLiveUrl() + enterpriseId + "/xiaoyunumber/" + nemoNumber + "/live/" +liveId
|
+ "?enterpriseId="+enterpriseId;
|
System.out.println(surl);
|
String signature = signatureSample.computeSignature("","DELETE",token,surl);
|
surl += "&signature=" + signature;
|
System.out.println(surl);
|
return HttpUtil.getResponse(surl,"DELETE", null, null);
|
}
|
|
/**
|
* 获取小鱼设备直播视频
|
* @param nemoNumber
|
* @param liveId
|
* @return
|
* @throws IOException
|
*/
|
public static Result<LV> getLiveVideo(String nemoNumber,String liveId) throws IOException{
|
String surl = getxyLiveUrl() + enterpriseId + "/xiaoyunumber/" + nemoNumber + "/live/" +liveId
|
+ "?enterpriseId="+enterpriseId;
|
String signature = signatureSample.computeSignature("","GET",token,surl);
|
surl += "&signature=" + signature;
|
System.out.println(surl);
|
return HttpUtil.getResponse(surl,"GET", null, LV.class);
|
}
|
}
|