LiveControllerApi.java 11.8 KB
package com.cnlive.shenhe.api;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cnlive.shenhe.entity.ShyLive;
import com.cnlive.shenhe.serviceImpl.LiveServiceImpl;
import com.cnlive.shenhe.utils.AntiFraudUtil;
import com.cnlive.shenhe.utils.CommonUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.UUID;


/**
 * @author Administrator
 */
@SuppressWarnings("unused")
@Controller
@RequestMapping("/api/live")
public class LiveControllerApi {
	private static Logger logger = LoggerFactory.getLogger(LiveControllerApi.class);

	@Autowired
	LiveServiceImpl liveService;
	 
	@PostMapping("/import")
	@ResponseBody
	public JSONObject impotVideo(String param) {
		JSONObject map = new JSONObject();
		JSONObject result = new JSONObject();
		//初始化一个请求数据库返回结果
		boolean YorN =true;

		logger.info("直播入库,param=====" + param);
        JSONObject json = JSONObject.parseObject(param);
        //获取所有参数
		//直播活动id
		String activityId = json.getString("activityId");
        String activityName = json.getString("activityName");//直播活动名称
        Integer activityStatus = Integer.parseInt(json.getString("activityStatus"));//直播活动状态
        String channelId = json.getString("channelId");//直播频道id
        String live_type = json.getString("liveType");//直播频道id
        String mp4Url = json.getString("mp4Url");//rtmp直播流
        String hlsUrl = json.getString("hlsUrl");//m3u8直播流
        Integer spId = Integer.parseInt(json.getString("spId"));//spid
        String callback = json.getString("callback");//回调地址
        Integer is_hot = Integer.parseInt(json.getString("priority"));//优先级
        String coverImgUrl = json.getString("coverImgUrl");//封面
        String activityIntro = json.getString("activityIntro");//活动描述
        String playbackUrl = json.getString("playbackUrl");//回放地址
        String startTime = json.getString("startTime");//开始时间
        Date timestamp_start =null;
        if (CommonUtils.isNotEmpty(startTime)) {
             timestamp_start = new Timestamp(Long.valueOf(startTime));
        }
        String endTime = json.getString("endTime");//结束时间
        Date timestamp_end =null;
        if (CommonUtils.isNotEmpty(endTime)) {
        	 timestamp_end = new Timestamp(Long.valueOf(endTime));
        }
        
        String pre_startTime = json.getString("preStartTime");//预计开始时间
        Date pre_timestamp_start =null;
        if (CommonUtils.isNotEmpty(pre_startTime)) {
        	pre_timestamp_start = new Timestamp(Long.valueOf(pre_startTime));
        }
        String pre_endTime = json.getString("preEndTime");//预计结束时间
        Date pre_timestamp_end =null;
        if (CommonUtils.isNotEmpty(pre_endTime)) {
        	pre_timestamp_end = new Timestamp(Long.valueOf(pre_endTime));
        }
        
        ShyLive shylive1 = new ShyLive();
        //得到直播活动id去查询是否已有
		shylive1.setActivity_id(activityId);
		//查询一下 存在,更新 没有,插入
        List<ShyLive> listshyLive = liveService.findshyLive(shylive1);
		
        if (listshyLive.size() > 0) {
        	ShyLive shyLive = listshyLive.get(0);
            //封装数据入库
        	shyLive.setSp_id(spId);//设置spid
        	shyLive.setActivity_name(activityName);//设置直播活动名称
        	shyLive.setActivity_status(activityStatus);//设置直播活动状态
        	shyLive.setPre_start_time(pre_timestamp_start);
        	shyLive.setPre_end_time(pre_timestamp_end);
        	if(activityStatus==3){//发布直播
        		shyLive.setActivity_start_time(null);
        		shyLive.setActivity_end_time(null);
        		shyLive.setIs_hot(2);//是否是热点: 1:不是 ,2: 是
        	}else if(activityStatus==1){//启动直播
        		shyLive.setActivity_start_time(timestamp_start);
        		shyLive.setActivity_end_time(null);
        		shyLive.setIs_hot(2);//是否是热点: 1:不是 ,2: 是
        	}else if(activityStatus==2){//停止直播
        		shyLive.setActivity_start_time(timestamp_start);
        		shyLive.setActivity_end_time(timestamp_end);
        		shyLive.setPlayback_url(playbackUrl);//回放地址
        		shyLive.setShenhe_state(2);//状态 0:未认领 1.已领未审,2:已审
        		shyLive.setUpdater("自动通过");;//直播完成后自动通过
        		shyLive.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}else if(activityStatus==4){//审核强制下线
        		shyLive.setActivity_start_time(timestamp_start);
        		shyLive.setActivity_end_time(timestamp_end);
        		shyLive.setPlayback_url(playbackUrl);//回放地址
        		shyLive.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}
        	shyLive.setActivity_intro(activityIntro);//直播活动简介
        	shyLive.setLive_type(live_type);
        	shyLive.setM3u8_url(hlsUrl);//m3u8直播流
        	shyLive.setRtmp_url(mp4Url);//rtmp直播流
        	shyLive.setCallback(callback);//回调地址
        	shyLive.setCover_img_url(coverImgUrl);//封面
        	shyLive.setShenhe_type(3);//审核类型,1:免审,2:机审,3:人工审
        	shyLive.setAvsample_state(1);//抽帧状态 1:不抽帧 2:待抽帧 3:抽帧中 4:抽帧完成 5:抽帧失败
        	if(activityStatus==0){//直播撤销
        		shyLive.setIs_show(0);//是否显示 0:不显示 1:显示
        		shyLive.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}else{
        		shyLive.setIs_show(1);
        	}
        	shyLive.setUpdated_at(CommonUtils.getCurrentTime());//更新时间
        	
        	YorN = liveService.updateshyLive(shyLive);
        }else{
        	//查了,没有,直接插入数据库
        	shylive1.setActivity_id(activityId);//设置直播活动id
        	shylive1.setActivity_name(activityName);//设置直播活动名称
        	shylive1.setActivity_status(activityStatus);//设置直播活动状态
        	shylive1.setChannel_id(channelId);//设置直播频道
        	shylive1.setSp_id(spId);//设置spid
        	shylive1.setShenhe_state(0); //状态 0:未认领 1.已领未审,2:已审
        	shylive1.setIs_hot(2);//是否是热点: 1:不是 ,2: 是
        	shylive1.setPre_start_time(pre_timestamp_start);
    		shylive1.setPre_end_time(pre_timestamp_end);
        	if(activityStatus==3){//发布直播
        		shylive1.setActivity_start_time(null);
        		shylive1.setActivity_end_time(null);
        	}else if(activityStatus==1){//启动直播
        		shylive1.setActivity_start_time(timestamp_start);
        		shylive1.setActivity_end_time(null);
        	}else if(activityStatus==2){//停止直播
        		shylive1.setActivity_start_time(timestamp_start);
        		shylive1.setActivity_end_time(timestamp_end);
        		shylive1.setPlayback_url(playbackUrl);//回放地址
        		shylive1.setShenhe_state(2); //状态 0:未认领 1.已领未审,2:已审
        		shylive1.setUpdater("自动通过");;//直播完成后自动通过
        		shylive1.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}else if(activityStatus==4){//审核强制下线
        		shylive1.setActivity_start_time(timestamp_start);
        		shylive1.setActivity_end_time(timestamp_end);
        		shylive1.setPlayback_url(playbackUrl);//回放地址
        		shylive1.setShenhe_state(2); //状态 0:未认领 1.已领未审,2:已审
        		shylive1.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}
        	shylive1.setActivity_intro(activityIntro);//直播活动简介
        	shylive1.setLive_type(live_type);
        	shylive1.setM3u8_url(hlsUrl);//m3u8直播流
        	shylive1.setRtmp_url(mp4Url);//rtmp直播流
        	shylive1.setCallback(callback);//回调地址
        	shylive1.setCover_img_url(coverImgUrl);//封面
        	shylive1.setShenhe_type(3);//审核类型,1:免审,2:机审,3:人工审
        	shylive1.setAvsample_state(1);//抽帧状态 1:不抽帧 2:待抽帧 3:抽帧中 4:抽帧完成 5:抽帧失败
        	if(activityStatus==0){//直播撤销
        		shylive1.setIs_show(0);//是否显示 0:不显示 1:显示
        		shylive1.setIs_hot(1);//是否是热点: 1:不是 ,2: 是
        	}else{
        		shylive1.setIs_show(1);
        	}
        	
        	shylive1.setCreated_at(CommonUtils.getCurrentTime());//创建时间
        	shylive1.setUpdated_at(CommonUtils.getCurrentTime());//更新时间
        	
        	YorN = liveService.impotVideo(shylive1);
        }
		
        if (YorN == true) {
        	result.put("errorCode", "0");
     		result.put("errorMessage", "直播审核请求收到成功");
     		map.put("statusCode", "200");
    		map.put("result", result);
         } else {
        	result.put("errorCode", "-1");
      		result.put("errorMessage", "直播审核入库失败");
      		map.put("statusCode", "300");
     		map.put("result", result);
         }
         return map;
	}
	 
	 
    @RequestMapping(value = "callbackLiveResult", method = RequestMethod.POST)
    @ResponseBody
    public void getFilterVideoResult(@RequestBody String json) {
        logger.info("数美视频过滤回调,json:{}", json);
        if (StringUtils.isNotEmpty(json)) {
            JSONObject jsonObj = JSON.parseObject(json);
            JSONObject resultObj = jsonObj.getJSONObject("result");
            Integer code = resultObj.getInteger("code");
            if (code != null && code == 1100) {
                String riskLevel = resultObj.getString("riskLevel");
                if ("PASS".equals(riskLevel)) {

                }
                if ("REJECT".equals(riskLevel)) {
                	JSONObject detail = resultObj.getJSONObject("detail");
                	logger.info("数美视频回调--REJECT,detail:{}", detail);
//                    resultObj.put("desc",
//                            String.format("(%s-%s)", detail.getString("description"), detail.getString("matchedItem")));
                }

                if ("REVIEW".equals(riskLevel)) {
                }
            }else{
            	//数美请求结果code为失败状态
//            	jsonObj.put("type", "REJECT");
//            	jsonObj.put("desc","code:"+code+",message:"+resultObj.getString("message") );
            }
        }
    }
    
    /**
     * 测试视频流
     * @param videoStream
     */
    @RequestMapping(value="ceshiVideo")
    @ResponseBody
    public void ceshiVideo(String videoStream){
    	//调用数美接口
    	JSONObject result =  AntiFraudUtil.filterVideoStream(videoStream, UUID.randomUUID().toString(), "测试流的名称", "");
    	logger.info("code="+result.getString("code"));
    	logger.info("requestId="+result.getString("requestId"));
    	logger.error("直播流开始测试,result:{}", result);
    }
    
    /**
     * 测试视频流
     * @param
     */
    @RequestMapping(value="ceshiFinishVideo")
    @ResponseBody
    public void ceshiFinishVideo(String url,String requestId){
    	//调用数美接口
    	JSONObject result =  AntiFraudUtil.finishVideoStream(url,requestId);
    	logger.info("code="+result.getString("code"));
    	logger.info("requestId="+result.getString("requestId"));
    	logger.error("直播流结束测试,result:{}", result);
    }
    
    /**
     * 测试视频流
     * @param
     */
    @RequestMapping(value="queryVideo")
    @ResponseBody
    public void queryVideo(){
    	//调用数美接口
    	JSONObject result =  AntiFraudUtil.queryVideoStreamResult();
    	logger.info("code="+result.getString("code"));
    	logger.info("requestId="+result.getString("requestId"));
    	logger.error("直播流查询,result:{}", result);
    }
    
    
}