VOD版权保护

智能点播平台 VOD

  • 功能发布记录
  • 短视频SDK
    • 短视频SDK
  • 产品描述
    • 优势
    • 简介
    • 输入格式
    • 应用场景
    • 核心概念
  • 典型实践
    • Web端直传实践
    • 视频转码、添加水印、下载查看操作指引
    • 回调解决方案
    • VOD和BOS的关系
    • VOD版权保护
    • STS和VOD、BOS的关系
  • 播放器SDK
    • 播放器SDK文档
  • 操作指南
    • 智能集锦
    • 统计分析
    • 全局设置
    • 工作流管理
    • 开通VOD
    • 媒资管理
    • 模版管理
      • 音频转码模版
      • 抽帧模板
      • 视频转码模板
      • 智感超清(音画质重生)模板
      • 转自适应码流模版
      • 水印模板
      • 模版概览
      • 智能审核模板
      • 智能分析模板
    • 视频生成
      • 特效视频
  • 服务等级协议SLA
    • VOD服务等级协议SLA
  • API参考
    • 数据结构
    • API在线调试
    • 公共请求头与响应头
    • 错误返回
    • 使用须知
    • 概述
    • 媒资上传相关接口
      • 完成上传
      • 申请上传
      • 拉取上传
      • 申请媒资封面上传
      • 完成媒资封面上传
    • 媒资管理相关接口
      • 修改媒资信息
      • 删除媒资的部分文件
      • 解封媒资
      • 搜索媒资
      • 删除媒资
      • 查询媒资详情
      • 封禁媒资
    • 智能集锦相关接口
      • 剧本管理
      • 项目管理
      • 集锦任务
    • 视频生成相关接口
      • 图生视频
      • 特效视频
      • 视频延长
      • 文生视频
    • 媒资处理相关接口
      • 视频云剪辑
      • 媒资通用处理
      • 提取数字水印
    • 任务管理相关接口
      • 查询任务列表
      • 查询任务详情
    • 事件回调相关接口
      • 修改事件回调设置
      • 查询事件回调设置
  • 常见问题
    • 计费类问题
    • 视频上传
    • 常见问题总览
    • 安全类问题
    • 视频转码
    • 视频播放
    • 媒资处理
  • 产品定价
    • 计费概述
    • 特殊情况说明
    • 计费项说明
      • 视频生成计费项
      • 存储计费项
      • 视频处理与生产计费项
      • 媒体版权保护计费项
      • 智能集锦计费项
      • 音视频转码计费项
      • 音视频质量检测计费项
      • 分发计费项
      • 智感超清(音画质重生)计费项
  • 开发指南
    • 事件回调
      • 事件回调综述
      • 媒资AI审核完成
      • 媒资拉取上传完成
      • 媒资上传完成
      • 事件回调接入教程
      • 媒资转码完成
      • 媒资AI分析完成
      • 视频生成完成
      • 媒资抽帧完成
      • 事件回调签名计算
      • 视频云剪辑任务状态变更
    • 服务端上传
      • 服务端上传指引
    • 客户端上传
      • Web 端上传 SDK
      • HarmonyOS NEXT 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
      • Android 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
所有文档
menu
没有找到结果,请重新输入

智能点播平台 VOD

  • 功能发布记录
  • 短视频SDK
    • 短视频SDK
  • 产品描述
    • 优势
    • 简介
    • 输入格式
    • 应用场景
    • 核心概念
  • 典型实践
    • Web端直传实践
    • 视频转码、添加水印、下载查看操作指引
    • 回调解决方案
    • VOD和BOS的关系
    • VOD版权保护
    • STS和VOD、BOS的关系
  • 播放器SDK
    • 播放器SDK文档
  • 操作指南
    • 智能集锦
    • 统计分析
    • 全局设置
    • 工作流管理
    • 开通VOD
    • 媒资管理
    • 模版管理
      • 音频转码模版
      • 抽帧模板
      • 视频转码模板
      • 智感超清(音画质重生)模板
      • 转自适应码流模版
      • 水印模板
      • 模版概览
      • 智能审核模板
      • 智能分析模板
    • 视频生成
      • 特效视频
  • 服务等级协议SLA
    • VOD服务等级协议SLA
  • API参考
    • 数据结构
    • API在线调试
    • 公共请求头与响应头
    • 错误返回
    • 使用须知
    • 概述
    • 媒资上传相关接口
      • 完成上传
      • 申请上传
      • 拉取上传
      • 申请媒资封面上传
      • 完成媒资封面上传
    • 媒资管理相关接口
      • 修改媒资信息
      • 删除媒资的部分文件
      • 解封媒资
      • 搜索媒资
      • 删除媒资
      • 查询媒资详情
      • 封禁媒资
    • 智能集锦相关接口
      • 剧本管理
      • 项目管理
      • 集锦任务
    • 视频生成相关接口
      • 图生视频
      • 特效视频
      • 视频延长
      • 文生视频
    • 媒资处理相关接口
      • 视频云剪辑
      • 媒资通用处理
      • 提取数字水印
    • 任务管理相关接口
      • 查询任务列表
      • 查询任务详情
    • 事件回调相关接口
      • 修改事件回调设置
      • 查询事件回调设置
  • 常见问题
    • 计费类问题
    • 视频上传
    • 常见问题总览
    • 安全类问题
    • 视频转码
    • 视频播放
    • 媒资处理
  • 产品定价
    • 计费概述
    • 特殊情况说明
    • 计费项说明
      • 视频生成计费项
      • 存储计费项
      • 视频处理与生产计费项
      • 媒体版权保护计费项
      • 智能集锦计费项
      • 音视频转码计费项
      • 音视频质量检测计费项
      • 分发计费项
      • 智感超清(音画质重生)计费项
  • 开发指南
    • 事件回调
      • 事件回调综述
      • 媒资AI审核完成
      • 媒资拉取上传完成
      • 媒资上传完成
      • 事件回调接入教程
      • 媒资转码完成
      • 媒资AI分析完成
      • 视频生成完成
      • 媒资抽帧完成
      • 事件回调签名计算
      • 视频云剪辑任务状态变更
    • 服务端上传
      • 服务端上传指引
    • 客户端上传
      • Web 端上传 SDK
      • HarmonyOS NEXT 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
      • Android 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
  • 文档中心
  • arrow
  • 智能点播平台VOD
  • arrow
  • 典型实践
  • arrow
  • VOD版权保护
本页目录
  • token模式
  • token计算规则

VOD版权保护

更新时间:2025-08-22

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

在您的转码模板中设置token加密模式后,经过加密的媒资,就可以受到版权保护:

token 模式接入相对复杂,但安全性更高,可实现媒资粒度的高级版权保护。

两种模式支持的范围如下:

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

token模式

原理

token模式下,引入用户企业服务器的业务鉴权和带过期时间的token临时授权播放。PC端和APP端流程不太一样。

PC端接入

操作步骤:

  1. 登录百度智能云管理控制台,进入音视频点播VOD 服务,左侧导航选择"处理设置>模板管理"。
  2. 点击新建视频转码模板,内容加密策略选择token模式,vod 对视频按照此模式进行加密,每个视频都有不同的密钥。
  3. 导航选择"发布设置>安全设置",生成一个 UserKey,作为用户标示。
  4. PC Web端播放时,企业APP或网站,设置m3u8播放地址,播放器解析到是token模式加密时,回调beforePlay接口。用户通过这个接口,将播放者的信息(用户名、session、媒资id等等)发送请求给企业服务器。
  5. 企业服务器首先校验该播放者是否有权限播放该视频(是否登录、是否购买课程等),如果通过校验则使用userKey、媒资id、过期时间、userId按照计算规则生成token(参见token计算规则),并设置给播放器。
  6. 播放器将token、视频密钥id发送到VOD(https协议),VOD来校验token是否合法、是否超时,通过校验后,将该视频密钥加密后发送给播放器(https协议)。
  7. 播放器解密密钥后进行视频内容解密播放。

在播放器开始播放视频之前,会触发 beforePlay 事件,用户监听此事件,在事件触发后,向企业服务器请求对应的 token,获取到 token后,再使用 setToken 方法设置给播放器。

Plain Text
1var player = cyberplayer('player-container').setup({
2    ...
3    file: 'http://domain/name.m3u8',
4    ak: '27add1b94dd5485d916cc866190be704'
5});
6player.on('beforePlay', function (e) {
7    if (!/m3u8/.test(e.file)) {
8        return;
9    }
10    $.ajax('http://domain/getToken?file=' + e.file, function(e) {
11        player.setToken(e.file, token);
12    });
13});

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

Plain Text
1player.setToken([
2   {
3    file: 'file1',

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

iOS端接入

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

操作步骤:

  1. 登录百度智能云管理控制台,进入音视频点播VOD 服务,左侧导航选择"处理设置>模板管理"。
  2. 点击新建视频转码模板,视频容器选择HLS,内容加密策略选择token模式,vod 对视频按照此模式进行加密,每个视频都有不同的密钥。
  3. 导航选择"全局设置>加密配置设置",可获得 UserKey,作为用户标示。
  4. 企业iOS APP端播放时,首先对播放者进行业务鉴权,校验该播放者是否有权限播放该视频(是否登录、是否买课等),如果通过校验则使用userKey、媒资id、过期时间、userId按照计算规则生成token(token计算规则见3.5),并设置给播放器;
  5. 播放器将token、视频密钥id发送到VOD(https协议),VOD来校验token是否合法、是否超时,通过校验后,将该视频密钥加密后发送给播放器(https协议);
  6. 播放器解密密钥后进行视频内容解密播放。

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

Plain Text
1- (void)setToken:(NSString*)token;

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

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

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

parameters 中可设置的字段包括:

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

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

android端接入

原理与iOS 端类似,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端视频离线下载后,VOD会使用手机设备特征标识信息对视频密钥再次进行加密,以保证即使视频被拷贝到别的手机设备上也无法播放。

token计算规则

名词解释:

  • userId: 百度智能云用户唯一标识,可在百度智能云管理控制台账号基本信息中得到,32位字符串,用于计算token的userId为VOD2-{userId}-{appId}的组合字符串,appId可在"全局设置>加密配置获得",若userId为cc856e60e75e454cb55e430193c37ccb,appId为:egyrfpkuyz52k8jakmb3,那么用于计算token的userId则为VOD2-cc856e60e75e454cb55e430193c37ccb-egyrfpkuyz52k8jakmb3。
  • userKey:用户密钥,是AES-128内容密钥,用于对MediaId和ExpirationTime组成的串进行加密。长度为16字节,用32位十六进制数表示。可在百度智能云VOD管理控制台中设置和更新。
  • signature: 签名,是用UserKey给MediaId和ExpirationTime加密生成的字符串。长度为32字节,用64位十六进制数表示。
  • mediaId:百度智能云VOD中媒资的唯一标识。
  • 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", mediaId, 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

Plain Text
1import javax.crypto.Mac;
2import javax.crypto.spec.SecretKeySpec;
3import java.nio.charset.Charset;
4import org.apache.commons.codec.binary.Hex;
5
6public class Main {
7    static final Charset CHARSET_UTF8 = Charset.forName("UTF-8");
8    public static String sha256Hex(String signingKey, String stringToSign) {
9        try {
10            Mac mac = Mac.getInstance("HmacSHA256");
11            mac.init(new SecretKeySpec(signingKey.getBytes(CHARSET_UTF8), "HmacSHA256"));
12            return new String(Hex.encodeHex(mac.doFinal(stringToSign.getBytes(CHARSET_UTF8))));
13        } catch (Exception e) {
14            System.out.println(e.getMessage());
15        }
16        return null;
17    }
18
19    public static void main(String[] args) {
20        String gTestUserKey = "testUserKey";
21        String gTestMediaId = "testMediaId";
22        System.out.println(sha256Hex(gTestUserKey, "/" + gTestMediaId + "/" + (System.currentTimeMillis
23()/1000 + 3600))); //过期时间以秒为单位
24    }
25}

上一篇
VOD和BOS的关系
下一篇
STS和VOD、BOS的关系