当前位置: 首页 > 知识库问答 >
问题:

从socket.io - node.js收到消息时播放客户端的音频

裴俊雅
2023-03-14

我已经找了一段时间来解决这个问题,但没找到什么。

我的目标是接收来自udp客户端的消息,服务器接收该消息并将其转发给web客户端,web客户端在每次接收到消息时播放一个音频片段。但是,由于某种原因,音频无法播放。如果我直接从我的目录打开页面,音频可以播放,但是如果我试图通过本地主机访问它,它无法加载。有人知道解决办法吗?

这是客户端javascript

var mySound = new Audio('/public/audio/Bloom.mp3');
mySound.load();
var socket = io.connect('http://localhost');
socket.on('message', function(data){
    console.log(data);
    $('#content').text(data);
    mySound.play();
    //document.getElementById('audiotag1').play();
});

此页面由服务器.js、节点.js文件使用 socket.io 和 express 提供。我没有从主机收到任何错误.log。这是服务器.js

var app = require('express')()
    , server = require('http').Server(app)
    , io =require('socket.io')(server)
    , dgram = require('dgram');

var httpPort = 1234;
var udpPort = 5000;

server.listen(httpPort);

app.use(server.express.static( __dirname + '/public'));

app.get('/', function(request, response){
    var ipAddress = request.socket.remoteAddress;
    console.log("New express connection from: " + ipAddress);
    response.sendfile(__dirname + '/public/index.html');
});

var udpSocket = dgram.createSocket('udp4', function(msgBuffer){
    var jsonMessage = JSON.parse(msgBuffer);
    io.sockets.emit('message', JSON.stringify(jsonMessage));
});
udpSocket.bind(udpPort, '127.0.0.1');

您可以转到此链接查看chrome的错误。http://postimg.org/image/xkv7a2kwb/

有人知道如何解决这个问题吗?

共有2个答案

高增
2023-03-14

我们可以将音调上传到云存储,然后使用该源,如下所示

playAudio() {
let audio = new Audio()
audio.src ='https://res.cloudinary.com/Apple_Notification.mp3'
audio.load()
audio.play()
 }

每当新消息传入时,在客户端触发此函数

姬心思
2023-03-14

当静态文件的Express配置不正确时,通常会发生此错误。

从您的客户端 JavaScript 中,我可以看到您将静态文件存储在公用文件夹中。

因此,在服务器端的某个地方,您应该拥有这样的东西:

app.use('/public', express.static('/path/to/public'));

以这种方式 http://localhost/public/audio/Bloom.mp3 请求将与 /path/to/公共/音频/Bloom.mp3文件一起提供。

注意事项:

从Express 4开始,将“不再有app.use(app.router)”和“所有路由方法将按出现的顺序添加”。这意味着您必须将上面的代码行放在first app.get(...),< code>app.post(...)等。

希望这些信息对某人有所帮助。

 类似资料:
  • 在文档的socket.io客户端套接字部分http://socket.io/docs/client-api/#io#socket指的是套接字文档,这意味着服务器套接字对象和客户端套接字对象是相同的。

  • 问题内容: 我正在尝试用两个客户端实现一个系统,其中一个客户端发送一条消息,而另一个客户端将接收该消息。下图将以更直观的方式对其进行解释: 因此,客户端1将消息发送到服务器(此工作正常),服务器接收到“推送”消息并发出应由客户端2接收的“弹出”消息。这里的问题是客户端2从未收到“流行”消息。:( 这是所有代码。 SERVER.JS 客户1(aka mobile.html) 客户2(aka web.

  • 问题内容: 向所有客户端发送消息效果很好,但是我想向特定的用户名发送消息。我的server.js文件看起来像。它的作用是在运行时,客户端代码将用户添加到对象用户名以及套接字对象中。并立即将单个消息返回给每个连接的客户端。 发出消息的部分 问题答案: 试试这个: socket.id由socket.io保存,并且包含客户端的唯一ID。您可以使用以下命令进行检查:

  • 问题内容: 我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示: 但是无论是还是方法似乎都无法满足我的需求。 我发现一种可能的解决方案是,该方法将不发送消息的SessionId数组作为第二个参数,因此我可以将此时连接了所有SessionId的数组传递给服务器,除了那个我希望发送邮件,但是我觉得必须有一个更好的解决方案。 有任何想

  • 问题内容: 我试图通过向服务器发送自定义事件来使Python客户端使用Socket.io 0.7与Node.js服务器通信。 基于我在GitHub上找到的Socket.io参考以及以下WebSocket Python库。 到目前为止,这是我的代码: 节点服务器 Python客户端 节点控制台输出 Python控制台输出 现在看来,尽管服务器以ACK响应,套接字事件仍未触发。因此,该消息已正确接收,

  • 1.场景描述:设备向Netty服务器发送数据(大约##20ms间隔##),Netty服务器向客户端转发消息##立即##(IOS或Android)。2.关联业务代码CTX.WriteAndFlush(msg) 3.发出网络服务器可以及时接收设备数据,网络服务器也可以及时将数据写入套接字缓冲区。但Netty客户端收到消息时延!!!(如5s时延) 4.服务器带宽配置入站100M/bps位/秒。出站5M/