@xnstream/player-sdk
Version:
XStream Player SDK - A powerful video player SDK for streaming content
54 lines • 1.78 kB
JavaScript
import { generateSignature, base64Encode, generateRandomSalt } from './crypto';
import { unixTimestamp, getRandomSpecialCharacter, shuffleArray } from './utils';
const generateMediaSignature = (context, aps) => {
const nce = generateRandomSalt();
const at = unixTimestamp();
const ss = getRandomSpecialCharacter();
const csparams = shuffleArray(['app_id', 'at', 'nce', 'slo']);
const resource = context.rs;
const message = csparams.map(el => {
switch (el) {
case 'app_id':
return context.app_id;
case 'at':
return at;
case 'nce':
return nce;
case 'slo':
return context.slo;
default:
return '';
}
});
const sigMessage = [...message, resource].join(ss);
return {
app_id: context.app_id,
platform: 'web',
device: context.device,
csparams: csparams.join(','),
resource: context.rs,
ssparams: ['ts', 'exp'],
hservice: 'edge_nova_sec',
slo: base64Encode(new TextEncoder().encode(context.slo)),
ss: ss,
at: at,
nce: nce,
sid: context.sid,
sig: base64Encode(generateSignature(sigMessage, aps)),
};
};
export async function fetchMediaSession(baseUrl, context, aps) {
const sig = generateMediaSignature(context, aps);
const response = await fetch(`${baseUrl}/playback/url`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(sig),
});
if (!response.ok) {
throw new Error('Failed to fetch media session');
}
return response.json();
}
//# sourceMappingURL=mediaSession.js.map