Skip to content

Instantly share code, notes, and snippets.

@leandrodaher
Forked from DingGGu/stream.js
Created December 6, 2023 19:49
Show Gist options
  • Save leandrodaher/b94c5de61b05a63efac8657892e5dbc6 to your computer and use it in GitHub Desktop.
Save leandrodaher/b94c5de61b05a63efac8657892e5dbc6 to your computer and use it in GitHub Desktop.

Revisions

  1. DingGGu revised this gist May 7, 2016. 1 changed file with 30 additions and 18 deletions.
    48 changes: 30 additions & 18 deletions stream.js
    Original file line number Diff line number Diff line change
    @@ -13,23 +13,35 @@ app.get('/api/play/:key', function(req, res) {

    var stat = fs.statSync(music);
    range = req.headers.range;

    console.log(req.headers);
    var parts = range.replace(/bytes=/, "").split("-");

    var partial_start = parts[0];
    var partial_end = parts[1];

    var start = parseInt(partial_start, 10);
    var end = partial_end ? parseInt(partial_end, 10) : stat.size-1;
    var content_length = (end-start)+1;

    res.status(206).header({
    'Content-Type': 'audio/mpeg',
    'Content-Length': content_length,
    'Content-Range': "bytes " + start + "-" + end + "/" + stat.size
    });

    var readStream = fs.createReadStream(music, {start: start, end: end});
    var readStream;

    if (range !== undefined) {
    var parts = range.replace(/bytes=/, "").split("-");

    var partial_start = parts[0];
    var partial_end = parts[1];

    if ((isNaN(partial_start) && partial_start.length > 1) || (isNaN(partial_end) && partial_end.length > 1)) {
    return res.sendStatus(500); //ERR_INCOMPLETE_CHUNKED_ENCODING
    }

    var start = parseInt(partial_start, 10);
    var end = partial_end ? parseInt(partial_end, 10) : stat.size - 1;
    var content_length = (end - start) + 1;

    res.status(206).header({
    'Content-Type': 'audio/mpeg',
    'Content-Length': content_length,
    'Content-Range': "bytes " + start + "-" + end + "/" + stat.size
    });

    readStream = fs.createReadStream(music, {start: start, end: end});
    } else {
    res.header({
    'Content-Type': 'audio/mpeg',
    'Content-Length': stat.size
    });
    readStream = fs.createReadStream(music);
    }
    readStream.pipe(res);
    });
  2. DingGGu created this gist Apr 7, 2015.
    35 changes: 35 additions & 0 deletions stream.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    var express = require('express');
    var app = express();
    var fs = require('fs');

    app.listen(3000, function() {
    console.log("[NodeJS] Application Listening on Port 3000");
    });

    app.get('/api/play/:key', function(req, res) {
    var key = req.params.key;

    var music = 'music/' + key + '.mp3';

    var stat = fs.statSync(music);
    range = req.headers.range;

    console.log(req.headers);
    var parts = range.replace(/bytes=/, "").split("-");

    var partial_start = parts[0];
    var partial_end = parts[1];

    var start = parseInt(partial_start, 10);
    var end = partial_end ? parseInt(partial_end, 10) : stat.size-1;
    var content_length = (end-start)+1;

    res.status(206).header({
    'Content-Type': 'audio/mpeg',
    'Content-Length': content_length,
    'Content-Range': "bytes " + start + "-" + end + "/" + stat.size
    });

    var readStream = fs.createReadStream(music, {start: start, end: end});
    readStream.pipe(res);
    });