# Interface (MediaKeySession) > **NOTE** > > The initial APIs of this module are supported since API version 11. Newly added APIs will be marked with a superscript to indicate their earliest API version. MediaKeySession implements media key management. Before calling any API in MediaKeySession, you must use [createMediaKeySession](arkts-apis-drm-MediaKeySystem.md#createmediakeysession) to create a MediaKeySession instance. ## Modules to Import ```ts import { drm } from '@kit.DrmKit'; ``` ## generateMediaKeyRequest generateMediaKeyRequest(mimeType: string, initData: Uint8Array, mediaKeyType: number, options?: OptionsData[]): Promise Generates a media key request. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mimeType | string | Yes | MIME type, which is determined by the DRM solution. | | initData | Uint8Array | Yes | Initial data. | | mediaKeyType| number | Yes | Type of the media key. The value **0** means an online media key, and **1** means an offline media key.| | options | [OptionsData[]](arkts-apis-drm-i.md#optionsdata) | No | Optional data. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | Promise<[MediaKeyRequest](arkts-apis-drm-i.md#mediakeyrequest)\> | Promise used to return the media key request generated. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 data is the descriptive header of the copyright protection system and is encapsulated in encrypted streams. Specifically, in MP4 file, the PSSH data is found within the PSSH box; for DASH streams, the PSSH data is located in the MPD and MP4 PSSH box; for HLS+TS streams, the PSSH data is located in the M3U8 file and each TS segment. Pass in the actual value. 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 Processes a media key response. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | response | Uint8Array | Yes | Media key response. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | Promise | Promise used to return the media key IDs. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 is obtained from the DRM service. Pass in the actual value obtained. 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[] Checks the status of the media keys in use. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | [MediaKeyStatus[]](arkts-apis-drm-i.md#mediakeystatus) | Media key status. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **Example** ```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 Clears the media keys in use. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **Example** ```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 is obtained from the DRM service. Pass in the actual value obtained. 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 Generates a request to release offline media keys. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | Yes | Array holding the IDs of offline media keys. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | Promise | Promise used to return the request generated if the DRM solution on the device supports offline media key release. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 is the return value of processMediaKeyResponse or getOfflineMediaKeyIds. Pass in the actual data returned. 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 Processes a response to a request for releasing offline media keys. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | Yes | Array holding the IDs of offline media keys. | | response | Uint8Array | Yes | Response to the request for releasing offline media keys. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | Promise | Promise used to return the result if the DRM solution on the device supports offline media key release. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 is the return value of processMediaKeyResponse or getOfflineMediaKeyIds. Apply for memory based on the actual length. 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 is obtained from the DRM service. Apply for memory based on the actual length. 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 Restores offline media keys. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | Yes | Array holding the IDs of offline media keys. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | Promise | Promise | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 is the return value of processMediaKeyResponse or getOfflineMediaKeyIds. Pass in the actual data returned. 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 Obtains the content protection level of this media key session. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | [ContentProtectionLevel](arkts-apis-drm-e.md#contentprotectionlevel) | Content protection level. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **Example** ```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 Checks whether secure decoding is required. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mimeType | string | Yes | MIME type, which is determined by the DRM solution. | **Return value** | Type | Description | | ----------------------------------------------- | ---------------------------- | | boolean | Whether secure decoding is required. **true** if required, **false** otherwise. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Subscribes to events indicating that the application requests a media key. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keyRequired'**. This event is triggered when the application requires a media key.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | Yes | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Unsubscribes from events indicating that the application requests a media key. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keyRequired'**.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | No | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Subscribes to events indicating that a media key expires. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keyExpired'**. This event is triggered when a media key expires.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | Yes | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Unsubscribes from events indicating that a media key expires. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keyExpired'**.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | No | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Subscribes to vendor-defined events. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'vendorDefined'**. This event is triggered when a vendor-defined event occurs.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | Yes | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Unsubscribes from vendor-defined events. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'vendorDefined'**.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | No | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Subscribes to events indicating that a media key updates on expiry. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'expirationUpdate'**. This event is triggered when a media key updates on expiry.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | Yes | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Unsubscribes from events indicating that a media key updates on expiry. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'expirationUpdate'**.| | callback | (eventInfo: \<[EventInfo](arkts-apis-drm-i.md#eventinfo)\>) => void | No | Callback used to return the event information. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Subscribes to events indicating that a media key changes. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keysChange'**. This event is triggered when a media key changes.| | callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) | Yes | Callback used to return the event information, including the lists of key IDs, statuses, and availability. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Unsubscribes from events indicating that a media key changes. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Parameters** | Name | Type | Mandatory| Description | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | Yes | Event type. The value is fixed at **'keysChange'**.| | callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) | No | Callback used to return the event information, including the lists of key IDs, statuses, and availability. | **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 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 | **Example** ```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 Destroys this MediaKeySession instance. **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.Multimedia.Drm.Core **Error codes** For details about the error codes, see [DRM Error Codes](errorcode-drm.md). | ID | Error Message | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **Example** ```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}`); } ```