我想知道是否有人遇到类似的问题:
我已经在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显示的内容:
播放音频的html5代码如下:
<audio controls>
<source src="http://127.0.0.1:3333/stream1" type="audio/mpeg">
</audio>
答案 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;
};