harmony 鸿蒙Using AVPlayer to Play DRM Content (ArkTS)
Using AVPlayer to Play DRM Content (ArkTS)
You can call the ArkTS APIs of DRM Kit and Media Kit to implement the playback of DRM-protected content using the AVPlayer.
How to Develop
- Import the DRM Kit and Media Kit modules.
import { drm } from '@kit.DrmKit'
import { media } from '@kit.MediaKit'
- Import the BusinessError module to capture error codes from the DRM Kit APIs.
import { BusinessError } from '@kit.BasicServicesKit'
- Create an AVPlayer instance and set a DRM information listener.
let playerHandle: media.AVPlayer = await media.createAVPlayer()
playerHandle.on('mediaKeySystemInfoUpdate', async (mediaKeySystemInfo: drm.MediaKeySystemInfo[]) => {
console.info('player has received drmInfo signal: ' + JSON.stringify(mediaKeySystemInfo))
// Process DRM information.
// Set a decryption session.
})
- Create MediaKeySystem and MediaKeySession instances based on the UUID in the DRM information.
let mediaKeySystem: drm.MediaKeySystem
let mediaKeySession: drm.MediaKeySession
let drmInfoArr: drm.MediaKeySystemInfo[] = mediaKeySystemInfo
for (let i = 0; i < drmInfoArr.length; i++) {
console.info('drmInfoArr - uuid: ' + drmInfoArr[i].uuid)
console.info('drmInfoArr - pssh: ' + drmInfoArr[i].pssh)
let description: drm.MediaKeySystemDescription[] = drm.getMediaKeySystems();
let solutionName: string = "com.clearplay.drm"
for (let item of description) {
if (drmInfoArr[i].uuid == item.uuid) {
solutionName = item.name
}
}
let isSupported: boolean = drm.isMediaKeySystemSupported(solutionName, "video/mp4");
if (isSupported) {
mediaKeySystem = drm.createMediaKeySystem(solutionName);
mediaKeySession = mediaKeySystem.createMediaKeySession();
}
// Request and process the media key.
}
- Generate a media key request based on the PSSH information in the DRM information and process its response.
let initData: Uint8Array = new Uint8Array(drmInfoArr[i].pssh);
const optionsData: drm.OptionsData[] = [{
name: "optionalDataName",
value: "optionalDataValue"
}]
mediaKeySession.generateMediaKeyRequest("video/mp4", initData, drm.MediaKeyType.MEDIA_KEY_TYPE_ONLINE, optionsData).then(async (licenseRequest) => {
console.info("generateMediaKeyRequest success", licenseRequest.mediaKeyRequestType, licenseRequest.data, licenseRequest.defaultURL);
// Send licenseRequest.data returned by the media key request to the DRM service through a network request to obtain a media key response and process the response.
let licenseResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
mediaKeySession.processMediaKeyResponse(licenseResponse).then((mediaKeyId: Uint8Array) => {
console.info("processMediaKeyResponse success");
}).catch((err:BusinessError) =>{
console.info("processMediaKeyResponse err end", err.code);
});
}).catch((err:BusinessError) =>{
console.info("generateMediaKeyRequest err end", err.code);
});
- Set the decryption session after the media key response is successfully processed.
let svp: boolean = mediaKeySession.requireSecureDecoderModule('video/avc');
playerHandle.setDecryptionConfig(mediaKeySession, svp)
- Destroy the AVPlayer instance and destroy the MediaKeySession and MediaKeySystem instances based on the released event.
playerHandle.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
if (state == 'released') {
mediaKeySession.destroy();
mediaKeySystem.destroy();
}
}
await this.playerHandle.release()
你可能感兴趣的鸿蒙文章
harmony 鸿蒙DRM Development (ArkTS)
harmony 鸿蒙Using AVPlayer to Play DRM Content (C/C++)
harmony 鸿蒙DRM Development (C/C++)
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦