-
Notifications
You must be signed in to change notification settings - Fork 0
/
getChallenge.js
40 lines (37 loc) · 1.41 KB
/
getChallenge.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
export default async function() {
let keySystemAccess;
try{
keySystemAccess = await navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
} catch {
config[0]['sessionTypes'] = ['temporary']
keySystemAccess = await navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
}
let challenge = await getChallenge(keySystemAccess);
return challenge
};
// Tears of Steel Init data Widevine
let initData = Uint8Array.from(atob('AAAARHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACQIARIBMRoNd2lkZXZpbmVfdGVzdCIKMjAxNV90ZWFycyoCU0Q='), c => c.charCodeAt(0))
// Widevine CDM config MediaKeyAccess default
let config = [{
initDataTypes: ['cenc'],
sessionTypes: ['persistent-license'],
videoCapabilities: [{
contentType: 'video/mp4; codecs="avc1.640029"'
}],
audioCapabilities: [{
contentType: 'audio/mp4; codecs="mp4a.40.2"'
}]
}];
async function getChallenge(keySystemAccess) {
return new Promise((resolve, reject) => {
try{
keySystemAccess.createMediaKeys().then(mediaKeys => {
let keySession = mediaKeys.createSession(config[0]['sessionTypes'])
keySession.addEventListener("message", event => resolve(event.message));
keySession.generateRequest("cenc", initData)
})
} catch(err) {
reject("Unable to create MediaKeys : " + err)
}
})
}