java对接云点播上传视频并且自动触发转码任务回调更新成m3u8格式的视频

前端拿到签名上传文件,签名加转码参数会触发转码任务,转码任务完成会回调设置的回调接口

 /*** @desc:获取上传签名* @date 2022/12/29 15:57*/@Overridepublic String getSignature() throws Exception {// 签名有效期:2天int signValidDuration = vodConfig.getSignValidDuration();// 设置 App 的云 API 密钥return UploadSignatureUtil.getUploadSignature(vodConfig.getSecretId(), vodConfig.getSecretKey(), signValidDuration);}

工具类

package com.icourt.lawtrust.utils;import sun.misc.BASE64Encoder;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Random;// 签名工具类
public class UploadSignatureUtil {private static final String HMAC_ALGORITHM = "HmacSHA1"; //签名算法private static final String CONTENT_CHARSET = "UTF-8";public static byte[] byteMerger(byte[] byte1, byte[] byte2) {byte[] byte3 = new byte[byte1.length + byte2.length];System.arraycopy(byte1, 0, byte3, 0, byte1.length);System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);return byte3;}// 获取签名public static String getUploadSignature(String secretId, String secretKey, int signValidDuration) throws Exception {long currentTime = System.currentTimeMillis() / 1000;int random = new Random().nextInt(java.lang.Integer.MAX_VALUE);String strSign;String contextStr = "";// 生成原始参数字符串long endTime = (currentTime + signValidDuration);contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8");contextStr += "&currentTimeStamp=" + currentTime;contextStr += "&expireTime=" + endTime;contextStr += "&random=" + random;//指定转码任务contextStr += "&procedure=" + "m3u8转码";/** 任务流状态变更通知模式(仅当指定了 procedure 时才有效)。* Finish:只有当任务流全部执行完毕时,才发起一次事件通知。* Change:只要任务流中每个子任务的状态发生变化,都进行事件通知。* None:不接受该任务流回调。* 默认为 Finish。*/contextStr += "&taskNotifyMode=" + "Change";Mac mac = Mac.getInstance(HMAC_ALGORITHM);SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm());mac.init(secretKeySpec);byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET));byte[] sigBuf = byteMerger(hash, contextStr.getBytes("utf8"));strSign = base64Encode(sigBuf);strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", "");return strSign;}private static String base64Encode(byte[] buffer) {BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(buffer);}
}

回调接口更新转码的url

/*** @param json {*             "EventType": "ProcedureStateChanged",*             "FileUploadEvent": null,*             "ProcedureStateChangeEvent": {*             "TaskId": "1306822285-procedurev2-67ee78458206943cfc947c39b394a03ctt0",*             "Status": "FINISH",*             "ErrCode": 0,*             "Message": "SUCCESS",*             "FileId": "243791577896846461",*             "FileName": "604a87fc-e7bc-463e-8d56-cde7e661d690",*             "FileUrl": "https://2332222225.vod2.myqcloud.com/644a93a7vodcq1306822285/19516f26243791577896846461/XlaVDSKoc4sA.mp4",*             "MetaData": {*             "AudioDuration": 0,*             "AudioStreamSet": [],*             "Bitrate": 5994988,*             "Container": "mov,mp4,m4a,3gp,3g2,mj2",*             "Duration": 24.933,*             "Height": 1080,*             "Rotate": 0,*             "Size": 18684382,*             "VideoDuration": 24.933,*             "VideoStreamSet": [{*             "Bitrate": 5989089,*             "Codec": "h264",*             "CodecTag": "",*             "Fps": 30,*             "Height": 1080,*             "Width": 1920*             }],*             "Width": 1920        *      },*             "AiAnalysisResultSet": [],*             "AiRecognitionResultSet": [],*             "AiContentReviewResultSet": [],*             "MediaProcessResultSet": [{*             "Type": "Transcode",*             "TranscodeTask": {*             "Status": "SUCCESS",*             "ErrCode": 0,*             "ErrCodeExt": "",*             "Message": "SUCCESS",*             "Progress": 100,*             "BeginProcessTime": "2022-12-29T08:14:48Z",*             "FinishTime": "2022-12-29T08:15:07Z",*             "Input": {*             "Definition": 100240,*             "TraceWatermark": {*             "Definition": 0,*             "DefinitionForBStream": 0,*             "Switch": ""*             },*             "WatermarkSet": [],*             "HeadTailSet": [],*             "MosaicSet": [],*             "StartTimeOffset": 0,*             "EndTimeOffset": 0*             },*             "Output": {*             "Url": "https://1303333385.vod2.myqcloud.com/3b34814fvodtranscq1306822285/19516f26243791577896846461/v.f100240.m3u8",*             "Size": 7784349,*             "Container": "hls",*             "Height": 1080,*             "Width": 1920,*             "Bitrate": 2497685,*             "Md5": "68b119f4bcef596c0bd1bf083f3e5047",*             "Duration": 24.933,*             "VideoStreamSet": [{*             "Bitrate": 2494974,*             "Codec": "h264",*             "CodecTag": "avc1",*             "Fps": 25,*             "Height": 1080,*             "Width": 1920*             }],*             "AudioStreamSet": [],*             "Definition": 100240,*             "DigitalWatermarkType": "None"*             }*             },*             "AnimatedGraphicTask": null,*             "SnapshotByTimeOffsetTask": null,*             "SampleSnapshotTask": null,*             "ImageSpriteTask": null,*             "CoverBySnapshotTask": null,*             "AdaptiveDynamicStreamingTask": null*             }],*             "SessionContext": "",*             "SessionId": "",*             "TasksPriority": 0,*             "TasksNotifyMode": "Change",*             "Operator": "",*             "OperationType": ""*             },*             "FileDeleteEvent": null,*             "PullCompleteEvent": null,*             }* @desc:事件回调通知 回调地址写的生产根据数据判断是否调到测试环境* @date 2022/12/29 15:57*/@Overridepublic void notifyCallBack(JSONObject json, Map<String, String> headers) {log.info("打印notifyCallBack参数:{}{}", json, headers);}

通过fileId删除视频


package com.lawtrust.database.web.common.config;import javax.annotation.PostConstruct;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.vod.v20180717.VodClient;
import com.tencentcloudapi.vod.v20180717.models.DeleteMediaRequest;
import com.tencentcloudapi.vod.v20180717.models.DeleteMediaResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class VODClient {private VodClient vodClient;@Autowiredprivate VodConfig vodConfig;public VODClient() {}@PostConstructpublic void init() {// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("vod.tencentcloudapi.com");// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的this.vodClient = new VodClient(cred, "", clientProfile);}public String delete(String fileId) throws TencentCloudSDKException {// 实例化一个请求对象,每个接口都会对应一个request对象DeleteMediaRequest req = new DeleteMediaRequest();req.setFileId(fileId);// 返回的resp是一个DeleteMediaResponse的实例,与请求对象对应DeleteMediaResponse resp = this.vodClient.DeleteMedia(req);String response = DeleteMediaResponse.toJsonString(resp);return response;}}

如果视频地址需要做防盗链和限时需要获取签名的url

/*** @return java.lang.String* @desc:生成防盗链播放URL* @date 2022/9/27 16:49*/public String getSignatureUrl(String videoUrl) {//生成的十位随机字符串String us = RandomUtil.randomString(10);//过期时间戳1517400000的十六进制表示结果 3小时后过期String t = UploadSignatureUtil.longToHex(DateUtil.addHours(new Date(), vodConfig.getUrlExpire()).getTime());UrlBuilder urlBuild = UrlBuilder.of(videoUrl);String pathStr = urlBuild.getPathStr();//原始播放 URL 的 PATH 除去**.m3u8String substring = pathStr.substring(0, pathStr.lastIndexOf("/") + 1);urlBuild.addQuery("t", t);urlBuild.addQuery("us", us);//生成签名String sign = SecureUtil.md5(vodConfig.getAntiLeechLink() + substring + t + us);urlBuild.addQuery("sign", sign);return urlBuild.build();}

java对接云点播上传视频,视频转码,播放视频,删除视频相关推荐

  1. web利用腾讯云点播上传视频

    web利用腾讯云点播上传视频到云服务器 第一步导入 <script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader. ...

  2. php视频播放链提取,php获取腾讯云点播上传视频后获取视频url地址以及时长 | 小灰灰博客...

    /** * Created by PhpStorm. * User: 小灰灰 * Date: 2018/12/23 9:02 * Other: */ class Test { public funct ...

  3. java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案

    1. 项目背景 由于本人项目需要,需要在视频点播服务之中需要加载字幕文件(通用格式srt),经过比较好几家的公有云服务,最后选择只有百度云提供字幕服务. 字幕:我们通常在观看外语电影的是,没有国语版时 ...

  4. java 阿里云视频点播上传

    java SDK一定要严格按照官方给的版本号引用,否者上传之后就一直在那转圈圈,不成功!!!一定要注意!!!

  5. 腾讯云点播 上传视频回调接口

    @Controller @RequestMapping("/hui") public class huiDiao {@RequestMapping("/diao" ...

  6. 阿里云SDK上传视频

    1.老样子,先看效果图 2.首先到阿里云下载所需要用到的SDK 3.下载好的,解压之后,目录以及运行起来是以下这个样子的 4.在实际项目中引用,先将SDK添加到项目中,放到public目录下 5.在p ...

  7. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

  8. 酷播云如何上传视频到云平台?

    酷播云如何上传视频到云平台的完整教程,由于酷播云是免费视频存储,无任何广告,更没有youku,tudou那种前置70秒的视频广告,用来上传企业宣传视频,还是很不错的. 那么说说如何使用酷播云上传视频吧 ...

  9. 【Fastapi】批量上传文件(文档、图片、视频等)

    [Fastapi]批量上传文件 项目演示 功能说明 编程思路 重要知识点分析 源代码 项目演示 [Fastapi]批量上传文件(文档.图片.视频等) https://www.bilibili.com/ ...

最新文章

  1. RH134 UNIT5
  2. IBatis存取图片在Oracle Blob大字段中Asp.Net
  3. linux 配置DNS正反区域,Linux基础服务_DNS原理以及正反向DNS配置
  4. Android心得8--Internet
  5. Spark:Yarn-cluster和Yarn-client区别与联系
  6. python elasticsearch模块_Python3 操作 elasticsearch
  7. java swing 图片上加热点_外卖图片品牌全靠P,4元成本料理包加热后,平台上20元卖出...
  8. 每天CookBook之Python-003
  9. Winsock传输数据
  10. 全志V3s IIC控制器驱动分析
  11. Win10电脑怎么取消开机密码?
  12. MariaDB的延迟开源模式及其BSL许可证介绍(一)
  13. Linux大神进阶二十:Mariadb服务管理
  14. Android技术内幕.系统卷
  15. Android Sensor 传感器总结
  16. Codeforces 1278 D.Segment Tree(排序+set)
  17. static变量可以被修改吗
  18. 栈的应用4——递归函数的非递归形式(主讲阿克曼函数的非递归形式)
  19. k8s之简单部署java应用
  20. 计算机应用UgCAd,CAD和UG之间的对决,你更喜欢哪一个?

热门文章

  1. 十大优质外盘炒黄金平台排名
  2. POS机刷卡跨行交易的清算方式
  3. TIA博途_OB组织块的功能和使用方法介绍
  4. python 添加图片_python 图片读取、添加等
  5. MySQL数据查询之多表查询
  6. 基本模型计算机框架原理设计 题目分析,计算机销售论文大纲模板 计算机销售论文框架怎么写...
  7. python 腾讯视频签到_Python处理腾讯视频
  8. 基于MATLAB/Simulink软件的单相光伏并网逆变器仿真,仿真中使用两级电路,前级BOOST升压后级光伏逆变并网
  9. COVID-19检测方法汇总
  10. 阿里云ACP普尔文考试注意事项