解决方法
1.建 一个 Psign类
引入依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.0</version>
</dependency>
package com.atguigu.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTCreationException; import java.util.HashMap; public class Psign { public static String getPsign(Integer appId, String fileId){ Integer AppId = appId; //点播应用 appId。 String FileId = fileId; //点播文件 ID。 String AudioVideoType = "RawAdaptive"; //播放的音视频类型,可选值 // RawAdaptive:未加密的 转自适应码流 输出。 //ProtectedAdaptive:私有加密或 DRM 保护的 转自适应码流 输出。 //Transcode:转码 后输出。 //Original:上传 的原始音视频。 Integer RawAdaptiveDefinition = 10; Integer ImageSpriteDefinition = 10; Integer CurrentTime = Math.toIntExact(System.currentTimeMillis() / 1000);//派发签名当前 Unix 时间戳 // Integer PsignExpire = 1589548067;//派发签名到期 Unix 时间戳,不填表示不过期。 // String UrlTimeExpire = "5ebe9423"; String PlayKey = "XeI9BN7D3BDLm7PycdWg";//播放密钥 HashMap<String, Object> urlAccessInfo = new HashMap<String, Object>(); // urlAccessInfo.put("t", UrlTimeExpire); HashMap<String, Object> contentInfo = new HashMap<String, Object>(); contentInfo.put("audioVideoType", AudioVideoType); contentInfo.put("rawAdaptiveDefinition", RawAdaptiveDefinition); contentInfo.put("imageSpriteDefinition", ImageSpriteDefinition); Algorithm algorithm = Algorithm.HMAC256(PlayKey); String token = JWT.create().withClaim("appId", AppId).withClaim("fileId", FileId) .withClaim("contentInfo", contentInfo) .withClaim("currentTimeStamp", CurrentTime) // .withClaim("expireTimeStamp", PsignExpire) .withClaim("urlAccessInfo", urlAccessInfo).sign(algorithm); return token; } }
这里可以测试 psign 是否正确
填好
AppId、FileId、AudioVideoType、RawAdaptiveDefinition、ImageSpriteDefinition、CurrentTime、PlayKey 自己的这几个属性值
详情见注释或者已下官网
云点播 播放器签名-开发指南-文档中心-腾讯云 (tencent.com)
2.修改VodServiceImpl.java 文件中这个方法 把 Psign加入到map 返回
//点播视频播放接口
@Override
public Object getPlayAuth(Long courseId, Long videoId) {
//根据小节id获取小节对象,获取腾讯云视频id
Video video = videoService.getById(videoId);
if(video == null) {
throw new GgktExcetion(20001,"小节信息不存在");
}
String videoSourceId = video.getVideoSourceId();
Integer id= Integer.valueOf(appId);
String psign = Psign.getPsign(id,video.getVideoSourceId());
Map<String, Object> map = new HashMap<>();
map.put("videoSourceId",video.getVideoSourceId());
map.put("appId",appId);
map.put("psign",psign);
return map;
}
3.修改前端views->play.vue 把psign加入
//视频播放
play(data) {
//window.location = './video.html?fileID='+data.videoSourceId+'&appID='+data.appId;
var player = TCPlayer("player-container-id", { /**player-container-id 为播放器容器ID,必须与html中一致*/
fileID: data.videoSourceId, /**请传入需要播放的视频fileID 必须 */
appID: data.appId, /**请传入点播账号的子应用appID 必须 */
psign: data.psign
// psign: ""
/**其他参数请在开发文档中查看 */
});