我加密了 MP4 视频文件 FFMPEG。这给了我一个播放列表清单文件(即stream.m3u8)、一个密钥文件(即stream.m3u8.key)和一些.ts文件。我使用下面的代码来播放stream.m3u8文件并且它有效
<head>
<link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.4.1/video.min.js"></script>
</head>
<body>
<video id="example-video" class="video-js vjs-default-skin" controls="controls" width="640" height="360">
<source src="./stream.m3u8" type="application/x-mpegURL" />
</video>
<script>
var player = videojs('example-video');
</script>
</body>
在我尝试使用
input
并选择文件属性后,我尝试了下面的代码
<html>
<head>
<link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.4.1/video.min.js"></script>
</head>
<body>
<label for="input">Choose a video file to process:</label>
<input type="file" id="input" name="input_video">
<p id="demo"><p/>
<video id="video" class="video-js vjs-default-skin" width="320" height="240" controls style="display: none;">
<source id="vid" type="application/x-mpegURL" />
</video>
</body>
<script>
document.getElementById("input").addEventListener("change", function() {
var media = URL.createObjectURL(this.files[0]);
var vid = document.getElementById("vid");
vid.src = media;
var video = document.getElementById("video");
video.style.display = "block";
video.play();
document.getElementById("demo").innerHTML = vid.src;
var player = videojs('video');
//player.play();
});
</script>
</html>
上面的代码可以读取stream.m3u8播放列表文件,但无法读取“密钥文件”,因为密钥文件的位置是在stream.m3u8本身中定义的。
当我浏览stream.m3u8文件并尝试播放时,播放窗口显示持续时间(以秒为单位),但我尝试着播放,但无法播放。这表明它无法调用密钥文件。
我相信,如果我在清单文件之外定义关键文件位置,例如在 JavaScript 代码内,这个问题就会得到解决。 如何定义播放列表文件之外的关键文件位置?
您可以在 JavaScript 中定义
key
。
由于您正在使用
Video.js
,因此您必须通过 Video.js
进行定义。据我所知,Video.js API 中没有任何选项。
Video.js
使用http-streaming,解析m3u8
的过程在其中完成。因此,您可以在 this 库中处理该问题。