- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Electron 中保护离线内容的播放。
我正在尝试使用: https://github.com/castlabs/downstream_electron
连同他们与 Widevine 兼容的 Electron 版本:https://github.com/castlabs/electron-releases/releases/tag/v1.8.7-hdcp-vmp1010
根据 downstream_electron 的 README.md,“允许在 Electron 中 protected 地播放离线内容”。
我有一个概念验证设置 dashjs我可以在其中提取 session 信息并下载受 drm 保护的 dash list 以及音频和视频片段。
我正在使用 ezdrm 的公开资源:
list :http://wvm.ezdrm.com/demo/stream.mpd
许可证服务器:http://widevine-dash.ezdrm.com/proxy?pX=BF9CEB
当我调用 DownstreamElectronFE.downloads.getOfflineLink()下载 Assets 后,它返回给我:
{
offlineLink:"http://127.0.0.1:3010/movies/6441406178546155520/stream.mpd"
persistent:"F75D9FC450010B582A7951ED228DAF85"
}
因此,我从本地服务器获得了受 drm 保护的本地 list 。我如何获得“在 Electron 中 protected 地播放离线内容”?
如果我要提供这个 offlineLink
值作为 dash 视频播放器的源,它仍然需要连接到 internet 才能与许可服务器对话,所以它不会真正离线。
我的部分演示如下:
const dashjs = require('dashjs');
let session
function FakePersistentPlugin() {
this.createPersistentSession = (persistentConfig) => {
console.log('create - call of fake persistent plugin, persistentConfig', persistentConfig);
return new Promise((resolve) => {
setTimeout(function () {
console.log('resolving session',session.sessionId)
resolve(session.sessionId);
}, 5000);
});
};
this.removePersistentSession = (sessionId) => {
console.log('remove - call of fake persistent plugin, sessionId', sessionId);
return new Promise((resolve) => {
setTimeout(() => {
console.log('remove - call of fake persistent plugin resolved', sessionId);
resolve();
}, 5000);
});
};
}
const downstreamElectron = require("downstream-electron/dist").init(window,new FakePersistentPlugin());
console.log('downstreamElectron is ',downstreamElectron);
var player = dashjs.MediaPlayer().create();
player.setProtectionData({'com.widevine.alpha':{serverURL:'http://widevine-dash.ezdrm.com/proxy?pX=BF9CEB'}});
player.initialize(document.querySelector("#videoPlayer"))
player.attachSource('http://wvm.ezdrm.com/demo/stream.mpd')
player.play()
player.on( dashjs.MediaPlayer.events.KEY_SESSION_CREATED, (e) => {
session = e.data.session;
console.log('session is ',session)
});
const config = {
licenseUrl:'http://widevine-dash.ezdrm.com/proxy?pX=BF9CEB',
serverCertificate: new Uint8Array([0])
}
let manifestId
let persistId
function onProgress (err, stats) {
if (err) {
console.logs('on progress err', err, stats);
}
console.log('on progress ',stats);
};
function onFinish (err, info) {
if (err) {
console.log("onFinish error", err);
} else {
console.log("onFinish success", info);
downstreamElectron.downloads.getOfflineLink(info.manifestInfo.id)
.then(
function onSuccess(result) {console.log("offlineLink success", result)},
function onError(err) {console.log("error", err)
})
}
};
downstreamElectron.downloads.create('http://wvm.ezdrm.com/demo/stream.mpd')
.then(
function onSuccess(result) {
console.log("create success", result)
manifestId = result.id
downstreamElectron.downloads.createPersistent(manifestId,config)
.then(
(result)=>{
console.log("createPersistent success",result)
persistId = result
downstreamElectron.downloads.savePersistent(manifestId,persistId)
.then(
() => {
console.log('savePersistent success')
downstreamElectron.downloads.start(manifestId,{video:['video/avc1'],audio:['audio/und/mp4a']})
.then(
function onSuccess() {console.log("start success")},
function onError(err) {console.log("start error", err)
})
downstreamElectron.downloads.subscribe(manifestId, 1000, onProgress, onFinish)
.then(
function onSuccess() {console.log("subscribed successfully")},
function onError(err) {console.log("subscribe error", err)
})
},
(err) => {
console.log('savePersistent error',err)
}
)
},
(err)=>{
console.log("createPersistent error",err)
}
)
},
function onError(err) {console.log("create error", err)}
)
最佳答案
需要提前申请license,具体申请允许持久化(离线使用)的license。基本上,您需要在离线之前触发许可请求。某处可能有一个函数调用来执行此操作,否则您可以开始播放以获取许可证,然后再终止它。
请注意,颁发的许可证必须允许离线使用,这不是默认设置。 EZDRM 演示内容可能允许您申请这样的许可证,但它不太可能默认为您提供这样的许可证。
关于javascript - 如何使用 DOWNstream For Electron 保护离线内容的播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122955/
我将 Bootstrap 与 css 和 java 脚本结合使用。在不影响前端代码的情况下,我真的很难在css中绘制这个背景。在许多问题中,人们将宽度和高度设置为 0%。但是由于我的导航栏,我不能使用
我正在用 c 编写一个程序来读取文件的内容。代码如下: #include void main() { char line[90]; while(scanf("%79[^\
我想使用 javascript 获取矩阵数组的所有对 Angular 线。假设输入输出如下: input = [ [1,2,3], [4,5,6], [7,8,9], ] output =
可以用pdfmake绘制lines,circles和other shapes吗?如果是,是否有documentation或样本?我想用jsPDF替换pdfmake。 最佳答案 是的,有可能。 pdfm
我有一个小svg小部件,其目的是显示角度列表(参见图片)。 现在,角度是线元素,仅具有笔触,没有填充。但是现在我想使用一种“内部填充”颜色和一种“笔触/边框”颜色。我猜想line元素不能解决这个问题,
我正在为带有三角对象的 3D 场景编写一个非常基本的光线转换器,一切都工作正常,直到我决定尝试从场景原点 (0/0/0) 以外的点转换光线。 但是,当我将光线原点更改为 (0/1/0) 时,相交测试突
这个问题已经有答案了: Why do people write "#!/usr/bin/env python" on the first line of a Python script? (22 个回
如何使用大约 50 个星号 * 并使用 for 循环绘制一条水平线?当我尝试这样做时,结果是垂直(而不是水平)列出 50 个星号。 public void drawAstline() { f
这是一个让球以对角线方式下降的 UI,但球保持静止;线程似乎无法正常工作。你能告诉我如何让球移动吗? 请下载一个球并更改目录,以便程序可以找到您的球的分配位置。没有必要下载足球场,但如果您愿意,也可以
我在我的一个项目中使用 Jmeter 和 Ant,当我们生成报告时,它会在报告中显示 URL、#Samples、失败、成功率、平均时间、最短时间、最长时间。 我也想在报告中包含 90% 的时间线。 现
我有一个不寻常的问题,希望有人能帮助我。我想用 Canvas (android) 画一条 Swing 或波浪线,但我不知道该怎么做。它将成为蝌蚪的尾部,所以理想情况下我希望它的形状更像三角形,一端更大
这个问题已经有答案了: Checking Collision of Shapes with JavaFX (1 个回答) 已关闭 8 年前。 我正在使用 JavaFx 8 库。 我的任务很简单:我想检
如何按编号的百分比拆分文件。行数? 假设我想将我的文件分成 3 个部分(60%/20%/20% 部分),我可以手动执行此操作,-_-: $ wc -l brown.txt 57339 brown.tx
我正在努力实现这样的目标: 但这就是我设法做到的。 你能帮我实现预期的结果吗? 更新: 如果我删除 bootstrap.css 依赖项,问题就会消失。我怎样才能让它与 Bootstrap 一起工作?
我目前正在构建一个网站,但遇到了 transform: scale 的问题。我有一个按钮,当用户将鼠标悬停在它上面时,会发生两件事: 背景以对 Angular 线“扫过” 按钮标签颜色改变 按钮稍微变
我需要使用直线和仿射变换绘制大量数据点的图形(缩放图形以适合 View )。 目前,我正在使用 NSBezierPath,但我认为它效率很低(因为点在绘制之前被复制到贝塞尔路径)。通过将我的数据切割成
我正在使用基于 SVM 分类的 HOG 特征检测器。我可以成功提取车牌,但提取的车牌除了车牌号外还有一些不必要的像素/线。我的图像处理流程如下: 在灰度图像上应用 HOG 检测器 裁剪检测到的区域 调
我有以下图片: 我想填充它的轮廓(即我想在这张图片中填充线条)。 我尝试了形态学闭合,但使用大小为 3x3 的矩形内核和 10 迭代并没有填满整个边界。我还尝试了一个 21x21 内核和 1 迭代,但
我必须找到一种算法,可以找到两组数组之间的交集总数,而其中一个数组已排序。 举个例子,我们有这两个数组,我们向相应的数字画直线。 这两个数组为我们提供了总共 7 个交集。 有什么样的算法可以帮助我解决
简单地说 - 我想使用透视投影从近裁剪平面绘制一条射线/线到远裁剪平面。我有我认为是使用各种 OpenGL/图形编程指南中描述的方法通过单击鼠标生成的正确标准化的世界坐标。 我遇到的问题是我的光线似乎
我是一名优秀的程序员,十分优秀!