# DRM-X CLI Packager：命令与故障恢复

对源视频进行打包加密，使用受保护的凭据运行自动化任务，并查看各阶段进度。上传中断后可以继续上传，无需重新编码。

加密视频和 DRM 许可证通过不同路径传输

CDN 负责传输加密视频。您的后端检查观看权限，DRM 许可证服务则授权兼容设备解密播放。

- 01**存储 / CDN**

向播放器传输加密媒体。

- 02**您的后端**

确认用户有权观看后，向 DRM-X 请求播放授权。

- 03**DRM-X**

验证播放授权并处理 DRM 许可证请求。

- 04**播放器 + 设备**

使用设备的 DRM 系统获取许可证，并播放加密媒体。

您的后端决定访问; DRM-X 执行已签名的政策。 加密的媒体和DRM 许可证会遵循不同的传送路径 。

## 打开套件中的 CLI[#](#open-the-included-cli)

从 [Package Content](https://6.drm-x.com/console/package-content) 下载完整 Windows 套件并解压，在解压目录中打开 PowerShell。以下命令要求配套的 FFmpeg、FFprobe 和 Shaka 可执行文件与 `drmx-packager.exe` 位于同一目录。

```
.\drmx-packager.exe version
.\drmx-packager.exe help
.\drmx-packager.exe credentials list
.\drmx-packager.exe credentials test --profile "Production"
```

先在 [Desktop Packager](https://docs.drm-x.com/zh-Hans/packaging/desktop) 中创建名为 **Production** 的配置，或将示例中的名称替换为您已保存的配置名称。上传过程中自动续期授权的功能需要 preview.6 或更新版本。



## 对 1080p 源视频进行打包加密[#](#package-a-1080p-master)

将下方的源文件路径、Content ID 和输出路径替换为实际值。输出文件夹必须是新建或空目录。PowerShell 使用行末反引号续行，反引号后不要添加空格。

```
.\drmx-packager.exe package `
  --profile "Production" `
  --content_id "training-2026-001" `
  --content_title "Training session" `
  --input_source "D:\Sources\training.mp4" `
  --encoding_ladder "sd,hd,full-hd" `
  --video_codec h264 --encoding_preset fast `
  --rate_control smart-quality-vbr --max_frame_rate 24 `
  --audio_bitrate_kbps 128 --segment_duration 6 `
  --packaging_profile maximum-compatibility `
  --key_protection shaka-standard --encrypt_audio `
  --drm_systems "widevine,fairplay,playready,wiseplay" `
  --ffmpeg ".\ffmpeg.exe" --ffprobe ".\ffprobe.exe" `
  --shaka ".\packager-win-x64.exe" `
  --upload-concurrency 8 `
  -o "D:\Protected\training-2026-001"
```

此命令会分析源文件、生成所选清晰度的视频、加密输出、验证 Manifest、清理临时的未加密视频，最后上传加密输出包。高于源视频分辨率的档位不会通过放大画面生成。处理 UHD 时，请参阅[4K、8K 与长视频指南](https://docs.drm-x.com/zh-Hans/packaging/large-videos)。

只需保留本地加密输出时，添加 `--no-upload`。要上传到已验证的自有存储，添加 `--storage_connection_id "YOUR-STORAGE-CONNECTION-ID"`。省略该选项时，会使用配置中的默认存储目标。



## 查看处理进度并确认任务完成[#](#understand-progress-and-completion)

分析
读取源文件中的轨道编码
生成各清晰度的视频加密
加密各项输出校验
检查 Manifest上传
上传并发布

上传成功后会报告已验证的对象数量、总字节数、文件清单的 SHA-256 和已注册的 Manifest URL。最后阶段由服务器验证对象大小、Manifest 路径和加密输出包的 KIDs。请保留输出中的 Packaging Session ID，恢复操作时用它识别同一份加密输出包。

桌面工具读取 CLI 输出的结构化进度。自行接入时，添加 `--progress-format ndjson`，按每行一个 JSON 对象进行解析；`percent` 等可选字段可能为 null。即使之前的阶段已完成，只要进程退出码非零，也应将任务视为失败或已取消。



## 恢复上传，无需重新编码[#](#resume-without-re-encoding)

本地加密完成后可使用 `upload`，包括电脑重启后或原 Packaging Access Token 过期后。已保存的配置必须与已完成的加密输出包属于同一个 Site ID。请使用日志中的实际值替换示例中的会话 UUID 和文件夹。

```
.\drmx-packager.exe upload `
  --profile "Production" `
  --session "11111111-2222-4333-8444-555555555555" `
  --input "D:\Protected\training-2026-001" `
  --upload-concurrency 4
```

**保留完整的输出根目录**。如果 Maximum Compatibility 生成了两种加密格式，两者的文件夹都必须保留。对于 1AICLOUD，CLI 会比较远端对象的字节数和 SHA-256 元数据，跳过匹配的对象并继续未完成的上传。未完成的分块对象需要重新上传该对象，已完成的其他对象可以复用。使用自有存储的预签名 URL 时，手动恢复可能会重新传输对象。

遇到限流或临时网络错误时，上传器会等待后重试，并自动续期临时 1AICLOUD 凭据，同时保持存储目标和加密输出包前缀不变。大型对象中失败的分块会单独重试。建议先设置同时上传 4–8 个对象；并发越高不一定越快。恢复前，请停止正在上传同一文件夹的其他进程。

```
.\drmx-packager.exe upload `
  --session "11111111-2222-4333-8444-555555555555" `
  --input "D:\Protected\training-2026-001" --dry-run
```

此预检查只读取本地文件数量和大小，不会连接存储、验证服务端授权或检查加密结果。会话 UUID 仍须符合格式要求。旧版基于会话的流程可以使用有效的 `DRMX_PACKAGING_TOKEN`；如果该 Token 已过期，使用已保存的配置恢复上传更方便。



## 通过受保护的环境凭据运行自动化任务[#](#automate-with-protected-environment-credentials)

无人值守任务可通过安全凭据存储提供 `DRMX_PACKAGER_SITE_ID`、`DRMX_PACKAGER_ACCESS_KEY` 和 `DRMX_PACKAGER_KMS_TOKEN`，并可按需设置 `DRMX_PACKAGER_SERVER`。此模式下不要传入 `--profile`。切勿将真实凭据写入脚本、源代码仓库、命令参数或日志。

每个源文件分别执行一次打包命令，并使用唯一的 Content ID 和空的输出目录。继续下一项任务前，先检查退出码。若打包已完成、只是上传失败，应使用 `upload` 恢复，不要自动重复 `package`。Windows 使用上文列出的配套可执行文件。对于已获准使用的 Linux CLI 安装，使用 `./drmx-packager`、`./ffmpeg`、`./ffprobe` 和 `./packager-linux-x64`，并按所用 Shell 的语法续行。



## 故障排查[#](#troubleshooting)

| 错误消息或现象 | 下一步行动 | 
| --- | --- |

| 上传暂时繁忙或已中断 | 等待自动退避和重试完成。如果重试次数已用尽，请保留输出文件，将并发上传数降至 4 或 2 后恢复上传。 | 

| 401 / 凭据验证失败 | 测试已保存的配置并核对 Site ID。若凭据已撤销，请更换并重新保存凭据。观众的 DRM License Token 不能用于授权打包加密。 | 

| 输出目录必须为空 | 重新编码时请使用新目录。若加密输出包已完成，应使用上传命令恢复，避免重新打包。 | 

| 另一个上传可能正在使用此保护文件夹 | 关闭正在使用该目录的其他上传进程。进程退出后，旁边的锁文件可能仍然存在；只有仍被进程持有的文件锁才会阻止恢复。 | 

| 文件大小、校验和或 Manifest 验证失败 | 保留日志和输出，不要修改 Manifest 或手动发布。请使用原有文件恢复上传；若仍有问题，可向技术支持提供会话 ID 和已脱敏的错误信息。 | 

| 已移除 UHD 清晰度档位 | 源视频分辨率低于该清晰度档位。生成 UHD 输出需要使用实际达到 UHD 分辨率的源视频。 |

<!-- Canonical: https://docs.drm-x.com/zh-Hans/packaging/cli -->
<!-- Language: zh-Hans -->
