Created
December 11, 2020 07:19
-
-
Save sahilkashyap64/2e88ee904903b55f2a62d54f45adf849 to your computer and use it in GitHub Desktop.
// source https://jsbin.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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