【问题标题】:How can I check if a webm icecast stream is active?如何检查 webm icecast 流是否处于活动状态?
【发布时间】: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


【解决方案1】:

Icecast 不能正确支持 CORS,因此目前还没有通过 Fetch 或 XHR 实现此目的的好方法。

但是,在我看来,您需要做的就是尝试播放流。然后,看看是否有错误发生。

const audio = new Audio('https://example.com/stream');
audio.addEventListener('error', () => {
  // Stream didn't load, so in all probability it's not online!
});

audio.play(); // This needs to happen on a trusted event, like a click handler, due to autoplay policy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多