javascript - 使用 Icecast 移动到后备安装时音频停止播放

标签 javascript html html5-audio icecast

我想知道是否有人遇到过类似的问题:

我在 Icecast2 中定义了后备安装,以便始终播放一个主要流。如果另一个后备安装变为事件状态,则后者将变为事件状态。 我已经使用 ffplay 测试了流(mp3 格式),并且转换发生没有问题。当我使用 html5 音频标签来收听音频时,存在问题:转换不会自动发生,我必须重新加载浏览器并单击播放才能收听流。也就是说,使用浏览器,当启用后备流时,声音停止,我必须重新加载浏览器并单击播放才能收听[另一个流]。所有主流浏览器都会出现同样的问题。

这是我的icecast.xml 的摘录:

<mount>
  <public>0</public>
  <mount-name>/stream</mount-name>
  <hidden>0</hidden>
</mount>

<mount>
  <public>0</public>
  <mount-name>/stream1</mount-name>
  <fallback-mount>/stream</fallback-mount>
  <fallback-override>1</fallback-override>
  <username>stream1</username>
  <password>pass</password>
  <hidden>0</hidden>
</mount>

这是 ffplay 在连接和断开辅助源时显示的内容:

enter image description here

播放音频的html5代码如下:

<audio controls>
  <source src="http://127.0.0.1:3333/stream1" type="audio/mpeg">
</audio>

最佳答案

我通过如下方式终于成功了:

首先,我注意到当我通过启用源从一个安装点切换到另一个安装点时,音频停止播放。我设置了一个计时器,每 1 秒触发一次,以便检查 audio.currentTime 并与之前的值进行比较。然后,当结果为真时,我将音频源重置为同一流。这有点像黑客,但似乎解决了这个问题。

html代码:

  <audio id="audio" controls>
      <source src="http://127.0.0.1:3333/stream1" type="audio/mp3">
  </audio>

javascript代码:

var audio = document.getElementById('audio');
var myVar = setInterval(myTimer, 1000);
var oldTime = "";

function myTimer() {
  if ((audio.paused != true && (audio.currentTime - oldTime) == 0 )) {
    audio.src="";
    audio.src="http://127.0.0.1:3333/stream1";
    audio.play();
    }
    oldTime = audio.currentTime;
};

关于javascript - 使用 Icecast 移动到后备安装时音频停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280764/

相关文章:

php - 外部 CSS 文件

html - Marlett 字体的 Unicode

javascript - 停止音频源并替换为另一个

javascript - 在 sql 语句中处理与号 (&)

javascript - JavaScript 中的 "Friend Classes"

javascript - 如何更改jbox-image-gallery的宽度?

javascript - 是否有等效于 SVG 的 Canvas toDataURL 方法?

javascript - 防止多个 AJAX 请求

html - 在 <audio> 标签中强制缓存 MP3/OGG

javascript - scriptNode.onaudioprocess 已弃用,还有其他选择吗?