Commit ecb6f988bb8395f33ebba80ea69a28a9d681acc9

Authored by 周伟鹏
1 parent b002079b

添加抽帧部分信息

src/main/java/com/cnlive/shenhe/api/AvsampleCallBackControllerApi.java 0 → 100644
  1 +package com.cnlive.shenhe.api;
  2 +
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.cnlive.shenhe.entity.ShyVideos;
  5 +import com.cnlive.shenhe.serviceImpl.VideosServiceImpl;
  6 +import com.cnlive.shenhe.utils.CommonConst;
  7 +import com.cnlive.shenhe.utils.CommonUtils;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.stereotype.Controller;
  12 +import org.springframework.web.bind.annotation.PostMapping;
  13 +import org.springframework.web.bind.annotation.RequestBody;
  14 +import org.springframework.web.bind.annotation.RequestMapping;
  15 +
  16 +import java.util.List;
  17 +
  18 +/**
  19 + * @Auther: 周伟鹏
  20 + * @Date: 2018/12/21 13:43
  21 + * @Description:抽帧回调接口
  22 + */
  23 +@Controller
  24 +@RequestMapping("/api/avsample")
  25 +public class AvsampleCallBackControllerApi {
  26 +
  27 + private static Logger logger = LoggerFactory.getLogger(AvsampleCallBackControllerApi.class);
  28 +
  29 + @Autowired
  30 + VideosServiceImpl videosService;
  31 +
  32 + /**
  33 + * 接收抽帧结果
  34 + * @param json
  35 + */
  36 + @PostMapping("/callback")
  37 + public void callback(@RequestBody JSONObject json) {
  38 + logger.info("抽帧回调请求。。。。json=="+json.toJSONString());
  39 + String taskId = json.getString("taskId");
  40 + if(CommonUtils.isNotEmpty(taskId)){
  41 + ShyVideos shyVideo = new ShyVideos();
  42 + shyVideo.setTask_id(taskId);
  43 + List<ShyVideos> shyVideosList = videosService.findshyVideo(shyVideo);
  44 + if(!shyVideosList.isEmpty()){
  45 + ShyVideos video = shyVideosList.get(0);
  46 + Integer code = json.getInteger("code");
  47 + if(code==3){
  48 + video.setAvsample(CommonConst.AVSAMPLE_SUCCESS);
  49 + video.setAvsample_imgs(json.getJSONArray("images").toJSONString());
  50 + }else{
  51 + video.setAvsample(CommonConst.AVSAMPLE_FAIL);
  52 + }
  53 + video.setAvsample_msg(json.toJSONString());
  54 + videosService.updateshyVideos(video);
  55 + }
  56 +
  57 + }
  58 + }
  59 +}
src/main/java/com/cnlive/shenhe/api/VideosControllerApi.java
1 package com.cnlive.shenhe.api; 1 package com.cnlive.shenhe.api;
2 2
  3 +import com.alibaba.fastjson.JSON;
3 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
4 import com.cnlive.shenhe.bean.ErrorEnum; 5 import com.cnlive.shenhe.bean.ErrorEnum;
5 import com.cnlive.shenhe.bean.ResponseBean; 6 import com.cnlive.shenhe.bean.ResponseBean;
6 import com.cnlive.shenhe.entity.ShyVideos; 7 import com.cnlive.shenhe.entity.ShyVideos;
7 import com.cnlive.shenhe.serviceImpl.UsersServiceImpl; 8 import com.cnlive.shenhe.serviceImpl.UsersServiceImpl;
8 import com.cnlive.shenhe.serviceImpl.VideosServiceImpl; 9 import com.cnlive.shenhe.serviceImpl.VideosServiceImpl;
9 -import com.cnlive.shenhe.utils.AuditPass;  
10 -import com.cnlive.shenhe.utils.CommonConst;  
11 -import com.cnlive.shenhe.utils.CommonUtils; 10 +import com.cnlive.shenhe.utils.*;
  11 +import com.sun.org.apache.bcel.internal.generic.NEW;
12 import org.slf4j.Logger; 12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory; 13 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Value;
15 import org.springframework.stereotype.Controller; 16 import org.springframework.stereotype.Controller;
16 import org.springframework.web.bind.annotation.PostMapping; 17 import org.springframework.web.bind.annotation.PostMapping;
17 import org.springframework.web.bind.annotation.RequestMapping; 18 import org.springframework.web.bind.annotation.RequestMapping;
18 import org.springframework.web.bind.annotation.ResponseBody; 19 import org.springframework.web.bind.annotation.ResponseBody;
19 20
  21 +import java.util.Date;
  22 +import java.util.HashMap;
20 import java.util.List; 23 import java.util.List;
  24 +import java.util.Map;
21 25
22 /** 26 /**
23 * @Auther: chenhao 27 * @Auther: chenhao
@@ -35,6 +39,25 @@ public class VideosControllerApi { @@ -35,6 +39,25 @@ public class VideosControllerApi {
35 @Autowired 39 @Autowired
36 UsersServiceImpl usersService; 40 UsersServiceImpl usersService;
37 41
  42 + @Value("${avsmple_appkey}")
  43 + String appkey;
  44 +
  45 + @Value("${avsmple_url}")
  46 + String url;
  47 +
  48 + @Value("${avsmple_callback}")
  49 + String callback;
  50 +
  51 + @Value("${qn_bucket}")
  52 + String qn_bucket;
  53 +
  54 + @Value("${ks_bucket}")
  55 + String ks_bucket;
  56 +
  57 + @Value("${desdir}")
  58 + String desdir;
  59 +
  60 +
38 @PostMapping("/import") 61 @PostMapping("/import")
39 @ResponseBody 62 @ResponseBody
40 public ResponseBean impotVideo(String param) { 63 public ResponseBean impotVideo(String param) {
@@ -64,8 +87,10 @@ public class VideosControllerApi { @@ -64,8 +87,10 @@ public class VideosControllerApi {
64 shyVideos.setVideo_upload_time(json.getDate(" uploadTime")); 87 shyVideos.setVideo_upload_time(json.getDate(" uploadTime"));
65 shyVideos.setVideo_priority(json.getString("priority")); 88 shyVideos.setVideo_priority(json.getString("priority"));
66 shyVideos.setCallback(json.getString("callback")); 89 shyVideos.setCallback(json.getString("callback"));
67 - shyVideos.setSpid(Integer.parseInt(json.getString("spId"))); 90 + shyVideos.setSpid(json.getInteger("spId"));
68 shyVideos.setState(CommonConst.AUDIT_INTT); 91 shyVideos.setState(CommonConst.AUDIT_INTT);
  92 + shyVideos1.setBucket(json.getString("bucketName"));
  93 + shyVideos1.setPlat(json.getInteger("bucketType"));
69 boolean YorN = videosService.updateshyVideos(shyVideos); 94 boolean YorN = videosService.updateshyVideos(shyVideos);
70 if (YorN == true) { 95 if (YorN == true) {
71 return new ResponseBean(ErrorEnum.SUCCESS); 96 return new ResponseBean(ErrorEnum.SUCCESS);
@@ -88,8 +113,11 @@ public class VideosControllerApi { @@ -88,8 +113,11 @@ public class VideosControllerApi {
88 shyVideos1.setVideo_upload_time(json.getDate("uploadTime")); 113 shyVideos1.setVideo_upload_time(json.getDate("uploadTime"));
89 shyVideos1.setVideo_priority(json.getString("priority")); 114 shyVideos1.setVideo_priority(json.getString("priority"));
90 shyVideos1.setCallback(json.getString("callback")); 115 shyVideos1.setCallback(json.getString("callback"));
91 - shyVideos1.setSpid(Integer.parseInt(json.getString("spId"))); 116 + shyVideos1.setSpid(json.getInteger("spId"));
92 shyVideos1.setState(CommonConst.AUDIT_INTT); 117 shyVideos1.setState(CommonConst.AUDIT_INTT);
  118 + shyVideos1.setBucket(json.getString("bucketName"));
  119 + shyVideos1.setPlat(json.getInteger("bucketType"));
  120 +
93 boolean result = videosService.impotVideo(shyVideos1); 121 boolean result = videosService.impotVideo(shyVideos1);
94 if (result == true) { 122 if (result == true) {
95 return new ResponseBean(ErrorEnum.SUCCESS); 123 return new ResponseBean(ErrorEnum.SUCCESS);
@@ -97,4 +125,65 @@ public class VideosControllerApi { @@ -97,4 +125,65 @@ public class VideosControllerApi {
97 return new ResponseBean(ErrorEnum.ERROR); 125 return new ResponseBean(ErrorEnum.ERROR);
98 } 126 }
99 } 127 }
  128 +
  129 + /**
  130 + * 申请抽帧
  131 + * @param video
  132 + * @return
  133 + */
  134 + public ShyVideos avsample(ShyVideos video) {
  135 + try {
  136 + JSONObject params = new JSONObject();
  137 + String video_url = video.getVideo_url();
  138 + Integer plat = video.getPlat();
  139 + String bucket = video.getBucket();
  140 + Integer spid = video.getSpid();
  141 +
  142 + JSONObject attach = new JSONObject();
  143 + attach.put("num",24);
  144 + if (CommonConst.KS_PLAT == plat) {
  145 + //金山
  146 + params.put("plat", 0);
  147 + params.put("dstBucket",ks_bucket);
  148 + } else if (CommonConst.QINIU_PLAT == plat) {
  149 + //七牛
  150 + params.put("plat", 1);
  151 + params.put("dstBucket",qn_bucket);
  152 + }
  153 + String path = video_url.replace("//", "");
  154 + path = "/" + bucket + path.substring(path.indexOf("/"), path.length());
  155 + String dstDir = desdir+"/"+spid+"/"+CommonUtils.getCurrentDate("yyyy/MM/dd");
  156 + String formats = video_url.substring(video_url.indexOf(".")+1);
  157 + params.put("path",path);
  158 + params.put("dstDir",dstDir);
  159 + params.put("type","avsample");
  160 + params.put("formats",formats.toLowerCase());
  161 + params.put("spId",spid);
  162 + params.put("cbUrl",callback);
  163 + params.put("attach",attach);
  164 +
  165 + HashMap<String, String> dataMap = new HashMap<>();
  166 + dataMap.put("timestamp", new Date().getTime() / 1000 + "");
  167 + dataMap.put("params",params.toJSONString());
  168 + String httpUrl = OpenUtil.buildURL(url, dataMap, appkey);
  169 + logger.info("抽帧请求httpUrl===" + httpUrl);
  170 + Map<String, String> resultMap = HttpUtil.init().post(httpUrl);
  171 + JSONObject result = JSON.parseObject(resultMap.get("result"));
  172 + Integer code = result.getInteger("code");
  173 + if(code==0){
  174 + video.setAvsample(CommonConst.AVSAMPLE_ING);
  175 + }else{
  176 + video.setAvsample(CommonConst.AVSAMPLE_FAIL);
  177 + }
  178 + video.setTask_id(result.getString("taskId"));
  179 + video.setAvsample_msg(result.toJSONString());
  180 + } catch (Exception e) {
  181 + logger.error("请求抽帧失败,video_id:{}", video.getVideo_id(), e);
  182 + video.setAvsample(CommonConst.AVSAMPLE_FAIL);
  183 + }
  184 + return video;
  185 + }
  186 +
  187 +
  188 +
100 } 189 }
src/main/java/com/cnlive/shenhe/entity/ShyVideos.java
@@ -96,9 +96,9 @@ public class ShyVideos { @@ -96,9 +96,9 @@ public class ShyVideos {
96 private String receive_user_id; 96 private String receive_user_id;
97 97
98 /** 98 /**
99 - * 是否抽帧 99 + * 抽帧状态:0:未抽帧;1:抽帧中;2:抽帧成功;3:抽帧失败
100 */ 100 */
101 - private Boolean avsample; 101 + private Integer avsample;
102 102
103 /** 103 /**
104 * 抽帧图片地址 104 * 抽帧图片地址
@@ -111,11 +111,34 @@ public class ShyVideos { @@ -111,11 +111,34 @@ public class ShyVideos {
111 private String avsample_msg; 111 private String avsample_msg;
112 112
113 /** 113 /**
  114 + * 抽帧请求标记
  115 + */
  116 + private String task_id;
  117 +
  118 + /**
  119 + * 视频存储所在的bucket
  120 + */
  121 + private String bucket;
  122 +
  123 + /**
  124 + * 视频存放位置1:金山;2:七牛
  125 + */
  126 + private Integer plat;
  127 +
  128 + /**
114 * 审核员 129 * 审核员
115 */ 130 */
116 @Transient 131 @Transient
117 private String auditor; 132 private String auditor;
118 133
  134 + public String getAuditor() {
  135 + return auditor;
  136 + }
  137 +
  138 + public void setAuditor(String auditor) {
  139 + this.auditor = auditor;
  140 + }
  141 +
119 /** 142 /**
120 * @return id 143 * @return id
121 */ 144 */
@@ -471,20 +494,20 @@ public class ShyVideos { @@ -471,20 +494,20 @@ public class ShyVideos {
471 } 494 }
472 495
473 /** 496 /**
474 - * 获取是否抽帧 497 + * 获取抽帧状态:0:未抽帧;1:抽帧中;2:抽帧成功;3:抽帧失败
475 * 498 *
476 - * @return avsample - 是否抽帧 499 + * @return avsample - 抽帧状态:0:未抽帧;1:抽帧中;2:抽帧成功;3:抽帧失败
477 */ 500 */
478 - public Boolean getAvsample() { 501 + public Integer getAvsample() {
479 return avsample; 502 return avsample;
480 } 503 }
481 504
482 /** 505 /**
483 - * 设置是否抽帧 506 + * 设置抽帧状态:0:未抽帧;1:抽帧中;2:抽帧成功;3:抽帧失败
484 * 507 *
485 - * @param avsample 是否抽帧 508 + * @param avsample 抽帧状态:0:未抽帧;1:抽帧中;2:抽帧成功;3:抽帧失败
486 */ 509 */
487 - public void setAvsample(Boolean avsample) { 510 + public void setAvsample(Integer avsample) {
488 this.avsample = avsample; 511 this.avsample = avsample;
489 } 512 }
490 513
@@ -524,11 +547,57 @@ public class ShyVideos { @@ -524,11 +547,57 @@ public class ShyVideos {
524 this.avsample_msg = avsample_msg; 547 this.avsample_msg = avsample_msg;
525 } 548 }
526 549
527 - public String getAuditor() {  
528 - return auditor; 550 + /**
  551 + * 获取抽帧请求标记
  552 + *
  553 + * @return task_id - 抽帧请求标记
  554 + */
  555 + public String getTask_id() {
  556 + return task_id;
529 } 557 }
530 558
531 - public void setAuditor(String auditor) {  
532 - this.auditor = auditor; 559 + /**
  560 + * 设置抽帧请求标记
  561 + *
  562 + * @param task_id 抽帧请求标记
  563 + */
  564 + public void setTask_id(String task_id) {
  565 + this.task_id = task_id;
  566 + }
  567 +
  568 + /**
  569 + * 获取视频存储所在的bucket
  570 + *
  571 + * @return bucket - 视频存储所在的bucket
  572 + */
  573 + public String getBucket() {
  574 + return bucket;
  575 + }
  576 +
  577 + /**
  578 + * 设置视频存储所在的bucket
  579 + *
  580 + * @param bucket 视频存储所在的bucket
  581 + */
  582 + public void setBucket(String bucket) {
  583 + this.bucket = bucket;
  584 + }
  585 +
  586 + /**
  587 + * 获取视频存放位置1:金山;2:七牛
  588 + *
  589 + * @return plat - 视频存放位置1:金山;2:七牛
  590 + */
  591 + public Integer getPlat() {
  592 + return plat;
  593 + }
  594 +
  595 + /**
  596 + * 设置视频存放位置1:金山;2:七牛
  597 + *
  598 + * @param plat 视频存放位置1:金山;2:七牛
  599 + */
  600 + public void setPlat(Integer plat) {
  601 + this.plat = plat;
533 } 602 }
534 } 603 }
535 \ No newline at end of file 604 \ No newline at end of file
src/main/java/com/cnlive/shenhe/utils/CommonConst.java
@@ -55,4 +55,31 @@ public class CommonConst { @@ -55,4 +55,31 @@ public class CommonConst {
55 55
56 public static JSONObject BUSINESS = JSONObject.parseObject("{\"1\":\"点播业务\",\"2\":\"评论业务\"}"); 56 public static JSONObject BUSINESS = JSONObject.parseObject("{\"1\":\"点播业务\",\"2\":\"评论业务\"}");
57 57
  58 + /**
  59 + * 抽帧状态:未抽帧
  60 + */
  61 + public static Integer AVSAMPLE_INTIT = 0;
  62 + /**
  63 + * 抽帧状态:抽帧中
  64 + */
  65 + public static Integer AVSAMPLE_ING = 1;
  66 + /**
  67 + * 抽帧状态:抽帧完成
  68 + */
  69 + public static Integer AVSAMPLE_SUCCESS = 2;
  70 + /**
  71 + * 抽帧状态:抽帧失败
  72 + */
  73 + public static Integer AVSAMPLE_FAIL = 3;
  74 +
  75 + /**
  76 + * 金山标记
  77 + */
  78 + public static Integer KS_PLAT = 1;
  79 + /**
  80 + * 七牛标记
  81 + */
  82 + public static Integer QINIU_PLAT = 2;
  83 +
  84 +
58 } 85 }
src/main/resources/application.properties
@@ -36,5 +36,16 @@ url=http://mam.innerapi.cnlive.com/v1/inner/ShenHeInfo/shenheNotify @@ -36,5 +36,16 @@ url=http://mam.innerapi.cnlive.com/v1/inner/ShenHeInfo/shenheNotify
36 platformKey =AUDIT 36 platformKey =AUDIT
37 platformValue=10011438 37 platformValue=10011438
38 38
39 -#评论回调地址  
40 -commenturl=http://comment.cnlive.com/services/commentForHd/auditCallBack  
41 \ No newline at end of file 39 \ No newline at end of file
  40 +#抽帧常量
  41 +avsmple_appkey=6962df5e02d846f490d64f3a68ac89fc
  42 +avsmple_url=http://transcode.cnlive.com/api/request
  43 +avsmple_callback=http://test.shen.cnlive.com/api/avsample/callback
  44 +
  45 +#抽帧存放bucket和域名
  46 +qn_bucket=cnlivetest
  47 +qn_domain=http://test.qnvod.cnlive.com
  48 +ks_bucket=cnlive-test
  49 +ks_domain=http://test.wideo.cnlive.com
  50 +
  51 +#图片存放根路径
  52 +desdir=shen
src/main/resources/mapper/ShyVideosMapper.xml
@@ -26,8 +26,11 @@ @@ -26,8 +26,11 @@
26 <result column="updated_at" jdbcType="TIMESTAMP" property="updated_at" /> 26 <result column="updated_at" jdbcType="TIMESTAMP" property="updated_at" />
27 <result column="receive" jdbcType="BIT" property="receive" /> 27 <result column="receive" jdbcType="BIT" property="receive" />
28 <result column="receive_user_id" jdbcType="VARCHAR" property="receive_user_id" /> 28 <result column="receive_user_id" jdbcType="VARCHAR" property="receive_user_id" />
29 - <result column="avsample" jdbcType="BIT" property="avsample" /> 29 + <result column="avsample" jdbcType="INTEGER" property="avsample" />
30 <result column="avsample_imgs" jdbcType="VARCHAR" property="avsample_imgs" /> 30 <result column="avsample_imgs" jdbcType="VARCHAR" property="avsample_imgs" />
31 <result column="avsample_msg" jdbcType="VARCHAR" property="avsample_msg" /> 31 <result column="avsample_msg" jdbcType="VARCHAR" property="avsample_msg" />
  32 + <result column="task_id" jdbcType="VARCHAR" property="task_id" />
  33 + <result column="bucket" jdbcType="VARCHAR" property="bucket" />
  34 + <result column="plat" jdbcType="INTEGER" property="plat" />
32 </resultMap> 35 </resultMap>
33 </mapper> 36 </mapper>
34 \ No newline at end of file 37 \ No newline at end of file