LiveControllerApi.java 12.5 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.CommonConst;
import com.cnlive.shenhe.utils.CommonConstStates;
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;


/**
 * @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"));
        //直播频道id
        String channelId = json.getString("channelId");
        //直播频道id
        String liveType = json.getString("liveType");
        //rtmp直播流
        String mp4Url = json.getString("mp4Url");
        //m3u8直播流
        String hlsUrl = json.getString("hlsUrl");
        //spid
        Integer spId = Integer.parseInt(json.getString("spId"));
        //回调地址
        String callback = json.getString("callback");


        //优先级
        Integer isHot = 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 timestampStart = null;
        if (CommonUtils.isNotEmpty(startTime)) {
            timestampStart = new Timestamp(Long.valueOf(startTime));
        }
        //结束时间
        String endTime = json.getString("endTime");
        Date timestampEnd = null;
        if (CommonUtils.isNotEmpty(endTime)) {
            timestampEnd = new Timestamp(Long.valueOf(endTime));
        }

        //预计开始时间
        String preStartTime = json.getString("preStartTime");

        Date preTimestampStart = null;
        if (CommonUtils.isNotEmpty(preStartTime)) {
            preTimestampStart = new Timestamp(Long.valueOf(preStartTime));
        }
        //预计结束时间
        String preEndTime = json.getString("preEndTime");
        Date preTimestampEnd = null;
        if (CommonUtils.isNotEmpty(preEndTime)) {
            preTimestampEnd = new Timestamp(Long.valueOf(preEndTime));
        }

        ShyLive shylive1 = new ShyLive();
        //得到直播活动id去查询是否已有
        shylive1.setActivity_id(activityId);
        //查询一下 存在,更新 没有,插入
        List<ShyLive> listshyLive = liveService.findshyLive(shylive1);

        if (listshyLive.size() > 0) {
            ShyLive shyLive = listshyLive.get(0);
            //封装数据入库
            //设置spid
            shyLive.setSp_id(spId);
            //设置直播活动名称
            shyLive.setActivity_name(activityName);
            //设置直播活动状态
            shyLive.setActivity_status(activityStatus);
            shyLive.setPre_start_time(preTimestampStart);
            shyLive.setPre_end_time(preTimestampEnd);

            //直播活动状态,1:直播中,2:直播完成,3:待直播,0:直播撤销(手动),4:直播下线(强制)
            //发布直播
            if (activityStatus.equals(CommonConstStates.ZHIBO_DENGDAI)) {
                shyLive.setActivity_start_time(null);
                shyLive.setActivity_end_time(null);
                //是否是热点: 1:不是 ,2: 是
                shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANYES);
                //启动直播
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_ZHENGZAI)) {
                shyLive.setActivity_start_time(timestampStart);
                shyLive.setActivity_end_time(null);
                //是否是热点: 1:不是 ,2: 是
                shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANYES);
                //停止直播
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_JIESHU)) {
                shyLive.setActivity_start_time(timestampStart);
                shyLive.setActivity_end_time(timestampEnd);
                //回放地址
                shyLive.setPlayback_url(playbackUrl);
                //状态 0:未认领 1.已领未审,2:已审
                shyLive.setShenhe_state(CommonConst.RECEIVE_AUDIT);
                //直播完成后自动通过
                shyLive.setUpdater("自动通过");
                //是否是热点: 1:不是 ,2: 是
                shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
                //审核强制下线
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_XIAXIAN)) {
                shyLive.setActivity_start_time(timestampStart);
                shyLive.setActivity_end_time(timestampEnd);
                //回放地址
                shyLive.setPlayback_url(playbackUrl);
                //是否是热点: 1:不是 ,2: 是
                shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
            }
            //直播活动简介
            shyLive.setActivity_intro(activityIntro);
            shyLive.setLive_type(liveType);
            //m3u8直播流
            shyLive.setM3u8_url(hlsUrl);
            //rtmp直播流
            shyLive.setRtmp_url(mp4Url);
            //回调地址
            shyLive.setCallback(callback);
            //封面
            shyLive.setCover_img_url(coverImgUrl);
            //审核类型,1:免审,2:机审,3:人工审
            shyLive.setShenhe_type(CommonConst.AUDIT_TYPE_USER);
            //抽帧状态 1:不抽帧 2:待抽帧 3:抽帧中 4:抽帧完成 5:抽帧失败
            shyLive.setAvsample_state(1);
            //直播撤销
            if (activityStatus.equals(CommonConstStates.ZHIBO_CHEXIAO)) {
                //是否显示 0:不显示 1:显示
                shyLive.setIs_show(CommonConstStates.SHIFOU_XIANSHINO);
                //是否是热点: 1:不是 ,2: 是
                shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
            } else {
                shyLive.setIs_show(CommonConstStates.SHIFOU_XIANSHIYES);
            }
            //更新时间
            shyLive.setUpdated_at(CommonUtils.getCurrentTime());

            yorN = liveService.updateshyLive(shyLive);
        } else {
            //查了,没有,直接插入数据库
            //设置直播活动id
            shylive1.setActivity_id(activityId);
            //设置直播活动名称
            shylive1.setActivity_name(activityName);
            //设置直播活动状态
            shylive1.setActivity_status(activityStatus);
            //设置直播频道
            shylive1.setChannel_id(channelId);
            //设置spid
            shylive1.setSp_id(spId);
            //状态 0:未认领 1.已领未审,2:已审
            shylive1.setShenhe_state(CommonConst.RECEIVE_BEFORE);
            //是否是热点: 1:不是 ,2: 是
            shylive1.setIs_hot(CommonConstStates.SHIFOU_REDIANYES);
            shylive1.setPre_start_time(preTimestampStart);
            shylive1.setPre_end_time(preTimestampEnd);
            //发布直播
            if (activityStatus.equals(CommonConstStates.ZHIBO_DENGDAI)) {
                shylive1.setActivity_start_time(null);
                shylive1.setActivity_end_time(null);
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_ZHENGZAI)) {
                //启动直播
                shylive1.setActivity_start_time(timestampStart);
                shylive1.setActivity_end_time(null);
                //停止直播
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_JIESHU)) {
                shylive1.setActivity_start_time(timestampStart);
                shylive1.setActivity_end_time(timestampEnd);
                //回放地址
                shylive1.setPlayback_url(playbackUrl);
                //状态 0:未认领 1.已领未审,2:已审
                shylive1.setShenhe_state(CommonConst.RECEIVE_AUDIT);
                //直播完成后自动通过
                shylive1.setUpdater("自动通过");
                //是否是热点: 1:不是 ,2: 是
                shylive1.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
                //审核强制下线
            } else if (activityStatus.equals(CommonConstStates.ZHIBO_XIAXIAN)) {
                shylive1.setActivity_start_time(timestampStart);
                shylive1.setActivity_end_time(timestampEnd);
                //回放地址
                shylive1.setPlayback_url(playbackUrl);
                //状态 0:未认领 1.已领未审,2:已审
                shylive1.setShenhe_state(CommonConst.RECEIVE_AUDIT);
                //是否是热点: 1:不是 ,2: 是
                shylive1.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
            }
            //直播活动简介
            shylive1.setActivity_intro(activityIntro);
            shylive1.setLive_type(liveType);
            //m3u8直播流
            shylive1.setM3u8_url(hlsUrl);
            //rtmp直播流
            shylive1.setRtmp_url(mp4Url);
            //回调地址
            shylive1.setCallback(callback);
            //封面
            shylive1.setCover_img_url(coverImgUrl);
            //审核类型,1:免审,2:机审,3:人工审
            shylive1.setShenhe_type(CommonConst.AUDIT_TYPE_USER);
            //抽帧状态 1:不抽帧 2:待抽帧 3:抽帧中 4:抽帧完成 5:抽帧失败
            shylive1.setAvsample_state(1);
            //直播撤销
            if (activityStatus.equals(CommonConstStates.ZHIBO_CHEXIAO)) {
                //是否显示 0:不显示 1:显示
                shylive1.setIs_show(CommonConstStates.SHIFOU_XIANSHINO);
                //是否是热点: 1:不是 ,2: 是
                shylive1.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
            } else {
                shylive1.setIs_show(CommonConstStates.SHIFOU_XIANSHIYES);
            }

            //创建时间
            shylive1.setCreated_at(CommonUtils.getCurrentTime());
            //更新时间
            shylive1.setUpdated_at(CommonUtils.getCurrentTime());
            yorN = liveService.impotVideo(shylive1);
        }

        if (yorN) {
            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);
                }
                if ("REVIEW".equals(riskLevel)) {
                }
            } else {
            }
        }
    }

}