node.js音频流,初始页面加载后缺少范围标头?

时间:2018-12-02 03:33:04

标签: node.js ecmascript-6 http-headers audio-streaming

我有这个音频流代码,当用户在浏览器上与视频流进行交互时,我试图在其中获取范围值,但是在这种情况下,这种行为不会加在一起;初始页面加载后,请求中不再存在该范围,甚至在随后的刷新中也是如此。

const { createServer } = require('http');
const { createReadStream, stat } = require('fs');
const path = require('path');
const { promisify } = require('util');
const fileInfo = promisify(stat);
const audiofile = path.join(__dirname, 'myfile.mp3');

createServer(async (req, res) => {
    const { size } = await fileInfo(audiofile);
    let range = req.headers.range;

    if(range) {
        console.log(range);

        let [start, end] = range.replace(/bytes=/, '').split('-');
        start = parseInt(start, 10);
        end = end ? parseInt(end, 10) : size - 1;

        res.writeHead(206, {
            'Content-Range': `bytes ${start}-${end}/${size}`,
            'Accept-Ranges': 'bytes',
            'Content-Type': 'audio/mpeg',
            'Content-Length': (end-start) + 1,
        });

        createReadStream(audiofile, { start, end }).pipe(res);
    }
    else {
        console.log(range);

        res.writeHead(200, {'Content-Length': size,'Content-Type':'audio/mpeg'});
        createReadStream(audiofile).pipe(res);
    }
}).listen(3000);

我缺少什么,标题顺序是否错误,或者如何保持范围值?有人告诉我这将是代码重写,因为我认为处理视频是一回事,而音频是另一回事。

0 个答案:

没有答案