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

Posted

技术标签:

【中文标题】从 socket.io 收到消息时从客户端播放音频 - node.js【英文标题】:Play Audio from client when message is recieved from socket.io - node.js 【发布时间】:2014-08-02 22:08:53 【问题描述】:

我已经搜索了一段时间来解决这个问题,但没有找到太多。

我的目标是从 udp 客户端接收消息,服务器接收并转发到 Web 客户端,该客户端在每次收到消息时播放音频剪辑。但是,由于某种原因,音频不会播放。如果我直接从我的目录打开页面,则可以播放音频,但如果我尝试通过 localhost 访问它,则无法加载。有谁知道解决方案?

这里是客户端的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();
);

此页面由 server.js 提供,这是一个使用 socket.io 和 express 的 node.js 文件。我没有收到来自我的 console.log 的任何错误。 这是server.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/

有人对如何解决这个问题有任何想法吗?

【问题讨论】:

你能澄清一下“通过我的本地网络”吗?你是在同一台机器上还是另一台机器上? 这也可能是相关的:***.com/questions/12009423/… 【参考方案1】:

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

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

所以在服务器端的某个地方你应该有这样的东西:

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

这样做http://localhost/public/audio/Bloom.mp3 请求将与/path/to/public/audio/Bloom.mp3 文件一起提供。

警告:

从 Express 4 开始有 "no more app.use(app.router)" 和“所有路由方法将按照它们出现的顺序添加”。这意味着您必须将上述代码行放在第一个app.get(...)app.post(...)等之前。

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

【讨论】:

这很好地澄清了它。谢谢!【参考方案2】:

我们还可以将音调上传到云存储并使用如下所示的源

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

每当有新消息进入时在客户端触发此功能

【讨论】:

以上是关于从 socket.io 收到消息时从客户端播放音频 - node.js的主要内容,如果未能解决你的问题,请参考以下文章

通过 socket.io 流式传输实时音频

如何从客户端断开和重新连接 socket.io?

socket.io 客户端未从服务器接收消息

节点(套接字)实时音频流/广播

Socket.io 客户端未收到事件

自定义 node-red-node socket.io 客户端建立连接但在收到数据时崩溃?