stream mp3 file express server with ability to fast forward/rewind

后端 未结 1 1297
半阙折子戏
半阙折子戏 2020-12-18 16:27

I have a little express server that either downloads or streams an mp3 file, which looks like this:

const express = require(\'express\');
const fs = require(         


        
1条回答
  •  囚心锁ツ
    2020-12-18 17:22

    Found the answer here.

    const express = require('express'),
        bodyParser = require('body-parser'),
        path = require('path'),
        fs = require('fs'),
        app = express();
    
    // app.use('/mp3', express.static(__dirname + '/mp3'));
    
    app.get('/', (req, res) => {
        res.sendFile(__dirname + '/index.html');
    });
    
    app.get('/stream', (req, res) => {
        const file = __dirname + '/mp3/trololol.mp3';
        const stat = fs.statSync(file);
        const total = stat.size;
        if (req.headers.range) {
    
        }
        fs.exists(file, (exists) => {
            if (exists) {
                const range = req.headers.range;
                const parts = range.replace(/bytes=/, '').split('-');
                const partialStart = parts[0];
                const partialEnd = parts[1];
    
                const start = parseInt(partialStart, 10);
                const end = partialEnd ? parseInt(partialEnd, 10) : total - 1;
                const chunksize = (end - start) + 1;
                const rstream = fs.createReadStream(file, {start: start, end: end});
    
                res.writeHead(206, {
                    'Content-Range': 'bytes ' + start + '-' + end + '/' + total,
                    'Accept-Ranges': 'bytes', 'Content-Length': chunksize,
                    'Content-Type': 'audio/mpeg'
                });
                rstream.pipe(res);
    
            } else {
                res.send('Error - 404');
                res.end();
                // res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'audio/mpeg' });
                // fs.createReadStream(path).pipe(res);
            }
        });
    });
    
    app.get('/download', (req, res) => {
        const file = __dirname + '/mp3/trololol.mp3';
        res.download(file);
    });
    
    app.listen(3000, () => console.log('Example app listening on port 3000!'));
    

    0 讨论(0)
提交回复
热议问题