【问题标题】:HLS media file decryption is not working using VideoJs, FairPlayHLS 媒体文件解密无法使用 VideoJs、FairPlay
【发布时间】:2021-02-24 01:50:28
【问题描述】:

我尝试播放加密的 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>
                                    }
                                }, (err, response, responseBody) => {
                                    if (err) {
                                        callback(err)
                                        return
                                    }
                                    callback(null, base64DecodeUint8Array(responseBody))
                                })
                            }
                        }
                    }
                };

                player.src(playerConfig);

【问题讨论】:

  • 看起来它正在尝试使用清单的密钥 URI (skd://...) 检索密钥。检查它是否真的通过你的函数。许可证获取 URL 是否正确?
  • 您找到解决方案了吗?我也面临同样的问题

标签: video.js drm fairplay


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2021-11-19
    • 1970-01-01
    • 2011-01-25
    • 2023-03-21
    • 2016-08-30
    • 1970-01-01
    相关资源
    最近更新 更多