【发布时间】:2016-08-02 17:55:27
【问题描述】:
继续Node - how can i pipe to a new READABLE stream?
我正在尝试使用fs.watch 和fs.stat 为我的实时编码MP3 文件创建一个新的ReadStream,当它达到一定大小(基本上是预缓冲)时。
它可以工作,但是一旦ReadStream 启动,我不知道如何退出观察程序并保持流运行。
我尝试了如下的承诺,但从未解决,所以streamEncodedFile 被反复调用:
var watcher = fs.watch(mp3RecordingFile);
watcher.on('change', (event, path) => {
fs.stat(mp3RecordingFile, function (err, stats) {
if (stats.size > 75533) {
new Promise(function(resolve, reject) {
streamEncodedFile();
})
.then(function(result) {
watcher.close();
console.log('watcher closed');
});
}
});
});
function streamEncodedFile() {
var mp3File = fs.createReadStream(mp3RecordingFile);
mp3File.on('data', function(buffer){
io.sockets.emit('audio', { buffer: buffer });
});
}
我的另一个可悲的尝试是尝试仅以特定文件大小启动流:
watcher.on('change', (event, path) => {
fs.stat(mp3RecordingFile, function (err, stats) {
console.log(stats.size);
if (stats.size > 75533 && stats.size < 75535) {
streamEncodedFile();
} else if (stats.size > 75535) {
watcher.close();
}
});
});
【问题讨论】:
-
var watcher = fs.watch(mp3RecordingFile); watcher.on('change', (event, path) => { fs.stat(mp3RecordingFile, function(err, stats) { if (stats.size > 75533) { streamEncodedFile(); } }); }); function streamEncodedFile() { var mp3File = fs.createReadStream(mp3RecordingFile); mp3File.on('data', function(buffer) { io.sockets.emit('audio', { buffer: buffer }); }); watcher.close(); } -
谢谢。我应该说我试过了,但是 ReadStream 结束了。我相信这就是为什么github.com/jasontbradshaw/tailing-stream
标签: javascript node.js stream