【问题标题】:Create a buffer and pipe data to play it javascript创建一个缓冲区和管道数据来播放它 javascript
【发布时间】:2017-03-27 08:32:28
【问题描述】:

我正在尝试使用电子播放来自 torrent 的流式声音。为此,我使用https://github.com/feross/webtorrent 下载电子主进程中的所有数据。然后,当我选择要下载的声音时,我会在以下函数中获得要播放的文件流并发送到 html 渲染器进程

ipc.on('getPlayData', function(event, data){
    console.log('get file data stream');
    in_play = data[1];

    //Crea el stream del archivo que se va a reproducir
    var streamfile = downloaderInstance.getFileToPlay(data[0], data[1]).createReadStream();

    //se envia la longiud del archivo en bytes para el buffer.
    event.sender.send('toPlay', [downloaderInstance.getFileToPlay(data[0], data[1]).name,
             downloaderInstance.getFileToPlay(data[0], data[1]).length]);

    streamfile.on('data', function(chunk){
        event.sender.send('addData', chunk);
});

“toPlay”消息告诉渲染器参数需要放入 html 中的文件和数据发送我从种子种子获得的每个数据。

然后在渲染器过程中,我将数据放入缓冲区以将其与https://github.com/feross/render-media 一起使用,但我也尝试使用 JavaScript 的 WebAudioApi。我在以下函数中管理数据:

ipc.on('toPlay', (event, data) => {
    console.log("to play: " + data[0]);
    var buf = [];
    var stream_length = parseInt(data[1]);
    var stream_data = Buffer.alloc(stream_length);

    ipc.on('addData', (event, data) => {
         buf.push(data);
         stream_data = Buffer.concat(buf);
    })

    var file = {
         name: data[0],
         createReadStream: function(opts){
         //console.log(stream_data.length);
         return from( [stream_data.slice(0, stream_length) ]);
         }
    }

    //console.log(file.createReadStream);
    render.render(file, 'audio', [true, true, stream_length], function(err, elem){
     if(err){ return console.log('error appending') }
    })
})

其中 render 它是一个在音频 DOM 节点中播放媒体源的函数。我的问题是我在缓冲区中保留了文件的全部内存,将渲染函数设置为文件的完整持续时间,但它只播放我已经下载的数据,而不是在 ipc 接收到新闻时重新加载数据,我可以'找不到办法做到这一点。

【问题讨论】:

标签: javascript audio electron webtorrent


【解决方案1】:

解决办法是

var readableStream = new Readable();

var file = {
         name: data[0],
         createReadStream: function(opts){
         return ReadableStream;
         }
    }

但在返回之前应该完全加载可读的。

【讨论】:

  • 看起来很有希望我现在就去尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多