在用Node.js创建的网站上播放mp3

时间:2014-02-04 17:02:44

标签: html node.js audio mp3 sails.js

我已经搜索了几个小时和几天的时间来解决我的问题。

首先我的方案: 我正在使用Node.js构建一个网站 - 尤其是Sails.js。 目标是获得我的服务器端目录(已经完成)的mp3文件列表,这些文件在客户端(网站)上作为链接打开。

当我点击一个链接时,我希望将文件加载到我的HTML音频标签中(或者如果有一个更好的node.js特定解决方案,启动/停止控制它也可以。)

这就是我目前的问题......

正如我所说的那样,我现在已经搜索了这个问题的最佳或最常见的解决方案......但目前还没有有用的教程或建议来解决这个问题。

我发现了很多模块,但它们(,如果我理解正确)仅用于在服务器端播放声音...例如:https://github.com/TooTallNate/node-speaker

最适合的解决方案可能是模块http://binaryjs.com。 但它表示兼容性有限:

  

目前支持Chrome 15+和Firefox 11+,IE10。堕落   将支持Safari,移动iOS和Android,以及较旧的FF / Chrome   版本正在开发中

所以我不确定我是否应该使用它。

所以我的问题: 是否有人已经为此方案构建了类似的东西或想法? 哪个模块最好能完成这项工作? 或者有没有人对binary.js有一些经验?

我希望有人可以帮助我,所以我不必再搜索几个小时:P

谢谢!

2 个答案:

答案 0 :(得分:3)

最后,我为我的场景找到了解决方案! 现在我在服务器端读取文件并将其转换为base64字符串 后来我在客户端使用此字符串并将其提供给我的音频标签! =)

这是我的例子。也许它会帮助其他人! :)

这是我的DirectoryController的服务器端控制器功能:

readFile: function(req, res){
    var fs = require('fs');
    var returnData = {};

    fs.readFile('D:\\Media\\Music\\TheAudioFile.mp3', function(err, file){
        var base64File = new Buffer(file, 'binary').toString('base64');

        returnData.fileContent = base64File;

        res.json(returnData);
    });
}

客户端现在可以通过ajax调用来调用控制器功能。在我的情况下,我通过socket.io GET调用它:

function loadFile(){
    socket.get('/directory/readFile', function(response){
        var audioSrc = 'data:audio/mp3;base64,' + response.fileContent;
        var audio = new Audio();

        audio.src = audioSrc;
        audio.load();
        audio.play();
    });
}


最后这是整个魔术! =)

如果有人有更好的解决方案==>让我知道! =)

答案 1 :(得分:0)

由客户端代码决定是否将.mp3包含在音频标记中。由于你使用的是Sails,你很可能只想要你的mp3文件assets,然后你可以从你的html中引用它们。