@faiber/faiber-drm (英语)
被打入了媒体存储,被保护回放,可重复上传,DRM包装,内容库,组成,分析,以及知识同步.
npm install @faiber/faiber-drm
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个已存在的记录并省略缺失的记录.
对于大文件,创建可更新的上传会话,发送编号为原始字节的部分,然后完成:
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 包含与 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赠款.