尝试播放通知声音时的状态503

时间:2016-06-03 13:31:37

标签: javascript html html5-audio http-status-code-503

我为我们公司创建了一个小的PHP / Ajax WebChat。每当收到新消息时,它应该使用第一个答案中的方法播放通知声音。

How to play a notification sound on websites?

现在的问题是,当从任何普通计算机访问它时,它工作正常,但从(非常受限制的)公司网络,它在控制台中给我“HTTP状态503服务不可用”。由于它正在处理任何其他Internet访问,这很奇怪。还有一点,我收到了来自https://notificationsounds.com/

的通知声音

如果从公司网络输入,则播放一些声音而一些声音不播放。刷新后,工作的声音与刷新前的声音不同。这就像是随机播放声音。注意:Chatserver位于我家。

可能是什么问题,是否有任何类型的工作不必使用其他帖子中的方法?

这是我用来加载和播放通知声音的代码:

chat.playSound("the-calling");  

playSound : function (filename) {
    document.getElementById("sound").innerHTML=
       '<audio autoplay="autoplay">
            <source src="https://notificationsounds.com/soundfiles/a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling.wav" />
            <source src="https://notificationsounds.com/soundfiles/a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling.ogg" type="audio/ogg" />
            <embed hidden="true" autostart="true" loop="false" src="/sounds/' + filename  +'.mp3" />
        </audio>';
}

1 个答案:

答案 0 :(得分:0)

网站http://notificationsounds.com实际上并不打算收听声音;它们在每个声音上提供“下载”链接,以便您可以自己主持。他们的网站实际上可能无法扩展以满足您放置它的需求,或者它们可能受到IP地址的限制。  当您每次想要播放声音时都会访问他们的网站,并且可能会乘以聊天应用程序中的并发用户数,这两种情况都会导致随机失败。

如果网站管理员注意到您公司的公共IP地址导致此类问题,他们可能会选择阻止您公司的IP地址,让您无法发出声音。几年前发生过类似的事情,因此,我终于有机会见到我组织的副总裁,并在他的办公室度过“优质时光”。

所以,我推荐两件事:

1)从他们的网站下载你想要的声音并将它们托管在你的网站上

2)缓存音频加载,这样你就不必重新加载它了。

我创建了一个缓存音频的演示(来自http://notificationsounds.com):

var notification_sounds = {
    "breaking-glass" : "8f121ce07d74717e0b1f21d122e04521/file-4f_glass-beaking-2",
    "the-calling" : "a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling",
    "ringo" : "5737c6ec2e0716f3d8a7a5c4e0de0d9a/file-47_oringz-pack-nine-01"
};

function findOrCreateAudioPlayer(filename) {
    var sound = notification_sounds[filename] || notification_sounds['breaking-glass'];
    var player = $("#audio-" + filename);

    if (player.length == 0) {
		player = $("<audio />").attr("id", "audio-" + filename);
        $("<source />").attr("src", "https://notificationsounds.com/soundfiles/" + sound + ".mp3").appendTo(player);
        player.appendTo($("body"));
        $("<p />").text(filename).appendTo($("body"));
    }
    
    return player;
}

function playSound(filename) {
    findOrCreateAudioPlayer(filename);
    player = $("#audio-" + filename)[0];
    player.load();
    player.play();
}

var sounds = ["nothing", "the-calling", "ringo", "breaking-glass"];
var sound = sounds[Math.floor(Math.random()*sounds.length)]

playSound(sound);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

您也可以尝试complete jsFiddle demo

准备好后,您可以通过拨打playSound(soundName)播放您选择的任何声音(从声音列表中)。该演示选择一个已注册的声音(和一个未注册的声音)并在您单击代码下方的“运行代码段”按钮时播放该声音。

请注意,这不依赖于任何特定的HTML内容,但会根据需要创建自己的<audio>元素,并在其中缓存内容。在此代码中,您将看到一旦声音被缓存,在重新加载页面之前,它不会再从原始站点加载。

从原始示例中,您可以将playSound回调更改为:

playSound : function (filename) {
    playSound(filename);
}

更改名称可能是明智之举,只是为了没有混淆。