DRM-X 5.0 加密 SDK 使用文档

面向客户技术人员 —— 如何在自己的服务器 / 网站上,通过命令行调用加密工具完成视频加密

DRM-X 5.0 加密 SDK 是一个基于命令行的加密工具,用于对视频文件进行加密保护。

更多教程
DRM-X 5.0 加密 SDK 使用文档

DRM-X 5.0 加密 SDK 使用文档

下载 | 8.61 MB

1SDK 包内容

解压 DRM-X5.0_Encryption_SDK 压缩包后,目录内包含以下文件:

文件说明
drm-x5-encrypt-sdk.exeWindows 加密程序(x64)
drm-x5-encrypt-sdk-linux-x86_64Linux 加密程序(x86_64,静态链接,无动态库依赖,CentOS / Ubuntu 可直接运行)
drm-x5-encrypt-sdk-macos-x86_64macOS 加密程序(Intel 芯片,最低 macOS 11.0)
drm-x5-encrypt-sdk-macos-arm64macOS 加密程序(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 集成验证使用,需高级版及以上账户
WebServiceAuthStrWeb Service 集成验证码,后台「网站集成参数设置」中查看
ProfileID许可证模板 ID(数字),指定本次加密使用哪个许可证模板

3.2 服务器环境要求

平台要求
WindowsWindows 7 / Server 2008 R2 及以上(x64)
Linuxx86_64 架构(CentOS 7+ / Ubuntu 16.04+ 等主流发行版),静态链接无需安装依赖
macOSmacOSmacOS 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)
SOAPActionhttp://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—状态 / 消息文本。注意:无论成功失败,HTTP 状态码都是 200,必须检查该字段内容以及三个参数值是否非空来判断是否成功

4.4 接口调用示例(PHP / SoapClient)

本接口是标准的 SOAP 1.1 Web Service,任何语言都可以调用,调用方式统一为:向 4.1 节的端点 POST SOAP 报文(或由 SOAP 客户端加载 ?WSDL 自动生成报文),传入 4.2 节的参数,再从响应中取 4.3 节的三个字段。各语言可用的工具例如:

语言 / 平台常用 SOAP 客户端
PHP内置 SoapClient 类(本文示例,WSDL 模式)
JavaJAX-WS(wsimport)、Apache Axis2、Apache CXF
Pythonzeep、suds
C# / .NETVisual Studio「添加服务引用」,或 SvcUtil
Node.jssoap 包

下面以 PHP 的 SoapClient 为例演示完整调用过程。将代码保存为 get_params.php 放在服务器上运行(PHP 7.4+,启用 soap 扩展),即可打印出三条命令行参数值:

<?php
// ========== 配置区(按实际情况修改)==========
$wsdl              = 'https://5.drm-x.com/haihaisoftlicenseservice.asmx?WSDL';  // 中国版改为 https://5.drm-x.cn/...
$adminEmail        = 'admin@example.com';
$webServiceAuthStr = '您的集成服务验证码';
$profileID         = '1001';
$input             = '/home/video/course01.mp4';
$output            = '/home/video/encrypted/course01_P.mp4';

// ========== 创建 SoapClient(WSDL 模式,报文自动生成)==========
$client = new SoapClient($wsdl, [
    'soap_version'       => SOAP_1_1,
    'connection_timeout' => 20,
    'trace'              => true,          // 开启后可用 __getLastRequest() 查看原始报文
]);

// ========== 调用接口:方法名即 WSDL 中的操作名,参数为关联数组 ==========
$resp = $client->GetPackagerEncryptedParams([
    'AdminEmail'            => $adminEmail,
    'WebServiceAuthStr'     => $webServiceAuthStr,
    'ProfileID'             => $profileID,
    'Input'                 => $input,
    'Output'                => $output,
    'ProfileEncryptedParam' => '',
    'enc_Input'             => '',
    'enc_Output'            => '',
]);

// ========== 响应自动映射为 stdClass,直接取字段 ==========
$result  = $resp->GetPackagerEncryptedParamsResult;
$profile = $resp->ProfileEncryptedParam;   // 即 -profile 参数值

if ($profile === '') {
    die("获取失败: $result\n");   // 例如集成服务验证码错误的提示会出现在这里
}

// -profile:同一 ProfileID 获取一次即可,建议缓存起来重复使用,
//           不必每加密一个文件都调用一次接口。
echo "-profile = $profile\n";

// 输入 / 输出路径:推荐本地 Base64 编码(UTF-8),不必通过接口获取。
// PHP 源文件以 UTF-8 保存时字符串即为 UTF-8;其他语言同理:先转 UTF-8 字节再 Base64。
// (接口也会返回 enc_Input / enc_Output,与本地编码结果相同,二选一即可。)
$encIn  = base64_encode($input);
$encOut = base64_encode($output);
echo "-input_file_utf8_base64_encoded = $encIn\n";
echo "-output_file_utf8_base64_encoded = $encOut\n";

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)

在终端切换到程序所在目录,先给可执行权限:

# Linux
chmod +x drm-x5-encrypt-sdk-linux-x86_64

# macOS(按实际使用的架构二选一)
chmod +x drm-x5-encrypt-sdk-macos-x86_64
chmod +x drm-x5-encrypt-sdk-macos-arm64

5.2 单文件加密命令模板

Windows (cmd / PowerShell):

drm-x5-encrypt-sdk.exe -server_domain com -profile <ProfileEncryptedParam返回值> -input_file_utf8_base64_encoded <输入路径的Base64> -output_file_utf8_base64_encoded <输出路径的Base64>

Linux:

./drm-x5-encrypt-sdk-linux-x86_64 -server_domain com -profile <ProfileEncryptedParam返回值> -input_file_utf8_base64_encoded <输入路径的Base64> -output_file_utf8_base64_encoded <输出路径的Base64>

macOS:

./drm-x5-encrypt-sdk-macos-arm64 -server_domain com -profile >ProfileEncryptedParam返回值> -input_file_utf8_base64_encoded >输入路径的Base64> -output_file_utf8_base64_encoded >输出路径的Base64>

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:

drm-x5-encrypt-sdk.exe -server_domain com -profile UMuAZfLDToYGfmigBsRbklanDHRBoRrLrsTkI_W52KVnPcC-ZL-KU4UssGDA8Uja-4URQqsxw7WPsZL-CPWYQQj1jdwQsSbLri9_Q3YvPysCfMNtXKBHZvhrWlcsmNMg8FVqm7KFgr4ODrSQxAXgFV -input_file_utf8_base64_encoded RDpcSmFzb25caW5wdXRcMDEtdGVzdFZpZGVvLm1wNA== -output_file_utf8_base64_encoded RDpcSmFzb25cb3V0cHV0XDAxLXRlc3RWaWRlb19QLm1wNA==

其中 RDpcSmFzb25c... 解码后为 D:\Jason\input\01-testVideo.mp4。

Linux:

./drm-x5-encrypt-sdk-linux-x86_64 -server_domain com -profile s5Gls5QDAz4LyC_USkG9rY0fyDU4cN90HhgvOe6-67OUn92UFWRFdv4N_7Qx-Ipxa_M5d123ZQEesB1BPnGkUs-HkFTwI1pZEwaj133IRLhaxuUfOpBBROkKZpPk_QxBKvoxiX4NVL-Rs6g457jWsV -input_file_utf8_base64_encoded Li9pbnB1dC8wMS1saW51eC1lbmNyeXB0LXZpZGVvLm1wNA== -output_file_utf8_base64_encoded Li9vdXRwdXQvMDEtbGludXgtZW5jcnlwdC12aWRlbzJfUC5tcDQ=

即加密 ./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)
PHPbase64_encode('/home/video/course01.mp4')
JavaBase64.getEncoder().encodeToString(path.getBytes(StandardCharsets.UTF_8))
Pythonbase64.b64encode(path.encode('utf-8')).decode()
C# / .NETConvert.ToBase64String(Encoding.UTF8.GetBytes(path))
Node.jsBuffer.from(path, 'utf8').toString('base64')
Linux / macOS shellprintf '%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 节的接口获取):

<?php
// ...接 4.4 节,已取得 $profile / $encIn / $encOut 后:

$packager = '/opt/drmx5/drm-x5-encrypt-sdk-linux-x86_64';   // 加密程序绝对路径
$domain   = 'com';                                        // com=国际版,cn=中国版

// 确保输出目录存在(程序不会自动创建)
$outDir = dirname(base64_decode($encOut));
if (!is_dir($outDir)) { mkdir($outDir, 0755, true); }

// 组装并执行命令(escapeshellarg 防注入,参数值本身是 Base64 不含空格,双重保险)
$cmd = $packager
     . ' -server_domain '   . escapeshellarg($domain)
     . ' -profile '         . escapeshellarg($profile)
     . ' -input_file_utf8_base64_encoded '  . escapeshellarg($encIn)
     . ' -output_file_utf8_base64_encoded ' . escapeshellarg($encOut);

exec($cmd, $outLines, $exitCode);
echo '退出码: ' . $exitCode . PHP_EOL . implode(PHP_EOL, $outLines);

Shell 批量加密脚本示例(Linux,逐个文件取参数后加密):

#!/bin/bash
# batch_encrypt.sh —— 将 input 目录下所有 mp4 批量加密到 output 目录
ADMIN_EMAIL="admin@example.com"
AUTH_STR="您的集成服务验证码"
PROFILE_ID="1001"
PACKAGER="./drm-x5-encrypt-sdk-linux-x86_64"
DOMAIN="com"   # 中国版改为 cn

mkdir -p ./output
for f in ./input/*.mp4; do
  name=$(basename "$f" .mp4)
  out="./output/${name}_P.mp4"
  # 路径本地 Base64(UTF-8)
  in_b64=$(printf '%s' "$f"  | base64 -w0)
  out_b64=$(printf '%s' "$out" | base64 -w0)
  # profile 加密串建议由您的服务端调用 Web Service 后缓存复用(同一 ProfileID 可重复使用)
  "$PACKAGER" -server_domain "$DOMAIN" -profile "$PROFILE_ENC" \
      -input_file_utf8_base64_encoded "$in_b64" \
      -output_file_utf8_base64_encoded "$out_b64"
  echo "[done] $out"
done

推荐做法:同一个 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 Introduction VideoDRM-X 5.0 介绍视频

DRM-X 5.0 新一代数字版权保护平台,抵御虚拟机、采集卡、投屏等盗版手段,支持全平台与全格式加密,配合动态水印、单屏限制、许可证精细管控,为您的数字资产提供端到端安全防护。

立即观看
DRM-X 5.0 ZJGet Windows Video Tutorial如何使用 DRM-X 5.0 ZJGet(Windows)保护视频

本视频将为您演示如何通过 ZJGet 浏览器在 Windows 系统下完成文件加密。

立即观看
DRM-X 5.0 ZJGet macOS Video Tutorial如何使用 DRM-X 5.0 ZJGet(macOS)保护视频

本视频将为您演示如何通过 ZJGet 浏览器在 macOS 系统下完成文件加密。

立即观看
DRM-X 5.0 ZJGet Windows TutorialDRM-X 5.0 ZJGet Windows 快速入门

本视频将为您演示如何通过 ZJGet 浏览器在 Windows 下载安装和打开加密文件。

立即观看
DRM-X 5.0 ZJGet Text TutorialDRM-X 5.0 ZJGet 用户指南

ZJGet浏览器的功能操作指南。这份教程带你轻松掌握ZJGet浏览器的核心功能与实用技巧。

立即观看
DRM-X 5.0 ZJGet Graphic Tutorial AnswersDRM-X 5.0 ZJGet 常见问题解答

ZJGet浏览器使用中的常见问题及解答。这里汇集了最实用的问答,帮你扫清使用障碍。

立即观看