【发布时间】:2021-03-22 09:16:35
【问题描述】:
我正在尝试检查 webm Icecast 流是否打开。对于 HLS 流,我使用 axios.head 方法,如下所示:
try {
let res = await axios.head(url);
return /2\d\d/.test('' + res.status);
} catch (err) {
console.log('err', url, err);
return false;
}
而且效果很好。但在调试过程中得知Icecast doesn't support HEAD method.
Icecast 流的 OPTIONS 方法也失败(我得到 net::ERR_FAILED)。我无法获取流,因为它会获取整个流。我只是想确保它处于活动状态。
如何检查来自 Icecast 的 webm 流是否存在?
编辑
让我再解释一下。这是一个通用的流站点。用户通知他/她想看的几个直播流和他们的时间。这些流可以在网络中的任何地方。在开始时,用户转到播放器页面并播放如果流处于活动状态。
“如果它处于活动状态”部分是我在这里尝试做的。
【问题讨论】:
-
icecast 具有返回 XML(或更高版本中的 JSON)的端点,可以为您提供此类信息 - 只需 read the documentation
-
是的...但是我无权访问服务器...我正在我的项目中执行流式传输功能。因此,用户只需在管理屏幕中输入 example.com/streams/whatever,webm 之类的内容,我希望能够播放该流,但首先我想检查它是否处于活动状态。
-
如果您无权访问服务器,您希望如何测试流(由您说您无权访问的服务器发送)是否已启动?
-
我的意思是我无权访问流服务器进行配置。我的项目接受来自任何地方的流。这是通用的。不是特定的服务器。我只需要通过流 url 知道它是否处于活动状态。上面的代码非常适合 HLS 流。
-
哦,我明白了 - 你只有一个流 URL - 我想你可以使用 XMLHttpRequest,然后中止请求一次
.readyState === XMLHttpRequest.HEADERS_RECEIVED- 因为那时你将确定流是否启动(我想想) - 或者当.readyState === XMLHttpRequest.LOADING时 - 你将在.resposnseText中有部分数据
标签: javascript axios webm icecast internet-radio