Dos formas comunes de encriptación de video Administración de derechos digitales y algoritmos y aplicaciones de encriptación

Dos métodos comunes de gestión de derechos digitales de encriptación de video y algoritmos de encriptación y ejemplos de aplicación:


La gestión de derechos digitales (DRM) cifra el vídeo.

La gestión de derechos digitales hace referencia al uso de la tecnología de gestión de derechos digitales para cifrar y proteger el contenido de vídeo. Esto se puede hacer agregando identificadores criptográficos especiales, licencias o restringiendo el acceso a los archivos de video.

El algoritmo de encriptación encripta el video.

El contenido de video se encripta usando varios algoritmos de encriptación. Los algoritmos de cifrado comunes incluyen algoritmos de cifrado simétrico (como AES) y algoritmos de cifrado asimétrico (como RSA). Al cifrar datos de video, solo los usuarios con la clave de descifrado correcta pueden descifrar y ver el video.

Ejemplo de código de jugador:

<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>

 Obtener certificado de reproducción de video

/**
 * 获取点播加密视频的播放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());
    }
}

▲  Captura de pantalla del efecto

 

 Mis recomendaciones de artículos populares

Supongo que te gusta

Origin blog.csdn.net/suny2020/article/details/131985650
Recomendado
Clasificación