使用VideoJ,FairPlay无法进行HLS媒体文件解密

问题描述

我尝试播放加密的HLS媒体文件,但未播放,并出现以下错误

enter image description here

this link中标识了可执行环境,但未播放

并在Pallycon的test page中进行了测试,但播放没有问题。

执行环境和源代码如下。

执行环境:

  • 操作系统:macOS High Sierra 10.13.6
  • Safari:13.1.2

使用库

  • videojs:^ 7.8.4
  • videojs-contrib-eme:^ 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>
                                    }
                                },base64DecodeUint8Array(responseBody))
                                })
                            }
                        }
                    }
                };

                player.src(playerConfig);

解决方法

当我尝试在 VideoJs 中实现 FairPlay 时遇到了同样的问题。就我而言,这是一个 CORS 问题,因为证书位于不同的域中,并且那里未启用 CORS。所以我在我的服务器中创建了一个 API 来返回证书并解决了这个问题。

如果在浏览器中加载您的获取证书 URL (https://license.pallycon.com/ri/fpsKeyManager.do?siteId=),您可以检查响应标头中的 Access-Control-Allow-Origin 以查看允许的来源。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...