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

时间:2016-03-29 09:47:09

标签: javascript html5 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 个答案:

答案 0 :(得分:2)

我最终通过以下方式解决了这个问题:

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

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;
};