javascript - 如何让 HLS.js 从服务器端获取数据?
问题描述
我使用 hls.js 来实现我的视频播放器,我在 https:/// 中有一些 ts 文件和一个 m3u8 文件。
我用php读取m3u8文件并将内容发送到js(res [“manifest”] = m3u8的内容),然后将其放入hls.loadSource(),如下所示。
var manifest = res["manifest"];
var blob = new Blob([manifest]);
var hls = new Hls();
var url = URL.createObjectURL(blob);
hls.loadSource(url);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, function() {
video.load();
});
在此之后,hls 开始通过以下方式获取 m3u8 中列出的文件
blob:https://<my domain>/<video name>.mp4
当然,它找不到文件,因为它们在
https://<my domain>/<video name>.mp4
代替
blob:https://<my domain>/<video name>.mp4
以“blob:”开头的 url 由前端的 URL.createObjectURL 创建,但现在我希望 hls 向 video.php 发送请求,然后 video.php 读取 ts 文件并从服务器端响应内容。
有什么方法可以做到这一点?(修改源代码,更改设置,...等)
解决方案
我不敢相信我做到了。
我在下面修改了 src/loader/fragment.ts 的源代码:
@@ -78,9 +78,7 @@ export class BaseSegment {
get url(): string {
if (!this._url && this.baseurl && this.relurl) {
- this._url = buildAbsoluteURL(this.baseurl, this.relurl, {
- alwaysNormalize: true,
- });
+ this._url = 'video.php?f=' + this.relurl;
}
return this._url || '';
}
然后用 webpack 重新编译。现在它使用查询参数“f = <video name>.mp4”将get请求发送到video.php,所以我可以用我的video.php处理请求。
推荐阅读
- python - Python 列表中的最后一个元素使用 Python C API 损坏
- c++ - 为什么我必须在这段代码中添加一个新变量
- node.js - 在 React 本机应用程序上,如何从后端获取每个事件示例的更新,例如下达新订单
- android - 即使任务死亡,有什么方法可以将 AlarmManager 保留在 android 中?
- scala - 如何为 Zeppelin 的 spark 解释器添加 Delta Lake 支持?
- python - 简单的封闭式自定义损失函数不起作用
- c# - Json.NET:不能反序列化JSON,如果指定类型的基类是“PropertyChangedBase”
- java - 使用随机数的 Java GUI 绘制树
- r - 尝试使用并行时,R 中的 %dopar% 无法正常工作
- python - 没有这样的文件或目录:“google_news_vectors.bin”