当前位置: 首页 > 面试题库 >

节点-找不到音频流

微生永春
2023-03-14
问题内容

我创建了一个简单的服务器,该服务器使用fs模块将mp3文件流式传输到浏览器,并以html5音频元素播放该文件。实际上,音频流非常好,但是,即使我要搜索的部分已经被缓冲,我也无法在音频流中进行搜索。

var express = require('express');
var app = express();
var fs = require('fs');

app.get('/', function (req, res) {
    var filePath = 'music.mp3';
    var stat = fs.statSync(filePath);

    res.writeHead(200, {
        'Content-Type': 'audio/mpeg',
        'Content-Length': stat.size,
    });

    var readStream = fs.createReadStream(filePath);
    readStream.pipe(res);
});

其他类似的问答也建议添加Content-Range标头,但我找不到如何做到这一点的简单示例。其他人则说使用206 Partial-Content标头,但是当我这样做时,音频将根本无法播放。

这是一个演示(在Windows的chrome上测试)


问题答案:

从这个问题的不可接受答案之一中调整代码:

var express = require('express'),
    fs = require('fs'),
    app = express()

app.get('/', function (req, res) {
    var filePath = 'music.mp3';
    var stat = fs.statSync(filePath);
    var total = stat.size;
    if (req.headers.range) {
        var range = req.headers.range;
        var parts = range.replace(/bytes=/, "").split("-");
        var partialstart = parts[0];
        var partialend = parts[1];

        var start = parseInt(partialstart, 10);
        var end = partialend ? parseInt(partialend, 10) : total-1;
        var chunksize = (end-start)+1;
        var readStream = fs.createReadStream(filePath, {start: start, end: end});
        res.writeHead(206, {
            'Content-Range': 'bytes ' + start + '-' + end + '/' + total,
            'Accept-Ranges': 'bytes', 'Content-Length': chunksize,
            'Content-Type': 'video/mp4'
        });
        readStream.pipe(res);
     } else {
        res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'audio/mpeg' });
        fs.createReadStream(filePath).pipe(res);
     }
});


 类似资料:
  • 我正在做一个项目,我需要发送一个音频流到一个节点。js服务器。我可以使用此功能捕获麦克风声音: 如你所见,我能够捕捉音频并在网站上播放。 现在我想把那个音频流发送到一个节点。js服务器,并将其发送回其他客户端。像语音聊天,但我不想使用WebRTC,因为我需要服务器中的流。我怎样才能做到这一点?我可以用插座吗。我想这样做?在我看到的示例中,他们录制了音频,并发送了一个文件,但我需要“实时”音频。

  • 问题内容: 这是我要运行的代码 这就是我得到的: module.js:340抛出错误; ^ 错误:找不到模块“ nw.gui” master/file-explorer/main.js:6:13) 我无法获得此模块。我该怎么办? 问题答案: 是NW.js(以前称为node-webkit)模块。从代码的运行时环境中运行代码时,NW.js应该提供对它的访问。 通过错误消息的外观,我认为您是直接通过No

  • 请问,有任何简单的方法流(广播)媒体文件(ogg,mp3,SPX..)通过Node.js和Socket.io从服务器到客户机(浏览器)?

  • 问题内容: 构建外壳为: 结果是: 为什么找不到node命令? 我正在使用docker官方jenkins映像运行它。 编辑:詹金斯:2.46.1-高山 问题答案: 根据问题JENKINS-34815(NodeJS插件无法安装全局NPM软件包)中的建议,检查您 看到这个评论: 使用当前的docker jenkins:2.32.1-alpine和插件nodejs:1.0时,在使用节点7.4时会再次发生

  • 我正在尝试添加AnalyserNode并将输出声音可视化到我制作的web音频示例中,但我不知道如何实现。我想我没有将正确的源传递给分析器(?) 完整代码如下:https://jsfidle.net/kepin95043/1ub0sjo3/ 谁能帮我找出我做错了什么?提前感谢! PS:用火狐打开吧。对我来说在基于Chromium的浏览器上不起作用。 下面是一个工作示例:https://codepen

  • 我有一个音乐播放器活动来控制歌曲的播放。我已经阅读了有关管理音频焦点的文档,并在