鸿蒙(API 12 Beta3版)【DRM系统管理(ArkTS)】数字版权保护

DRM系统管理(MediaKeySystem)支持MediaKeySystem实例管理、设备DRM证书申请与处理、会话实例管理、离线媒体密钥管理、获取DRM度量统计信息、设备属性等。在使用DRM Kit功能时,先查询设备是否支持对应DRM解决方案的DRM功能。在DRM Kit里DRM解决方案以插件形式存在,所以也叫DRM插件。

开发步骤

  1. 导入相关接口,导入方法如下。

    复制代码
    import { drm } from '@kit.DrmKit';
  2. 导入BusinessError模块,用于获取drm模块相关接口抛出的错误码。

    复制代码
    import { BusinessError } from '@kit.BasicServicesKit';
  3. 查询设备是否支持对应的DRM解决方案。

    说明

    如果查询为false,说明该设备不支持对应的DRM解决方案。

    复制代码
    let isSupported: boolean = drm.isMediaKeySystemSupported("com.wiseplay.drm", "video/avc", drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
  4. (可选)获取设备上DRM解决方案的名称和唯一标识的列表。

    说明

    如果查询出的数组为空,说明该设备中不存在支持的DRM解决方案。

    复制代码
    let description: drm.MediaKeySystemDescription[] = drm.getMediaKeySystems();
  5. 创建MediaKeySystem实例。

    说明

    如果如果创建失败则返回undefined,说明该设备不支持DRM能力。

    复制代码
    let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.wiseplay.drm");
  6. (可选)获取指定DRM解决方案名称对应的唯一标识。

    说明

    如果查询出的uuid的长度为0,说明该设备中不存在支持的DRM解决方案。

    复制代码
    let uuid: string = drm.getMediaKeySystemUuid("com.wiseplay.drm");
  7. (可选)设置和获取DRM解决方案支持属性值。

    // DRM解决方案支持属性设置时,设置DRM解决方案支持的字符串类型的属性值
    mediaKeySystem.setConfigurationString("configName", "configValue");
    // 获取字符串类型的属性值
    let configValueString : string = mediaKeySystem.getConfigurationString("version");
    let configValueUint8ArrayA: Uint8Array = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
    // DRM解决方案支持属性设置时,设置DRM解决方案支持的字符数组类型的属性值
    mediaKeySystem.setConfigurationByteArray("Uint8ArrayConfigName", configValueUint8ArrayA);
    // 获取字符数组类型的属性值
    let configValueUint8ArrayB: Uint8Array = mediaKeySystem.getConfigurationByteArray("Uint8ArrayConfigName");

  8. (可选)获取设备支持的最大内容保护级别。

    let contentProtectionLevel: drm.ContentProtectionLevel = drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_UNKNOWN;
    try {
    contentProtectionLevel = mediaKeySystem.getMaxContentProtectionLevel();
    } catch (err) {
    let error = err as BusinessError;
    console.error(getMaxContentProtectionLevel ERROR: ${error});
    }

  9. 状态监听。

    监听MediaKeySystem设备DRM证书请求事件。

    通过注册的keySystemRequired回调函数监听设备DRM证书请求,MediaKeySystem创建成功时即可监听,需要设备DRM证书时触发。

    mediaKeySystem.on('keySystemRequired', (eventInfo: drm.EventInfo) => {
    console.log('keySystemRequired' + 'extra:' + eventInfo.extraInfo + ' data:' + eventInfo.info);
    });

  10. (可选)获取设备DRM证书状态。

    复制代码
    let certificateStatus: drm.CertificateStatus = mediaKeySystem.getCertificateStatus();
  11. 生成设备DRM证书请求。

DRM解决方案创建MediaKeySession会话时,如果没有设备DRM证书会触发DRM证书请求事件,此时,先获取设备上设备DRM证书状态,若设备上没有DRM证书或DRM证书状态异常(状态不是drm.CertificateStatus.CERT_STATUS_PROVISIONED),生成设备DRM证书请求。

复制代码
  if(certificateStatus != drm.CertificateStatus.CERT_STATUS_PROVISIONED){
    mediaKeySystem.generateKeySystemRequest().then(async (drmRequest: drm.ProvisionRequest) => {
      console.info("generateKeySystemRequest success", drmRequest.data, drmRequest.defaultURL);
    }).catch((err:BusinessError) =>{
        console.info("generateKeySystemRequest err end", err.code);
     });
  } else {
    console.info("The certificate already exists.");
  }
  1. 处理设备DRM证书响应。

在将设备DRM证书请求发送到DRM服务获取设备DRM证书请求响应后,处理设备DRM证书响应。

复制代码
  // 将设备DRM证书请求返回的drmRequest.data通过网络请求发送给DRM证书服务获取设备DRM证书请求响应,设置设备DRM证书请求响应
  let provisionResponseByte = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
  mediaKeySystem.processKeySystemResponse(provisionResponseByte).then(() => {
    console.info("processKeySystemResponse success");
  }).catch((err:BusinessError) =>{
    console.info("processKeySystemResponse err end", err.code);
  });
  1. 创建MediaKeySession会话。

    创建指定内容保护级别的MediaKeySession会话、或创建DRM解决方案默认内容保护级别的MediaKeySession会话。

    复制代码
    let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
  2. (可选)获取离线媒体密钥标识列表,媒体密钥标识用于对离线媒体密钥的管理。

    复制代码
    let offlineMediaKeyIds: Uint8Array[] = mediaKeySystem.getOfflineMediaKeyIds();
  3. (可选)获取离线媒体密钥状态。

    try {
    let offlineMediaKeyStatus: drm.OfflineMediaKeyStatus = mediaKeySystem.getOfflineMediaKeyStatus(offlineMediaKeyIds[0]);
    } catch (err) {
    let error = err as BusinessError;
    console.error(getOfflineMediaKeyStatus ERROR: ${error});
    }

  4. (可选)移除离线媒体密钥。

    try {
    mediaKeySystem.clearOfflineMediaKeys(offlineMediaKeyIds[0]);
    } catch (err) {
    let error = err as BusinessError;
    console.error(clearOfflineMediaKeys ERROR: ${error});
    }

  5. (可选)获取DRM度量记录,包括当前会话数、插件版本信息、解密次数和解密失败次数等。

    复制代码
    let statisticKeyValue: drm.StatisticKeyValue[] = mediaKeySystem.getStatistics();
  6. 销毁MediaKeySession实例。

    完成加密媒体解密,MediaKeySession实例不再使用时,销毁MediaKeySession实例。

    // MediaKeySession实例使用完需要进行资源释放
    mediaKeySession.destroy();

  7. 销毁MediaKeySystem实例。

    完成DRM功能使用,MediaKeySystem实例不再使用,销毁MediaKeySystem实例。

    // MediaKeySystem实例使用完需要进行资源释放
    mediaKeySystem.destroy();

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档 》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

总结

鸿蒙---作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

相关推荐
万少1 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
用户962377954485 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机8 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机8 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544810 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star10 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544813 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
Huang兄15 小时前
鸿蒙-List和Grid拖拽排序:仿微信小程序删除效果
harmonyos·arkts·arkui
anyup1 天前
🔥2026最推荐的跨平台方案:H5/小程序/App/鸿蒙,一套代码搞定
前端·uni-app·harmonyos
Ranger09292 天前
鸿蒙开发新范式:Gpui
rust·harmonyos