# Interface (MediaKeySession) > **说明:** > > 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 支持媒体密钥管理。在调用MediaKeySession方法之前,必须使用[createMediaKeySession](arkts-apis-drm-MediaKeySystem.md#createmediakeysession)获取一个MediaKeySession实例。 ## 导入模块 ```ts import { drm } from '@kit.DrmKit'; ``` ## generateMediaKeyRequest generateMediaKeyRequest(mimeType: string, initData: Uint8Array, mediaKeyType: number, options?: OptionsData[]): Promise 生成媒体密钥请求。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- |--------------------------------------------------------------------------------------------------------| | mimeType | string | 是 | 媒体类型,DRM解决方案名称,可通过[isMediaKeySystemSupported](arkts-apis-drm-f.md#drmismediakeysystemsupported-1)查询。 | | initData | Uint8Array | 是 | 初始数据。 | | mediaKeyType| number | 是 | 媒体密钥类型。0表示在线,1表示离线。 | | options | [OptionsData[]](arkts-apis-drm-i.md#optionsdata) | 否 | 可选数据。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise<[MediaKeyRequest](arkts-apis-drm-i.md#mediakeyrequest)\> | Promise对象,媒体密钥请求。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // pssh数据为版权保护系统描述头,封装在加密码流中,mp4文件中位于pssh box、dash码流中位于mpd及mp4的pssh box、hls+ts的码流位于m3u8及每个ts片段中,请按实际值传入。 let uint8pssh = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateMediaKeyRequest("video/avc", uint8pssh, drm.MediaKeyType.MEDIA_KEY_TYPE_ONLINE).then((mediaKeyRequest: drm.MediaKeyRequest) =>{ console.log('generateMediaKeyRequest' + mediaKeyRequest); }).catch((err: BusinessError) => { console.error(`generateMediaKeyRequest: ERROR: ${err}`); }); ``` ## processMediaKeyResponse processMediaKeyResponse(response: Uint8Array): Promise 处理媒体密钥响应。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | response | Uint8Array | 是 | 媒体密钥响应。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,媒体密钥标识。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入。 let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => { console.log('processMediaKeyResponse:' + mediaKeyId); }).catch((err: BusinessError) => { console.error(`processMediaKeyResponse: ERROR: ${err}`); }); ``` ## checkMediaKeyStatus checkMediaKeyStatus(): MediaKeyStatus[] 检查当前媒体密钥状态。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeyStatus[]](arkts-apis-drm-i.md#mediakeystatus) | 当前媒体密钥状态值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let keyStatus: drm.MediaKeyStatus[] = mediaKeySession.checkMediaKeyStatus(); } catch (err) { let error = err as BusinessError; console.error(`checkMediaKeyStatus ERROR: ${error}`); } ``` ## clearMediaKeys clearMediaKeys(): void 清除当前媒体密钥。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入。 let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => { console.log('processMediaKeyResponse:' + mediaKeyId); }).catch((err: BusinessError) => { console.error(`processMediaKeyResponse: ERROR: ${err}`); }); try { mediaKeySession.clearMediaKeys(); } catch (err) { let error = err as BusinessError; console.error(`clearMediaKeys ERROR: ${error}`); } ``` ## generateOfflineReleaseRequest generateOfflineReleaseRequest(mediaKeyId: Uint8Array): Promise 生成离线媒体密钥释放请求。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回离线媒体密钥释放请求。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入。 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => { console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest); }).catch((err: BusinessError) => { console.error(`generateOfflineReleaseRequest: ERROR: ${err}`); }); ``` ## processOfflineReleaseResponse processOfflineReleaseResponse(mediaKeyId: Uint8Array, response: Uint8Array): Promise 处理离线媒体密钥释放响应。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | | response | Uint8Array | 是 | 离线媒体密钥释放响应。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际长度申请内存。 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => { console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest); }).catch((err: BusinessError) => { console.error(`generateOfflineReleaseRequest: ERROR: ${err}`); }); // offlineReleaseResponse是从DRM服务获取的离线媒体密钥释放响应,请按实际长度申请内存。 let offlineReleaseResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processOfflineReleaseResponse(mediaKeyId, offlineReleaseResponse).then(() => { console.log('processOfflineReleaseResponse'); }).catch((err: BusinessError) => { console.error(`processOfflineReleaseResponse: ERROR: ${err}`); }); ``` ## restoreOfflineMediaKeys restoreOfflineMediaKeys(mediaKeyId: Uint8Array): Promise 恢复离线媒体密钥。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际数据传入。 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.restoreOfflineMediaKeys(mediaKeyId).then(() => { console.log("restoreOfflineMediaKeys"); }).catch((err: BusinessError) => { console.error(`restoreOfflineMediaKeys: ERROR: ${err}`); }); ``` ## getContentProtectionLevel getContentProtectionLevel(): ContentProtectionLevel 获取当前会话的内容保护级别。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [ContentProtectionLevel](arkts-apis-drm-e.md#contentprotectionlevel) | 返回当前会话内容保护级别。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let contentProtectionLevel: drm.ContentProtectionLevel = mediaKeySession.getContentProtectionLevel(); } catch (err) { let error = err as BusinessError; console.error(`getContentProtectionLevel ERROR: ${error}`); } ``` ## requireSecureDecoderModule requireSecureDecoderModule(mimeType: string): boolean 是否需要安全解码。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- |--------------------------------------------------------------------------------------------------------| | mimeType | string | 是 | 媒体类型,支持的媒体类型取决于DRM解决方案,可通过[isMediaKeySystemSupported](arkts-apis-drm-f.md#drmismediakeysystemsupported-1)查询。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | boolean | 是否需要安全解码,true表示需要安全解码,false表示不需要安全解码。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let status: boolean = mediaKeySession.requireSecureDecoderModule("video/avc"); } catch (err) { let error = err as BusinessError; console.error(`requireSecureDecoderModule ERROR: ${error}`); } ``` ## on('keyRequired') on(type: 'keyRequired', callback: (eventInfo: EventInfo) => void): void 监听密钥请求事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 事件类型,固定为'keyRequired',当播放DRM节目需要获取媒体密钥时触发。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keyRequired', (eventInfo: drm.EventInfo) => { console.log('keyRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ## off('keyRequired') off(type: 'keyRequired', callback?: (eventInfo: EventInfo) => void): void 注销密钥请求事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyRequired'。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keyRequired'); ``` ## on('keyExpired') on(type: 'keyExpired', callback: (eventInfo: EventInfo) => void): void 监听密钥过期事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyExpired'。密钥过期时触发。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keyExpired', (eventInfo: drm.EventInfo) => { console.log('keyExpired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ## off('keyExpired') off(type: 'keyExpired', callback?: (eventInfo: EventInfo) => void): void 注销密钥过期事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyExpired'。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keyExpired'); ``` ## on('vendorDefined') on(type: 'vendorDefined', callback: (eventInfo: EventInfo) => void): void 监听DRM解决方案自定义事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件,固定为'vendorDefined'。自定义事件发生时触发。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('vendorDefined', (eventInfo: drm.EventInfo) => { console.log('vendorDefined ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ## off('vendorDefined') off(type: 'vendorDefined', callback?: (eventInfo: EventInfo) => void): void 注销DRM解决方案自定义事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件,固定为'vendorDefined'。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('vendorDefined'); ``` ## on('expirationUpdate') on(type: 'expirationUpdate', callback: (eventInfo: EventInfo) => void): void 监听密钥过期更新事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'expirationUpdate'。密钥过期更新时触发。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('expirationUpdate', (eventInfo: drm.EventInfo) => { console.log('expirationUpdate ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ## off('expirationUpdate') off(type: 'expirationUpdate', callback?: (eventInfo: EventInfo) => void): void 注销过期更新事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'expirationUpdate'。 | | callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('expirationUpdate'); ``` ## on('keysChange') on(type: 'keysChange', callback: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void 监听密钥变化事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keysChange'。密钥变化时触发。 | | callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) => void | 是 | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keysChange', (keyInfo: drm.KeysInfo[], newKeyAvailable: boolean) => { for (let i = 0; i < keyInfo.length; i++) { console.log('keysChange' + 'keyId:' + keyInfo[i].keyId + ' data:' + keyInfo[i].value); } }); ``` ## off('keysChange') off(type: 'keysChange', callback?: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void 注销密钥变化事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keysChange'。 | | callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) => void | 否 | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keysChange'); ``` ## destroy destroy(): void 销毁MediaKeySession实例。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { mediaKeySession.destroy(); } catch (err) { let error = err as BusinessError; console.error(`mediaKeySession destroy ERROR: ${error}`); } ```