【问题标题】:Status 503 when trying to play notification sound尝试播放通知声音时的状态 503
【发布时间】:2023-04-03 06:17:01
【问题描述】:

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

How to play a notification sound on websites?

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

如果从公司网络输入,有些声音会播放,有些则不会。刷新后,工作的声音与刷新前不同。就像它随机播放声音一样。注意:聊天服务器位于我家。

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

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

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 阶段是 "src="sounds/+filename+ "mp3",它也没有工作。只为公司网络说话。对于其他一切,两种解决方案都有效
  • 您公司的防火墙似乎正在限制 mp3 文件(尝试使用 wav 或 ogg)或与某些网站的整个连接
  • 我也很关心这一点,但仍然存在这样的问题,在notificationsounds.com 上它是随机工作的。例如:我玩温柔的警报.wav 及其工作。然后我刷新页面,它不会工作,但现在其他文件可以播放。

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


【解决方案1】:

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);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

你也可以试试complete jsFiddle demo

设置好之后,您可以通过调用playSound(soundName) 播放您选择的任何声音(从声音列表中)。该演示选择其中一个已注册的声音(和一个未注册的声音)并在您单击代码下方的“运行代码 sn-p”按钮时播放该声音。

请注意,这不依赖于任何特定的 HTML 内容,而是会根据需要创建它自己的 &lt;audio&gt; 元素,并将内容缓存在其中。在这段代码中,您会看到声音被缓存后,它不会再次从源站加载,直到您重新加载页面。

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

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

稍微更改名称可能是明智之举,以免造成混淆。

【讨论】:

  • 我下载了文件并将其添加到公司网站。现在它不再被防火墙阻止了。但就 Internet Explorer(遗憾的是,这里是默认浏览器)而言,由于 MIME 类型,它仍然无法工作。这将很快得到解决,因为聊天已移至公司内部服务器。无论如何,您的回答在简化我的警报功能方面帮助了我很多。非常感谢。我当然会检查答案。即使我以前熟悉这个概念;)但遗憾的是,这似乎不是常识。
  • @BjoernUrban IE 的几乎所有内容都带有“可悲”或某种道歉。当您说由于 MIME 类型而无法正常工作时,您的意思是什么?我没有在IE上测试过,所以我不知道你遇到了什么。如果你能解释一下,也许有一个可行的解决方案。
  • 聊天是一个在私人服务器上运行的实验性项目。它通过 SharePoint 访问,并使用 SharePoint 授权进行自动登录。我将音频文件上传到所说的 SharePoint,因为它是唯一没有被阻止的页面并且是我可以完全访问的页面。但是 IE 总是试图下载文件,因为在 Sharepoint 服务器的服务器配置中没有添加命令 MIME 类型,它告诉 IE 只播放文件,并且由于 SharePoint 是在外部托管的,所以我无法更改它。管理层现已批准,聊天将转移到公司服务器。
  • 所以这个问题很快就会自己解决。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2020-07-14
  • 2016-09-27
相关资源
最近更新 更多