ffmpeg许多单个音频文件流与node.js和ionicframework

时间:2014-10-24 16:52:47

标签: audio ffmpeg streaming ionic-framework

我试图制作可以播放音频文件的移动应用,但是,音频文件很大,超过100 MB,而且我不想将此文件保存到设备中,我想制作将此文件传输到浏览器中。

我只使用ionicframework和phonegap插件构建原型,这是我项目的github: https://github.com/cmarrero01/famvoice 我的服务器在node.js中,所以我的第一个意图是将带有node.js的音频文件流式传输到音频标签,如下所示:

app.get('/record/:userId/:playListId/:recordName',function(req,res){

    var userId = req.params.userId;
    var playListId = req.params.playListId;
    var recordName = req.params.recordName;
    if(!userId || !playListId || !recordName){
        res.end();
        return;
    }

    var path = "./records/"+recordName;

    if (!params.fs.existsSync(path)) {
        res.end();
         return;
    }

    res.setHeader("content-type", "audio/mpeg");
    var stream = params.fs.createReadStream(path, { bufferSize: 64 * 1024 });
    stream.pipe(res);
}

在离子html中的音频标签:

<audio controls preload="none" type="audio/mpeg" autoplay> 
<source ng-src="{{audioPlay | trustAsResourceUrl}}" />
</audio>

这是一个坏的,坏的,坏的想法,当我将src添加到音频标签时,这等待下载所有文件开始播放它,所以这真的是一个流媒体,这是我下载的相同提出运行它。

所以,我的第二个想法是ffmpeg,ffserver。我安装ffmpeg,并使用此配置文件运行ffserver:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -

<Feed feed1.ffm>
        File /tmp/feed1.ffm
        FileMaxSize 200K
        ACL allow 127.0.0.1
</Feed>

<Stream status.html>
        Format status
        ACL allow 127.0.0.1
        ACL allow localhost
        ACL allow 192.168.0.0 192.168.255.255
</Stream>

<Stream test.mp3>
    Feed feed1.ffm
    Format mp2
    AudioCodec libmp3lame
    AudioBitRate 128
    AudioChannels 1
    AudioSampleRate 44100
    NoVideo
</Stream>

然后运行下一个命令:

ffmpeg test.mp3 http://IP:PORT/feed1.ffm

此命令将音频文件test.mp3发送到Feed,如果您访问url:http:// IP:PORT / test.mp3,您可以听... 但是,这是我的大问题...

我的问题是:

  1. ffmpeg将文件发送到Feed,当流程结束时,如果您可以尝试访问该网址,则无法收听任何内容,并且网址仍会保持加载状态。

  2. 请求用户可以选择要监听的文件,如何将特定文件流式传输给特定用户,而不是为所有用户更改流。我认为每个用户需要一个Feed?

  3. 存在某种方式将流发送到node.js并且node.js使用正确的编解码器和内容将其发送到应用程序?。

  4. 如果ffmpeg不是最佳方式,它是什么?

    感谢。

0 个答案:

没有答案