2014-06-12 101 views
2

我已經搜索了一段時間解決這個問題,但沒有找到太多東西。當從socket.io接收到消息時播放來自客戶端的音頻 - node.js

我的目標是從udp客戶端收到一條消息,服務器接收並轉發給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(); 
}); 

本頁由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'); 

你可以去這個鏈接,查看錯誤鍍鉻了。 http://postimg.org/image/xkv7a2kwb/

有沒有人有任何想法如何解決這個問題?

+0

你能澄清「通過我的本地網絡」?你在同一臺機器上還是另一臺機器上? – Avery

+0

這也可能是相關的:http://stackoverflow.com/questions/12009423/what-does-status-canceled-for-a-resource-mean-in-chrome-developer-tools – Avery

回答

0

當您對靜態文件有不正確的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(...)等之前放置上面的代碼行。

希望這些信息可以幫助某人。

+0

這很好地闡明瞭它。謝謝! – batchi

相關問題