Skip to content

Instantly share code, notes, and snippets.

@sahilkashyap64
Created December 11, 2020 07:19
Show Gist options
  • Save sahilkashyap64/2e88ee904903b55f2a62d54f45adf849 to your computer and use it in GitHub Desktop.
Save sahilkashyap64/2e88ee904903b55f2a62d54f45adf849 to your computer and use it in GitHub Desktop.
// source https://jsbin.com
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link href="https://s3.amazonaws.com/cdn.keyos.com/html5/videojs/7.5.4/video-js.min.css" rel="stylesheet">
<script src="https://s3.amazonaws.com/cdn.keyos.com/html5/jquery/3.3.1/jquery.min.js"></script>
<script src="https://s3.amazonaws.com/cdn.keyos.com/html5/videojs/7.5.4/video.min.js"></script>
<script src="https://s3.amazonaws.com/cdn.keyos.com/html5/videojs-contrib-eme/3.5.4/videojs-contrib-eme.min.js"></script>
</head>
<body>
<video id="my-player" class="video-js" controls></video>
<script type="text/javascript">
(function() {
// Init player.
var player = videojs('my-player');
player.eme();
player.on('ready', function() {
// Helper functions.
var base64DecodeUint8Array = function (a) { var b = window.atob(a), c = b.length, d = new Uint8Array(new ArrayBuffer(c)); for (i = 0; i < c; i++)d[i] = b.charCodeAt(i); return d };
var base64EncodeUint8Array = function (a) { for (var d, e, f, g, h, i, j, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", c = "", k = 0; k < a.length;)d = a[k++], e = k < a.length ? a[k++] : Number.NaN, f = k < a.length ? a[k++] : Number.NaN, g = d >> 2, h = (3 & d) << 4 | e >> 4, i = (15 & e) << 2 | f >> 6, j = 63 & f, isNaN(e) ? i = j = 64 : isNaN(f) && (j = 64), c += b.charAt(g) + b.charAt(h) + b.charAt(i) + b.charAt(j); return c };
var arrayToString = function (a) { var b = new Uint16Array(a.buffer); return String.fromCharCode.apply(null, b) };
// Setup hls + fp
var fairplayHlsSrc = {
src: 'https://cdn.streamlytv.com/streamly/ngrp:AETVP.stream_all/playlist.m3u8',
type: 'application/x-mpegURL',
keySystems: {
'com.apple.fps.1_0': {
certificateUri: 'https://fp-keyos.licensekeyserver.com/cert/9754e0cfddc682c21216de3eb4d11885.der',
getContentId: function (emeOptions, initData) {
var contentId = arrayToString(initData);
if (contentId.indexOf("skd://") > -1)
return contentId.split("skd://")[1].substr(0, 32);
throw 'Invalid Content ID format. The format of the Content ID must be the following: skd://xxx where xxx is the Key ID in hex format.';
},
getLicense: function (emeOptions, contentId, keyMessage, callback) {
var data = 'spc=' + base64EncodeUint8Array(keyMessage) + '&assetId=' + contentId;
$.ajax({
url: 'https://fp-keyos.licensekeyserver.com/getkey',
type: 'POST',
data: data,
// If you are using proxy, please, remove 'headers' object.
headers: {
'customdata': 'PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxLZXlPU0F1dGhlbnRpY2F0aW9uWE1MPjxEYXRhPjxXaWRldmluZVBvbGljeSBmbF9DYW5QZXJzaXN0PSJmYWxzZSIgZmxfQ2FuUGxheT0idHJ1ZSIvPjxXaWRldmluZUNvbnRlbnRLZXlTcGVjIFRyYWNrVHlwZT0iSEQiPjxTZWN1cml0eUxldmVsPjE8L1NlY3VyaXR5TGV2ZWw+PC9XaWRldmluZUNvbnRlbnRLZXlTcGVjPjxGYWlyUGxheVBvbGljeSBwZXJzaXN0ZW50PSJmYWxzZSIvPjxMaWNlbnNlIHR5cGU9InNpbXBsZSIvPjxHZW5lcmF0aW9uVGltZT4yMDIwLTEyLTExIDA3OjExOjQ3LjAwMDwvR2VuZXJhdGlvblRpbWU+PEV4cGlyYXRpb25UaW1lPjIwMjAtMTItMTIgMDc6MTE6NDcuMDAwPC9FeHBpcmF0aW9uVGltZT48VW5pcXVlSWQ+MGU2Yzk4NTU5NGE4MTQ0NzBhMWZhNDVmNWQ3NDIzMTM8L1VuaXF1ZUlkPjxSU0FQdWJLZXlJZD45NzU0ZTBjZmRkYzY4MmMyMTIxNmRlM2ViNGQxMTg4NTwvUlNBUHViS2V5SWQ+PC9EYXRhPjxTaWduYXR1cmU+TnBqU3pvVGc4dUdnQVBpNXlESFU1a1pxZ2lUT1Y1QnpiYWFuVHQwdnlqMkRJcXdMVGlhVkkvNUh4VHFyalFBTTF3bWxTQVBIVVhpd3JNeU9CM3lETUkyZkdTMkZSNDltd0RCS3lzK2hZbWhBMlEzZVM3Mlpsb3ptQVhURzVjZjNwdkZBR1hWUU45L0x3Q2NYNzZ2L240UFhRM3U1ODUwMGExOUU2di9sT2xkQ2hXWUhvS1FzVHM5ejVmYjFlRlBMczlSWmdVYkoyOHdUcVcvMHJ2RXl5WmQwVHB1R04wdzUxS3NtNWdCbUpLYTBMQjFha1grTTI1bEQ1bVo3cm13WjRlai9TcFk1cGRJMk4ybGJZazV1ZFdsSS9pWnBtRmNuOG9lSU1ZVnFjbWZZZnFxNDFnZ2gxSlllVUh4VjR5bkNKeEVid2VSL3J3RE1teU9iV3BZbmp3PT08L1NpZ25hdHVyZT48L0tleU9TQXV0aGVudGljYXRpb25YTUw+Cg=='
},
contentType: 'application/x-www-form-urlencoded',
success: function (result) {
callback(null, base64DecodeUint8Array(result));
},
error: function (err) {
callback(err);
}
});
}
}
}
};
// Set the source to the player to init/start the playback.
player.src(fairplayHlsSrc);
});
})();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment