ReBuildVideoSceneReceiver.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package com.fdkankan.modeling.message;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fdkankan.common.constant.ConstantFilePath;
  5. import com.fdkankan.common.util.FileUtils;
  6. import com.fdkankan.common.util.UploadToOssUtil;
  7. import com.fdkankan.scene.entity.SceneProEditEntity;
  8. import com.fdkankan.scene.entity.SceneProEntity;
  9. import com.fdkankan.scene.entity.VideoSceneProgressEntity;
  10. import com.fdkankan.scene.service.IRebuildVideoProgressService;
  11. import com.fdkankan.scene.service.ISceneProEditService;
  12. import com.fdkankan.scene.service.ISceneProService;
  13. import com.fdkankan.scene.util.ComputerUtil;
  14. import com.fdkankan.scene.util.CreateObjUtil;
  15. import lombok.extern.log4j.Log4j2;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.amqp.rabbit.annotation.RabbitListener;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import java.io.File;
  21. import java.io.PrintWriter;
  22. import java.io.StringWriter;
  23. import java.util.Date;
  24. import java.util.HashMap;
  25. import java.util.Map;
  26. @Log4j2
  27. public class ReBuildVideoSceneReceiver {
  28. @Autowired
  29. private ISceneProService sceneProService;
  30. @Autowired
  31. private ISceneProEditService sceneProEditService;
  32. @Autowired
  33. private IRebuildVideoProgressService rebuildVideoProgressService;
  34. @Autowired
  35. private UploadToOssUtil uploadToOssUtil;
  36. @Value("${rabbitmq.queue.video}")
  37. private String queue;
  38. @RabbitListener(queues = "${rabbitmq.queue.video}", containerFactory = "rabbitListenerContainerFactory")
  39. public void processvideo(String content) {
  40. log.info("接收处理队列当中" + queue + "的消息: " + content);
  41. rebuildVideo(content);
  42. }
  43. private void rebuildVideo(String content){
  44. String projectNum = null;
  45. String panId = null;
  46. String path = null;
  47. SceneProEntity scene = null;
  48. try {
  49. if(content == null||content.trim().equals("")){
  50. return;
  51. }
  52. String[] strs = content.split(":;");
  53. projectNum = strs[0];
  54. panId = strs[1];
  55. VideoSceneProgressEntity videoSceneProgressEntity = rebuildVideoProgressService.findrebuildVideoProgressDetail(projectNum,panId);
  56. videoSceneProgressEntity.setRebuildStartTime(new Date());
  57. videoSceneProgressEntity.setRebuildResult(3);
  58. rebuildVideoProgressService.update(videoSceneProgressEntity);
  59. log.info("开始计算 : 进度列表:" + videoSceneProgressEntity);
  60. String splitType = "SPLIT_V13";
  61. String skyboxType = "SKYBOX_V5";
  62. Map<String,String> map = new HashMap<>();
  63. //从云端拉取capture文件
  64. //目前只支持八目相机
  65. //休眠1秒,否则可能获取不到场景资源
  66. Thread.sleep(1000);
  67. scene = sceneProService.findBySceneNum(projectNum);
  68. if (scene == null) {
  69. log.info(projectNum + ":场景不存在");
  70. return;
  71. }
  72. String filePath = videoSceneProgressEntity.getDataSource() + "_rv";
  73. File targetFile = new File(filePath);
  74. if(!targetFile.getParentFile().exists()){
  75. targetFile.getParentFile().mkdirs();
  76. }
  77. String fileId = videoSceneProgressEntity.getDataSource().replace(ConstantFilePath.BUILD_MODEL_PATH, "") ;
  78. log.info("fileId : " + fileId);
  79. //下载capture
  80. CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX + fileId + File.separator,
  81. ConstantFilePath.BUILD_MODEL_PATH + fileId + "_rv" + File.separator + "capture");
  82. path = ConstantFilePath.BUILD_MODEL_PATH + fileId + "_rv" + File.separator ;
  83. log.info("path :" + path);
  84. ComputerUtil.createJson(path, splitType, skyboxType, null, projectNum, path);
  85. //创建文件 Extras 供算法不用
  86. log.info("开始生成 Extras 文件");
  87. ComputerUtil.createExtras(videoSceneProgressEntity,path);
  88. log.info("开始生成 Extras 文件结束");
  89. //计算模型并返回需要上传oss的文件集合
  90. map = ComputerUtil.computerRebuildVideo(projectNum, path);
  91. log.info("上传内容 ===== + " + map);
  92. uploadToOssUtil.uploadMulFiles(map);
  93. log.info("结束计算 =====");
  94. Map map2 = new HashMap();
  95. JSONArray uploadarray = null;
  96. JSONArray hdrArray = null;
  97. JSONObject fileJson = null;
  98. String fileName = "";
  99. //读取videos_hdr_param.json, 保存点位视频的value
  100. String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
  101. String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
  102. String strsceneInfos = FileUtils.readFile(ConstantFilePath.SCENE_PATH + "data/data" + projectNum + File.separator + "scene.json");
  103. JSONObject scenejson = new JSONObject();
  104. log.info("strsceneInfos =====" + strsceneInfos);
  105. if(strsceneInfos!=null){
  106. scenejson = JSONObject.parseObject(strsceneInfos);
  107. log.info("scenejson =====" + scenejson);
  108. }
  109. JSONObject videoJsonNew = new JSONObject();
  110. JSONArray dataarray = new JSONArray();
  111. SceneProEntity sceneProEntity = sceneProService.findBySceneNum(projectNum);
  112. //获取 videos
  113. if(StringUtils.isNotEmpty(sceneProEntity.getVideos())){
  114. JSONObject videosjson = JSONObject.parseObject(sceneProEntity.getVideos());
  115. log.info("videosjson =====" + videosjson);
  116. if (videosjson.containsKey("data")) {
  117. JSONArray dataArray = new JSONArray();
  118. dataArray = (JSONArray) videosjson.get("data");
  119. JSONObject uploadJson = null;
  120. if(uploadData!=null) {
  121. uploadJson = JSONObject.parseObject(uploadData);
  122. uploadarray = uploadJson.getJSONArray("upload");
  123. log.info("uploadarray =====" + uploadarray);
  124. }
  125. JSONObject hdrObject = new JSONObject();
  126. for(int i = 0, len = uploadarray.size(); i < len; i++) {
  127. fileJson = uploadarray.getJSONObject(i);
  128. fileName = fileJson.getString("file");
  129. if (fileJson.getIntValue("clazz") == 20 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")) {
  130. String id =fileName.substring( 0, fileName.lastIndexOf(".")).replace("videos/", "");
  131. log.info("id :" + id);
  132. //生成objet
  133. if(StringUtils.isNotEmpty(videosHdr)){
  134. hdrArray = JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
  135. log.info("hdrArray :" + hdrArray);
  136. }
  137. if(hdrArray != null){
  138. for(int z = 0, lenq = hdrArray.size(); z< lenq; z++) {
  139. JSONObject obj = (JSONObject) hdrArray.get(z);
  140. String name = (String) obj.get("name");
  141. if(name.equals(id)){
  142. String fov = obj.get("fov").toString();
  143. String name1 = obj.get("name").toString();
  144. String value = obj.get("value").toString();
  145. hdrObject.put("blend_fov",String.valueOf(fov));
  146. hdrObject.put("id",name1);
  147. hdrObject.put("value",String.valueOf(value));
  148. log.info("hdrObject :" + hdrObject);
  149. dataarray.add(hdrObject);
  150. }
  151. }
  152. }
  153. log.info("dataArray 2 =====" + dataArray);
  154. for(int x = 0; x < dataArray.size(); x++) {
  155. JSONObject obj = (JSONObject) dataArray.get(x);
  156. String id2 = (String) obj.get("id");
  157. if(!id2.equals(id)){
  158. dataarray.add(obj);
  159. log.info("data obj =====" + obj);
  160. }
  161. }
  162. }
  163. }
  164. }
  165. log.info("dataarray =====" + dataarray);
  166. videoJsonNew.put("data",dataarray);
  167. videoJsonNew.put("upPath",videosjson.get("upPath"));
  168. videoJsonNew.put("version",videosjson.get("version"));
  169. }
  170. map2.put("videos",videoJsonNew.toJSONString());
  171. long start = System.currentTimeMillis();
  172. long computeTime = (System.currentTimeMillis() - start) / 1000;
  173. sceneProService.updateTime2(projectNum, videoJsonNew.toJSONString(), computeTime);
  174. Integer imagesVersion = 50;
  175. if(strsceneInfos!=null){
  176. scenejson = JSONObject.parseObject(strsceneInfos);
  177. if(scenejson.containsKey("imagesVersion")){
  178. log.error("imagesVersion ============" + imagesVersion);
  179. imagesVersion = (Integer) scenejson.get("imagesVersion");
  180. imagesVersion = imagesVersion + 50;
  181. // map2.put("imagesVersion", imagesVersion + 50);
  182. }
  183. log.error("imagesVersion2 ============" + imagesVersion);
  184. map2.put("imagesVersion", imagesVersion);
  185. log.error("map2 ============" + map2);
  186. FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + projectNum + File.separator + "scene.json", map2);
  187. }else{
  188. log.error("更新 scene.json 文件失败");
  189. }
  190. SceneProEditEntity sceneProEditEntity = sceneProEditService.findByProId(sceneProEntity.getId());
  191. sceneProEditEntity.setImagesVersion(imagesVersion);
  192. // sceneProEditEntity.setFloorEditVer(sceneProEditEntity.getFloorEditVer() + 1);
  193. // sceneProEditEntity.setFloorPublishVer(sceneProEditEntity.getFloorPublishVer() + 1);
  194. sceneProEditService.update(sceneProEditEntity);
  195. rebuildVideoProgressService.updateProgress(projectNum, panId,1);
  196. }catch(Exception e){
  197. log.error("视频失败"+projectNum);
  198. rebuildVideoProgressService.updateProgress(projectNum, panId,0);
  199. e.printStackTrace();
  200. StringWriter trace=new StringWriter();
  201. e.printStackTrace(new PrintWriter(trace));
  202. log.error(trace.toString());
  203. }finally {
  204. try{
  205. scene = sceneProService.findBySceneNum(projectNum);
  206. if(scene != null){
  207. JSONObject statusJson = new JSONObject();
  208. //临时将-2改成1,app还没完全更新
  209. statusJson.put("status", scene.getStatus() == -2? 1 : scene.getStatus());
  210. statusJson.put("webSite", scene.getWebSite());
  211. statusJson.put("sceneNum", scene.getNum());
  212. statusJson.put("thumb", scene.getThumb());
  213. statusJson.put("payStatus", scene.getPayStatus());
  214. FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json", statusJson.toString());
  215. uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json",
  216. "data/data"+projectNum+File.separator+"status.json");
  217. }
  218. }catch (Exception e){
  219. e.printStackTrace();
  220. }
  221. }
  222. }
  223. }