DRM-X 5.0 加密 SDK 使用文档
面向客户技术人员 —— 如何在自己的服务器 / 网站上,通过命令行调用加密工具完成视频加密
DRM-X 5.0 加密 SDK 是一个基于命令行的加密工具,用于对视频文件进行加密保护。
本教程将介绍
1SDK 包内容
解压 DRM-X5.0_Encryption_SDK 压缩包后,目录内包含以下文件:
| 文件 | 说明 |
|---|---|
| drm-x5-encrypt-sdk.exe | Windows 加密程序(x64) |
| drm-x5-encrypt-sdk-linux-x86_64 | Linux 加密程序(x86_64,静态链接,无动态库依赖,CentOS / Ubuntu 可直接运行) |
| drm-x5-encrypt-sdk-macos-x86_64 | macOS 加密程序(Intel 芯片,最低 macOS 11.0) |
| drm-x5-encrypt-sdk-macos-arm64 | macOS 加密程序(Apple Silicon M 系列芯片,最低 macOS 11.0) |
| cmd.txt | 三个平台的命令行调用示例 |
| GetPackagerEncryptedParams.php | 一个可运行的 PHP 示例程序,用于调用 Web 服务以获取加密参数(参见第 4.4 节) |
三个平台的程序命令行参数完全一致,仅程序文件名不同。
2加密流程总览
STEP 1 · 获取加密参数
调用GetPackagerEncryptedParams 方法获取 ProfileEncryptedParam(即 -profile 加密串,获取一次后可缓存复用);输入 / 输出路径的 Base64 值由程序自行编码生成,不必调用接口
STEP 2 · 组装命令行
将获取到的 -profile 与本地编码好的路径 Base64 填入加密程序的 -server_domain / -profile / -input_file_utf8_base64_encoded / -output_file_utf8_base64_encoded 四个参数
STEP 3 · 执行加密
在服务器上运行命令行程序完成加密
STEP 4 · 发布加密文件
将输出目录中的加密文件上传 / 发布,用户播放时由 DRM-X 5.0 服务器颁发许可证
为什么要先调DRM-X 5.0 Web Service?加密程序的 -profile 参数不是许可证模板的数字 ID,而是一段与您的账号绑定的加密字符串(ProfileEncryptedParam)。这段字符串无法在本地生成,只能通过 Web Service 接口获取。它与 ProfileID 一一对应,调用一次接口获取后即可缓存复用,不必每个文件都调用接口;输入 / 输出路径的 Base64 编码值则推荐在程序中本地生成(见第 6 节),无需为此调用接口。
3准备工作
3.1 DRM-X 5.0 账号信息(在 DRM-X 管理后台获取)
| 信息 | 用途 |
|---|---|
| AdminEmail | 管理员邮箱,Web Service 集成验证使用,需高级版及以上账户 |
| WebServiceAuthStr | Web Service 集成验证码,后台「网站集成参数设置」中查看 |
| ProfileID | 许可证模板 ID(数字),指定本次加密使用哪个许可证模板 |
3.2 服务器环境要求
| 平台 | 要求 |
|---|---|
| Windows | Windows 7 / Server 2008 R2 及以上(x64) |
| Linux | x86_64 架构(CentOS 7+ / Ubuntu 16.04+ 等主流发行版),静态链接无需安装依赖 |
| macOSmacOS | macOS 11.0 及以上,Intel 或 Apple Silicon 芯片 |
| 服务器端集成(可选) | PHP 7.4+(启用 soap、openssl 扩展),用于自动调用 Web Service |
安全提醒: WebServiceAuthStr 等同于账号密钥,只应保存在服务器端,严禁写在前端网页、客户端软件或公开仓库中。
4第一步:调用 Web Service 获取加密参数
4.1 接口信息
| 项目 | 值 |
|---|---|
| 国际版端点 | https://5.drm-x.com/haihaisoftlicenseservice.asmx |
| 中国版端点 | https://5.drm-x.cn/haihaisoftlicenseservice.asmx |
| 方法名 | GetPackagerEncryptedParams |
| 协议 | SOAP 1.1 (POST) |
| SOAPAction | http://tempuri.org/ASPNET.StarterKit.Commerce/HaihaisoftLicenseService/GetPackagerEncryptedParams |
端点必须与账号版本一致:国际版账号使用 5.drm-x.com(对应命令行 -server_domain com),中国版账号使用 5.drm-x.cn(对应 -server_domain cn)。版本用错会导致验证失败或加密文件无法播放。
4.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
| AdminEmail | 是 | DRM-X 5.0 管理员邮箱 |
| WebServiceAuthStr | 是 | Web Service 验证码 |
| ProfileID | 是 | 许可证模板 ID(数字即可,无需编码) |
| Input | 是 | 待加密文件的完整路径(普通字符串,无需编码) |
| Output | 是 | 加密后输出文件的完整路径 |
| ProfileEncryptedParam / enc_Input / enc_Output | 否 | 一般留空传空字符串即可 |
4.3 响应字段与命令行参数的对应关系(核心)
| 接口返回字段 | 对应命令行参数 | 说明 |
|---|---|---|
| ProfileEncryptedParam | -profile | 与账号绑定的加密许可证模板字符串(URL-Safe Base64,含 - _)。必须使用接口返回值,不能传数字 Profile ID,也不能自行编码。同一 ProfileID 只需调用一次接口获取,可缓存后长期复用,不必每个文件都调用接口 |
| enc_Input | -input_file_utf8_base64_encoded | 输入路径的 UTF-8 Base64 编码值。推荐在程序中自行编码(PHP 用 base64_encode(),其他语言先转 UTF-8 字节再 Base64,见第 6 节),不必为此调用接口;接口返回的 enc_Input 值同样可用 |
| enc_Output | -output_file_utf8_base64_encoded | 输出路径的 UTF-8 Base64 编码值。推荐在程序中自行编码(方法同上),不必为此调用接口;接口返回的 enc_Output 值同样可用 |
| GetPackagerEncryptedParamsResult | — | 状态 / 消息文本。注意: |
4.4 接口调用示例(PHP / SoapClient)
本接口是标准的 SOAP 1.1 Web Service,任何语言都可以调用,调用方式统一为:向 4.1 节的端点 POST SOAP 报文(或由 SOAP 客户端加载 ?WSDL 自动生成报文),传入 4.2 节的参数,再从响应中取 4.3 节的三个字段。各语言可用的工具例如:
| 语言 / 平台 | 常用 SOAP 客户端 |
|---|---|
| PHP | 内置 SoapClient 类(本文示例,WSDL 模式) |
| Java | JAX-WS(wsimport)、Apache Axis2、Apache CXF |
| Python | zeep、suds |
| C# / .NET | Visual Studio「添加服务引用」,或 SvcUtil |
| Node.js | soap 包 |
下面以 PHP 的 SoapClient 为例演示完整调用过程。将代码保存为 get_params.php 放在服务器上运行(PHP 7.4+,启用 soap 扩展),即可打印出三条命令行参数值:
SoapClient 使用注意:
- 必须安装并启用 php-soap 扩展(Windows 在 php.ini 中取消 extension=soap 的注释;Linux 安装 php-soap 包)。
- 验证失败等业务错误不会抛 SoapFault,仍返回 HTTP 200 和正常结构的响应,错误文本在 GetPackagerEncryptedParamsResult 中,务必按 4.3 节的方法检查字段值判断成败。
- 调试时可 var_dump($client->__getLastRequest()); 查看实际发出的报文。
5第二步:执行加密命令
5.1 首次使用(Linux / macOS)
在终端切换到程序所在目录,先给可执行权限:
5.2 单文件加密命令模板
Windows (cmd / PowerShell):
Linux:
macOS:
5.3 参数说明
| 参数 | 说明 |
|---|---|
| -server_domain | 目标 DRM-X 5.0 服务器版本:com = 国际版,cn = 中国版。必须与账号所属平台及第 4 步调用的接口端点一致。 |
| -profile | 许可证模板加密串,即接口返回的 ProfileEncryptedParam 完整字符串(URL-Safe Base64,含 - 和 _)。不要传数字 ID,不要自行 Base64 编码,不要增删末尾字符。同一 ProfileID 只需调用一次接口获取,可缓存后长期复用。 |
| -input_file_utf8_base64_encoded | 输入文件路径的 UTF-8 Base64 编码值。推荐在程序中自行编码(如 PHP 的 base64_encode($path),见第 6 节),也可使用接口返回的 enc_Input。支持绝对路径和相对路径,路径中允许包含中文与空格。 |
| -output_file_utf8_base64_encoded | 输出文件路径的 UTF-8 Base64 编码值。推荐在程序中自行编码(方法同上),也可使用接口返回的 enc_Output。输出的父目录必须事先存在,程序不会自动创建。 |
5.4 完整示例
Windows:
其中 RDpcSmFzb25c... 解码后为 D:\Jason\input\01-testVideo.mp4。
Linux:
即加密 ./input/01-linux-encrypt-video.mp4 → ./output/01-linux-encrypt-video2_P.mp4。
5.5 执行结果确认
- 程序运行结束后,检查输出目录中是否生成了加密文件(建议文件名加 _P 后缀以区分,如 course01_P.mp4);
- 加密过程需要联网访问 DRM-X 服务器,请确保服务器防火墙 / 安全组已放行出站访问 5.drm-x.com 或 5.drm-x.cn;
- 建议先用一个小体积测试视频验证全流程,再批量加密正式内容。
6输入 / 输出路径的 Base64 编码方法
推荐做法:-input_file_utf8_base64_encoded / -output_file_utf8_base64_encoded 的值请在您的程序中自行编码生成,不必为每个文件调用一次 Web Service。编码规则:先把路径字符串转为 UTF-8 字节,再做标准 Base64 编码。注意:源代码文件需以 UTF-8 保存(含中文路径时尤其重要;Windows 下不要用 ANSI / GBK 编码)。各语言示例:
| 语言 / 环境 | 示例(编码路径 /home/video/course01.mp4) |
|---|---|
| PHP | base64_encode('/home/video/course01.mp4') |
| Java | Base64.getEncoder().encodeToString(path.getBytes(StandardCharsets.UTF_8)) |
| Python | base64.b64encode(path.encode('utf-8')).decode() |
| C# / .NET | Convert.ToBase64String(Encoding.UTF8.GetBytes(path)) |
| Node.js | Buffer.from(path, 'utf8').toString('base64') |
| Linux / macOS shell | printf '%s' "/home/video/course01.mp4" | base64 |
| Windows PowerShell | [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("C:\video\course01.mp4")) |
再次强调:-profile 参数没有本地编码方法,它是与账号绑定的加密串,只能通过 GetPackagerEncryptedParams 接口获取。
7服务器自动化集成示例
将「获取参数 + 调用加密程序」串起来,即可实现网站后台一键加密或定时批量加密。以下为 PHP 调用 Linux 版加密程序的示例(接第 4.4 节代码之后;实际运行时 $profile 建议先读缓存,缓存不存在时才调用第 4.4 节的接口获取):
Shell 批量加密脚本示例(Linux,逐个文件取参数后加密):
推荐做法:同一个 ProfileID 的 ProfileEncryptedParam 调用一次接口获取后即缓存复用,不要每加密一个文件都调用一次 Web Service;enc_Input / enc_Output 直接在服务端对路径做 Base64(UTF-8)编码生成(PHP 即 base64_encode(路径),见第 6 节),不必调用接口。批量加密时建议限制并发数(如每台服务器同时 2–4 个加密进程),避免占用过多带宽与 CPU。
8常见问题(FAQ)
Q1:调用接口返回「Your XML web service login info is not correct...」
AdminEmail 或 WebServiceAuthStr 不正确。请在 DRM-X 管理后台重新核对;注意值的首尾不能带空格。另外该错误时 HTTP 状态码仍是 200,程序里必须按返回字段判断成败,不能只看 HTTP 状态码。
Q2:-profile 直接传了数字 ID(如 1001)报错
-profile 必须传 Web Service 返回的 ProfileEncryptedParam 完整加密串,不是数字 Profile ID。数字 ID 只在调用接口时使用。
Q3:路径里有中文或空格,加密失败?
路径经 Base64 传输,中文与空格本身是支持的。关键是编码时必须使用 UTF-8:Windows 记事本 / cmd 默认可能是 ANSI(GBK)编码,会导致 Base64 解码后路径错乱。推荐在程序中按第 6 节的方法以 UTF-8 编码(PHP 源文件保存为 UTF-8 后直接 base64_encode() 即可;存量 GBK 编码的字符串可先用 iconv('GBK', 'UTF-8', $path) 或 mb_convert_encoding() 转码再编码)。
Q4:程序提示输出失败 / 找不到输出目录
输出文件的父目录必须事先创建(如 mkdir -p ./output)。同时确认运行程序的用户对该目录有写权限。
Q5:macOS 提示「无法打开,因为无法验证开发者」
该程序未做 Apple 公证。首次运行被 Gatekeeper 拦截时,任选其一: ① 终端执行 xattr -d com.apple.quarantine ./drm-x5-encrypt-sdk-macos-arm64 去除隔离标记; ② 或在「系统设置 → 隐私与安全性」中点击「仍要打开」。
Q6:Linux 运行提示无法执行(Permission denied 或格式错误)
先执行 chmod +x drm-x5-encrypt-sdk-linux-x86_64;若提示无法执行二进制文件,请确认服务器是 x86_64 架构(uname -m 查看)。当前包仅提供 x86_64 版本,ARM 架构服务器请联系海海软件获取。
Q7:com 和 cn 应该选哪个?选错了会怎样?
与您的 DRM-X 账号所属平台一致:国际版账号用 com(接口也调 5.drm-x.com),中国版账号用 cn(接口也调 5.drm-x.cn)。两者不一致会导致集成验证失败,或加密参数与平台不匹配。
Q8:加密后的文件如何验证?
将输出文件在 DRM-X 5.0 演示播放器 / 您集成的播放器中打开,确认:未授权时无法播放;在后台为测试用户授权后可正常播放。正式批量加密前建议先小规模验证。
9注意事项与最佳实践
- 保留原始文件:输出请使用新的位置或新文件名(如加 _P 后缀),避免覆盖原始视频。
- 先小后大:新模板、新服务器首次使用时,先用一个短小的测试视频跑通「取参数 → 加密 → 播放授权」全流程,再批量执行。
- 参数不要手工改动:-profile 是 Base64 加密串,复制时务必完整(首尾不能多空格、不能折行截断)。
- 集成服务验证码保密:WebServiceAuthStr 仅保存在服务器端配置中;网页工具类程序不要部署到公网。
- 网络要求:加密时服务器需能访问 DRM-X 服务器(国际版 5.drm-x.com / 中国版 5.drm-x.cn),如有防火墙请放行出站 443 端口。
其他 DRM-X 5.0 教程
DRM-X 5.0 介绍视频DRM-X 5.0 新一代数字版权保护平台,抵御虚拟机、采集卡、投屏等盗版手段,支持全平台与全格式加密,配合动态水印、单屏限制、许可证精细管控,为您的数字资产提供端到端安全防护。
立即观看


