首页 > 解决方案 > 如何检查 webm icecast 流是否处于活动状态?

问题描述

我正在尝试检查 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 不支持 HEAD 方法

Icecast 流的 OPTIONS 方法也失败(我得到 net::ERR_FAILED)。我无法获取流,因为它会获取整个流。我只是想确保它处于活动状态。

如何检查来自 Icecast 的 webm 流是否存在?

编辑

让我再解释一下。这是一个通用的流站点。用户通知他/她想看的几个直播流和他们的时间。这些流可以在网络中的任何地方。在开始时,用户转到播放器页面并播放流(如果它是活动的)

“如果它是活动的”部分是我在这里想要做的。

标签: javascriptaxioswebmicecastinternet-radio

解决方案


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

推荐阅读