视频加密的两种常见的方式数字版权管理和加密算法与应用实例:
数字版权管理(DRM)对视频做加密处理。
数字版权管理是指使用数字版权管理技术对视频内容进行加密和保护。这可以通过给视频文件添加特殊的加密标识符、许可证或者限制访问的方式来实现。
加密算法对视频做加密处理。
使用各种加密算法对视频内容进行加密。常见的加密算法包括对称加密算法(如AES)和非对称加密算法(如RSA),通过对视频数据进行加密,只有拥有正确解密密钥的用户才能解密和观看视频。
播放器代码示例:
<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '88083abbf5bcf1356e05d39666be527a_8',
playsafe:'81814fed-bdd0-4506-bec1-ebc8093148c5-hfevwsfxcsbcocx',
//playsafeUrl:'https://myDomain.com/token', // 业务方自定义的获取播放凭证接口URL,与playsafe参数二选一
ts:'1568131545000',
sign:'88313661ba7ded642c7b557b0a364b4b'
});
//切换加密视频时,需要重新获取播放凭证。如果初始化播放器时使用了playsafeUrl参数,则播放器会自动获取新的凭证,无需传playsafe参数。
player.changeVid({
vid: '88083abbf5bcf1356e05d39666be527a_9', //需要切换的视频vid
playsafe: '81814fed-bdd0-4506-bec1-ebc8093148c6-hfevwsfxcsbcocx', //新获取的playsafe token
sign: '88313661ba7ded642c7b557b0a364b4c', //新获取的sign和ts参数
ts: '1568131545001'
});
</script>
获取视频播放凭证
/**
* 获取点播加密视频的播放token
*/
@PostMapping("/getVodToken")
@ResponseBody
public ResponseVO getVodToken(@RequestBody GetTokenRequestVO tokenReq, HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
// 请求参数处理
String videoId = tokenReq.getVideoId();
String viewerId = tokenReq.getViewerId();
if (StringUtils.isEmpty(videoId) || StringUtils.isEmpty(viewerId)) {
return ResponseVO.failure("argument is error");
}
Map<String, Object> args = new HashMap<>(16);
args.put("videoId", videoId);
args.put("viewerId", viewerId);
args.put("viewerIp", IPUtil.getIPAddress(request));
args.put("viewerName", tokenReq.getViewerName());
args.put("expires", tokenReq.getExpires());
args.put("disposable", tokenReq.getDisposable());
args.put("iswxa", tokenReq.getIswxa());
args.put("userId", USER_ID);
args.put("ts", System.currentTimeMillis());
// 去除空值参数
Map<String, String> params = args.entrySet()
.stream()
.filter(entry -> entry.getValue() != null)
.collect(
Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue()))
);
// 请求参数签名
params.put("sign", LiveSignUtil.getSign(params, SECRET_KEY));
// 向保利威服务器请求Token
TokenVO vo = RequestTokenService.requestTokenFromServer(params);
if (vo == null || vo.getCode() == null || vo.getCode() != HttpStatus.OK.value()) {
return ResponseVO.failure("请求数据失败");
} else {
// TODO 在返回Token前建议实现自己的加密逻辑,以免在网络传输过程中泄露Token
return ResponseVO.success(vo.getData());
}
}
▲ 效果截图
我的热门文章推荐
- 多路视频直播用在线云导播切换的效果测试
- 如何把视频转换生成二维码,扫码直接播放?
- 有哪些网站上传视频是不会插入广告的?
- 怎么把视频生成二维码?微信扫二维码就可以观看?不要广告的
- 常用照片尺寸对照表,照片大小看这个表就对了
- 视频直播推流攻略(整理的各大平台推流界面)
- html5视频倍速播放功能
- 教你一招:多个视频如何实现列表播放?
- 微信公众号如何实现视频列表播放视频的功能
- h5视频倍速播放功能(视频多倍速观看功能的实例)
- 怎样配置FTP服务器
- 如何使用FTP上传文件(FTP文件传输)
- OBS直播工具使用指南/OBS推送直播视频源到服务器的工具
- QQ浏览器劫持video标签加载自己的广告(怎么解决?)