上云无忧 > 文档中心 > 百度智能云视频创作分发平台最佳实践 - 视频版权保护
视频创作分发平台
百度智能云视频创作分发平台最佳实践 - 视频版权保护

文档简介:
概览: 用户的视频内容一旦被盗用,损失巨大,为此VideoWorks实现了一套完善的版权保护方案,保障视频的播放安全。方案采用token模式,全面支撑PC Web、iOS、Android 端。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

概览

用户的视频内容一旦被盗用,损失巨大,为此VideoWorks实现了一套完善的版权保护方案,保障视频的播放安全。方案采用token模式,全面支撑PC Web、iOS、Android 端。

应用场景

场景一:在线教育

在线教育的点播视频课程,用此方案保证课程视频不被任意下载传播。

场景二:长短视频平台

对于长视频和短视频播放平台,可用于版权内容的保护,保证付费会员和平台的利益。

方案概述

在您的转码模板中设置token加密模式后,经过加密的媒资,就可以受到版权保护。 token 模式接入相对复杂,但安全性更高,可实现媒资粒度的高级版权保护。

支持终端

播放端 类型 是否支持token模式
PC Web 在线
iOS 在线
Android 在线

原理

token模式下,引入用户企业服务器的业务鉴权和带过期时间的token临时授权播放。PC端和APP端流程不同,详见如下说明。

接入步骤

PC端接入

操作步骤:

  1. 选择“产品服务>音视频处理videoworks”,进入“处理设置>转码模板”页面;
  2. 单击左上角“新建转码模板”;
  3. 填写基础配置、片段提取、视频、音频模块中的必填项;
  4. 内容加密模块中选择“Token,临时口令播放授权”;

视频加密配置有以下可选项:  

-   Open:开放密钥,系统自动生成加密密钥,密钥公开,不设访问控制。  

-   PlayerBinding:绑定播放器,系统自动生成加密密钥,密钥设有访问控制。 PlayerBinding模式下密钥设有访问控制,
安全性比较高,推荐使用PlayerBinding模式。  

-   Token: 临时口令播放授权,系统根据userKey生成密钥加密视频;播放时按照规则生成Token并发送给密钥服务验证,
校验通过才能播放,安全性比较高。

  1. PC Web端播放时,企业APP或网站,设置m3u8播放地址,播放器解析到是token模式加密时,提醒用户将播放者的信息(userKey、jobId、session等等)发送请求给企业服务;
  2. 企业服务器首先校验该播放者是否有权限播放该视频(是否登录、是否购买课程等),如果通过校验则使用joId、userId、userKey、expirationtime按照计算规则生成token(参见token计算规则),并通过设置setToken方法发送给播放器;
  3. 播放器将token、视频密钥ID信息发送到后端进行校验是否合法与超时,通过校验后,将该视频加密后发送给播放器(https协议);
  4. 播放器解密密钥后进行视频内容解密播放。

    var player = cyberplayer('player-container').setup({ ... file: 'http://domain/name.m3u8', ak: '27add1b94dd5485d916cc866190be704' }); player.on('beforePlay', function (e) { if (!/m3u8/.test(e.file)) { return; } $.ajax('http://domain/getToken?file=' + e.file, function(e) { player.setToken(e.file, token); }); });

如果要同时设置多个视频的token(比如配置多个码率的视频时) ,参照下列方法:

player.setToken([
   {
    file: 'file1',

tokenText: 'token1' }, { file: 'file2', tokenText: 'token2' } ]);

iOS端接入

与PC web端的差别在于,iOS端token是在初始化播放器之前完成业务鉴权、生成的,并和m3u8播放地址一起初始化给播放器。 

操作步骤:

  1. 企业iOS APP端播放时,首先对播放者进行业务鉴权,校验该播放者是否有权限播放该视频(是否登录、是否买课等),如果通过校验则使用userKey、jobId、expirationtime、userId按照计算规则生成token(参见token计算规则),并设置给播放器;
  2. 播放器将token、视频密钥id信息发送到后端进行校验是否合法与超时,通过校验后,将该视频加密后发送给播放器(https协议);
  3. 播放器解密密钥后进行视频内容解密播放。

iOS端在线方案接入,用户需要调用此接口:

- (void)setToken:(NSString*)token;

iOS端离线下载需要token认证的视频时,需要实现下面的回调接口:

-(void)task:(CyberDownloadTask*)task needAuthentication:(NSMutableDictionary*)parameters;

用户可以取得task中的信息,来判断这个任务是否需要相关鉴权信息。如果需要时,在parameters字段中设置正确的鉴权信息。

parameters 中可设置的字段包括:

字段 说明
token Token模式时,设置此字段

iOS端视频离线下载后,videoworks会使用手机设备特征标识信息对视频密钥再次进行加密,以保证即使视频被拷贝到别的手机设备上也无法播放。

Android端接入

Android端设置token模式的步骤与pc Web端一样。 Android端在线方案接入方法如下:

非加密视频的播放请参考播放器文档,加密视频与非加密视频的两个不同之处如下,

  • 设置播放路径, BVideoView类
函数 参数 备注
public void setVideoPath(String path, String token) path 视频路径
token 加密口令
使用token加密时,用该方法设置视频路径
  • 多分辨率支持,静态方法,BVideoView类
函数 参数 备注
public static int getMediaInfo(Context ctx, String path, String token) path 视频路径
token 加密口令
使用token加密时,用该方法启用多分辨率探测

注意: 多分辨率探测独立于视频播放。调用getMediaInfo方法之后,即可调用BVideoView.getSupportedResolution()获得视频分辨率数组,详见demo代码。

Android端离线下载方案接入方法:

与非加密视频的相比,仅在开启下载时,调用的接口不同:VideoDownloadManager类

函数 参数 备注
public void startOrResumeDownloaderWithToken(String url, String token, DownloadObserver observer) url 视频路径
token 加密口令
observer 下载状态与进度监听器
使用token加密时,用该方法启用下载

Android端视频离线下载后,videoworks会使用手机设备特征标识信息对视频密钥再次进行加密,以保证即使视频被拷贝到别的手机设备上也无法播放。

token计算规则

名词解释:

  • userId: 百度智能云用户唯一标识,可在百度智能云管理控制台账号基本信息中得到,32位字符串。
  • userKey:用户密钥,是AES-128内容密钥,用于对jobId和ExpirationTime组成的串进行加密。长度为16字节,用32位十六进制数表示。
  • signature: 签名,是用UserKey给jobId和ExpirationTime加密生成的字符串。长度为32字节,用64位十六进制数表示。
  • jobId:百度智能云videoworks工作流每个步骤的唯一标识。
  • expirationTime:Signature的过期时间,是一个unix时间戳,以秒为单位。
  • token:由Signature_UserId_ExpirationTime组成的字符串。
  • HMAC-SHA-256:签名算法,详见https://tools.ietf.org/html/rfc4868

token的生成方法:

  1. 生成签名signature = HMAC-SHA-256(userKey,String.format("/%s/%s", jobId, expirationTime),sample code见HMAC-SHA-256加密算法 Sample Code
  2. 利用下划线(_) 连接signature,userId,expirationTime组合成token = String.format(“%s_%s_%s”, signature, userId,expirationTime)

HMAC-SHA-256加密算法 Sample Code

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import org.apache.commons.codec.binary.Hex;

public class Main {
    static final Charset CHARSET_UTF8 = Charset.forName("UTF-8");
    public static String sha256Hex(String signingKey, String stringToSign) {
        try {
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(signingKey.getBytes(CHARSET_UTF8), "HmacSHA256"));
            return new String(Hex.encodeHex(mac.doFinal(stringToSign.getBytes(CHARSET_UTF8))));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

    public static void main(String[] args) {
        String gTestUserKey = "testUserKey";
        String gTestjobId = "testjobId";
        System.out.println(sha256Hex(gTestUserKey, "/" + gTestjobId + "/" + (System.currentTimeMillis
()/1000 + 3600))); //过期时间以秒为单位
    }
}

获取userKey步骤

userKey无法通过videoworks平台直接获取,需要进入音视频处理MCP平台获取。 

获取jobId步骤

获取jobId有两种方式

方式一:

  1. 在视频处理的媒资列表点击相应的媒资名称/ID。

  1. 点击实例列表。 
  2. 鼠标移动至【转码】模块,点击任务ID。 
  3. 复制获取jobID。 

方式二:

通过工作流运行实例接口获取jobId VideoWorks工作流运行实例接口

相似文档
  • 文件上传是指开发者或其用户将视频、音频等文件上传到BOS中,以便进行音视频处理、分发等。用户使用VideoWorks时,可以用以下方式进行视频上传: 控制台上传:在VideoWorks控制台进行媒资处理,可以上传音视频文件到指定的BOS bucket中,适用于直接管理少量视频的场景。
  • 在VideoWorks中使用工作流处理媒资时,可以按照工作流中的通知设置,向待通知地址发送预定格式的通知消息,表示媒资处理已完成或失败。 在工作流中,除了开始节点,其他节点都可以设置通知。
  • 音视频处理是输入原始视频,使用指定的工作流进行分析或加工,并输出处理结果的过程。VideoWorks支持以下音视频处理的能力: 视频编码:按转码模板对视频进行编码。 音频编码:按转码模板对音频进行编码。
  • 协议生效时间:2022年4月7日。 本服务等级协议(Service Level Agreement,简称“SLA”) 规定了百度智能云向客户提供的视频创作分发平台(VideoWorks)的服务可用性等级指标及赔偿方案。
  • 媒资管理: 视频创作分发平台提供API支持上传媒资吗? 视频处理与生产: 在VideoWorks中,媒资上传后如何实现视频转码? 如何实现多任务串行/并行处理流程? 目前支持哪些音视频处理功能? 目前提供API支持视频合成服务吗?
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部