我试图播放一个加密的HLS媒体文件,但没有播放,出现了如下错误。
在此处输入图像描述
可执行环境已在此链接中标识,但未播放
并在Pallycon的测试页面中进行了测试,但它的播放没有问题。
执行环境和源代码如下。
执行环境:
- 操作系统:macOS High Sierra 10.13.6
- Safari:13.1.2
使用库
- 视频js:^7.8.4
- videojs贡献者:^3.7.0
DRM供应商
- Pallycon
源代码
const playerConfig = {
src: "https://mz-cm-transcoding-output.s3.ap-northeast-2.amazonaws.com/mz-cm-v1/assets/1604917161khae8nfj/Beach+-+19987.m3u8",
type: 'application/x-mpegurl',
keySystems: {
'com.apple.fps.1_0': {
getCertificate: function (emeOptions, callback) {
videojs.xhr({
url: "https://license.pallycon.com/ri/fpsKeyManager.do?siteId=<SITE_ID>",
method: 'GET',
}, (err, response, responseBody) => {
if (err) {
callback(err)
return
}
callback(null, base64DecodeUint8Array(responseBody));
})
},
getContentId: function (emeOptions, initData) {
const contentId = arrayToString(initData);
return contentId.substring(contentId.indexOf('skd://') + 6);
},
// return content ID
getLicense: function (emeOptions, contentId, keyMessage, callback) {
videojs.xhr({
url: <license_url>,
method: 'POST',
responseType: 'text',
body: 'spc=' + base64EncodeUint8Array(keyMessage),
headers: {
'Content-type': 'application/x-www-form-urlencoded',
'pallycon-customdata-v2': <token>
}
}, (err, response, responseBody) => {
if (err) {
callback(err)
return
}
callback(null, base64DecodeUint8Array(responseBody))
})
}
}
}
};
player.src(playerConfig);
当我试图在VideoJs中实现FairPlay时,也遇到了同样的问题。在我的案例中,这是一个CORS问题,因为证书在另一个域中,并且那里没有启用CORS。因此,我在服务器中创建了一个API来返回证书,并解决了问题。
如果加载您的获取证书URL(https://license.pallycon.com/ri/fpsKeyManager.do?siteId=<SITE_ID>(在浏览器中,您可以检查响应标头中的Access-Control-Allow-Origin
,以查看允许哪些来源。