# @faiber/faiber-drm 中文文档

规范地址：https://npmcn.com/package/%40faiber/faiber-drm/

版本：2\.7\.0
npm 元数据更新时间：2026-11-04T16:18:11.871Z
中文译文更新时间：2026-11-14T09:12:34.279Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40faiber/faiber-drm
原文对照：https://npmcn.com/package/%40faiber/faiber-drm/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：439 kB，24 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-08-09T15:07:28.509Z
- 最新版本发布：2026-11-04T16:18:11.650Z
- 近 30 天下载量：3802（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：57（近 12 个月 57 个）

## 中文简介

被打入了媒体存储,被保护回放,可重复上传,DRM包装,内容库,组成,分析,以及知识同步.

## 安装

```sh
npm install @faiber/faiber-drm
```

也可以使用：`pnpm add @faiber/faiber-drm`、`yarn add @faiber/faiber-drm`、`bun add @faiber/faiber-drm`

## README

# @faiber/faiber-drm (英语)

被打入了媒体存储,被保护回放,可重复上传,DRM包装,内容库,组成,分析,以及知识同步.

```bash
npm install @faiber/faiber-drm
```

```ts
import { DrmApi, FaiberClient, MemoryTokenProvider } from "@faiber/faiber-drm";

const drm = new DrmApi(new FaiberClient("drm", {
  domains: { drm: "https://drm.example.com" },
  tokenProvider: new MemoryTokenProvider({ accessToken }),
  axios: { timeout: 15_000 },
}));

const page = await drm.media({ search: "intro", media_type: "video", page: 1, size: 30 });
const uploaded = await drm.uploadMedia({ file, filename: "intro.mp4", name: "Introduction", tag_ids: [tagId] });
const original = await drm.playback(uploaded.data.id);
const statuses = await drm.drmStatuses({ ids: uploaded.data.id });
const packages = await drm.mediaPackages(uploaded.data.id);
```

不配置服务源 `/api/v1`或安全 Http `axios: { withCredentials: true }`。被绑定的后端的 IDP 中间软件提取了可信任的身份头并带有开发回落;它本身并不验证Bearer 令牌。 部署在识别网关后 核查身份并控制这些信封 SDK 通过共享发送配置的证书 `FaiberClient` 每一个电话。 公共地位终点不需要身份. 门户授权和本地服务验收需要部署核查.

媒体包括音频、视频和图像。 多段上传使用标准 `FormData`; 元数据字段为文本和 `tag_ids` 是一个 JSON UUID 阵列。 视频上传自动排队包装和可选的抄录. 原始回放是一个签名的URL,有效期为900秒,工作独立于软件包准备状态;存档媒体无法使用. 媒体记录包括无效的抄写,原始文件名,检查和存档时间戳. 批量媒体去除ID,最多按请求顺序返回50个已存在的记录并省略缺失的记录.

对于大文件,创建可更新的上传会话,发送编号为原始字节的部分,然后完成:

```ts
const session = await drm.createUploadSession({
  filename: "lecture.mp4", mime_type: file.type, total_bytes: file.size,
});
for (let start = 0, part = 1; start < file.size; start += session.data.part_size, part++) {
  await drm.uploadPart(session.data.id, part, file.slice(start, start + session.data.part_size));
}
const completed = await drm.completeUpload(session.data.id, {});
```

会议在24小时后结束。 部件编号为1-1000,必须是非空的,并且不能超过 `part_size` (默认为10 MiB,以5–64 MiB为界). 重新装入一个部件取代它的元数据 。 完成检查上传并存储的字节计数总数;重复完成的完成用HTTP 200而不是201返回现有媒体. 提供的校验和是存储的元数据 。 取消返回 HTTP 204.

`packageFile(packageId, "video/segment-1.m4s", { headers: { Range: "bytes=0-1023" } })` 返回原始内容 `ArrayBuffer` 数据并保存 HTTP 200/206,内容类型和范围标题。 包文件和 ClearKey 许可证需要经过认证的共享传输 。 通关卡路径使用原始的非空分;分离器保持不变. 百分率出逃,点倒行走,查询/分解语法和回鞭局部失效. 软件包必须准备好;否则下载返回409。 需要清除密钥 `{ package_id }` 并返回 JWK 临时关键材料; 保持其私密性.

客户端通过 `drm.operations`,具有通用工作流程的方便方法。 每个操作都记录其源许可:媒体,软件包,组成,内容,库,许可证和审计赠款按路线申请. 需要操作设置和复制模型目录 `drm:manage`; 需要永久库删除 `drm:library:delete`。列表的图书馆仅包括公共图书馆;直接的图书馆访问遵循路线许可。 分类和项目删除它们存档,而删除一个库则永久去除其内容和组成. 知识同步/目录 `x-organization-id` UUID 标题, 除非服务器配置默认组织 .

媒体、构成、项目查询、工作、分析和审计活动反馈 `{ data, page, page_size, total_items }`没有额外的信封。 页面从 1 开始,大小为 1 - 100 。 媒体/项目/工作默认为30起,组成/分析为20起,审计为50起。 其他端点返回光记录或数组. 缺失的成分分析返回 JSON `null`; 成功删除不返回正文。 请求保留 snake case 字段 . `category_id: null` 清除混合介质类; 被绑定后端普通嵌入可选字段, 如介质 `folder_id` 和组成 `description` 将JSON视为无变化。 工作流节点/对接必须是数组;嵌入式编辑器数据,历史文档和元数据仍然是被记录的动态JSON. "知识目录"是一个未经修改的上游JSON响应.

每个呼叫都返回完整的Axios响应,并支持请求选项,包括信头,取消信号,超时,证书和适配器. Axios 错误保留后端状态 `{ error }` 用于本地验证(400),授权(401/403),资源缺失(404),冲突(409)和内部故障(500);提取器故障可能使用框架出错机构. 以 Axios 取消错误拒绝取消 。 这个 [完整 Faiber SDK](https://www.npmjs.com/package/@faiber/faiber-ts-sdk) 包含与 `sdk.drm`。 。 。 .

## 预览课堂组成

随着完整的SDK,将任何 LMS 会话行传递给 `sdk.drm.classroomSessionComposition(row, { signal })`。使用的方法 `row.media.drm_mixed_media_id`,与 `row.course_session.drm_mixed_media_id` 作为一个后退, 并返回包含已公布清单的 Axios 完整回复(`data.document` 财务报告和审定财务报表 `data.version`) (中文(简体) ). `drm.compositionManifest(compositionId)` 直接接受身份证明.

两种方法都需要 `drm:composition:read` 并使用DRM客户端认证的运输. 它们独立于教室类型、起始时间、锁和房间供应。 无链接 组合抛出 `TypeError` hTTP 之前; 没有公布的表单返回 404. 名单 是玩家输入,而不是公开的 MP4 URL 。 媒体/包装/许可证使用权保留自己的DRM赠款.

## 常见问题

### @faiber/faiber-drm 是什么？

被打入了媒体存储,被保护回放,可重复上传,DRM包装,内容库,组成,分析,以及知识同步\.

### 如何安装 @faiber/faiber-drm？

在项目目录运行 npm install @faiber/faiber-drm，或使用 pnpm add / yarn add / bun add。

### @faiber/faiber-drm 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @faiber/faiber-drm 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @faiber/faiber-drm 可以商用吗？

@faiber/faiber-drm 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @faiber/faiber-drm 的下载量有多少？

根据 npm 官方下载统计，@faiber/faiber-drm 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,802 次，日均约 127 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @faiber/faiber-drm 还在维护吗？

最新版本 2\.7\.0 发布于 2026/11/05（9 天前）；至今共发布 57 个版本，其中过去 12 个月发布了 57 个；首次发布于 2026/08/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

