| | |
| | | import com.qxueyou.scc.sys.service.IOssService; |
| | | |
| | | /** |
| | | * aliyun资源临时授权 |
| | | * aliyun资源临时授权 |
| | | * @author cyq |
| | | * |
| | | */ |
| | |
| | | IOssService ossService; |
| | | |
| | | /** |
| | | * 公共数据访问对象 |
| | | * 公共数据访问对象 |
| | | */ |
| | | @Autowired |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * @param videoId |
| | | * @param definition |
| | | * @return |
| | |
| | | @RequestMapping(value="video/m3u8", method=RequestMethod.GET, produces = "application/json;charset=utf-8") |
| | | public @ResponseBody Result videoM3u8(@RequestParam("videoId") String videoId, String definition) { |
| | | if (StringUtils.isEmpty(videoId)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | // json.put("result", "success"); |
| | | // // 检查缓存中是否有可用的url,如果有,则直接返回 |
| | | // // 检查缓存中是否有可用的url,如果有,则直接返回 |
| | | // String urlCache = cacheService.get("sts_url_" + resId, String.class); |
| | | // if (StringUtils.isNotEmpty(urlCache)) { |
| | | // json.put("url", urlCache); |
| | |
| | | MediaVideo video = commonDAO.read(MediaVideo.class, videoId); |
| | | |
| | | if (video == null) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | String resId = ""; |
| | | String resUrl = null; |
| | | JSONObject json = null; |
| | | |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | if(checkIsVoiceMedia(video)){ |
| | | json = new JSONObject(); |
| | | json.put("result", "success"); |
| | |
| | | |
| | | resUrl = this.getM3u8ResUrl(def, video); |
| | | |
| | | //判断是否是加密视频,未加密则直接返回视频地址 |
| | | //判断是否是加密视频,未加密则直接返回视频地址 |
| | | if(StringUtils.isEmpty(video.getSecretKey())){ |
| | | //如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。 |
| | | //如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。 |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | resUrl = StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD() : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD(); |
| | | |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | } |
| | | |
| | |
| | | json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1)); |
| | | json.put("isConver",false); |
| | | }else{ |
| | | //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在 |
| | | //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在 |
| | | if (StringUtils.isEmpty(resUrl)||resUrl.endsWith(MP4)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | resId = resUrl.substring(resUrl.indexOf("/video/") + 1); |
| | |
| | | |
| | | // String resDir = resId.substring(0, resId.lastIndexOf('/')); |
| | | |
| | | //获取原视频VideoId |
| | | //获取原视频VideoId |
| | | // String keyAddr = video.getOriginVideoId(); |
| | | // if(StringUtils.isBlank(keyAddr)){ |
| | | // keyAddr = video.getVideoId(); |
| | | // } |
| | | |
| | | // // 获取解密key的临时访问权限 |
| | | // // 获取解密key的临时访问权限 |
| | | // if(StringUtils.isNotEmpty(video.getM3u8KeyPath())){ |
| | | // json.put("url", video.getM3u8KeyPath().substring(video.getM3u8KeyPath().indexOf("/video/") + 1)); |
| | | // }else{ |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * @param videoId |
| | | * @param definition |
| | | * @return |
| | |
| | | @RequestMapping(value="video/mp4", method=RequestMethod.GET, produces = "application/json;charset=utf-8") |
| | | public @ResponseBody Result videoMp4(@RequestParam("videoId") String videoId, String definition) { |
| | | if (StringUtils.isEmpty(videoId)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | BufferedReader bf = null; |
| | |
| | | MediaVideo video = commonDAO.read(MediaVideo.class, videoId); |
| | | |
| | | if (video == null) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | String resId = ""; |
| | | String resUrl = null; |
| | | JSONObject json = null; |
| | | |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | if(checkIsVoiceMedia(video)){ |
| | | json = new JSONObject(); |
| | | json.put("result", "success"); |
| | |
| | | |
| | | resUrl = this.getMp4ResUrl(def, video); |
| | | |
| | | //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放 |
| | | //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放 |
| | | if(StringUtils.isEmpty(resUrl) && video.getOrigUrl().endsWith(MP4)){ |
| | | resUrl = video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1); |
| | | } |
| | | |
| | | //查看原视频是否是MP4 |
| | | //查看原视频是否是MP4 |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | json = new JSONObject(); |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取resurl |
| | | * 获取resurl |
| | | * |
| | | * @param def |
| | | * @param video |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取resurl |
| | | * 获取resurl |
| | | * |
| | | * @param def |
| | | * @param video |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断是否是音频media,精确判断需要枚举音频格式 |
| | | * 判断是否是音频media,精确判断需要枚举音频格式 |
| | | * @return |
| | | */ |
| | | private boolean checkIsVoiceMedia(MediaVideo media){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 测试接口专用 |
| | | * 测试接口专用 |
| | | * @param request |
| | | * @return |
| | | */ |