Skip to content

Commit

Permalink
HLS: Make ABR playlist
Browse files Browse the repository at this point in the history
  • Loading branch information
datagutt committed May 14, 2020
1 parent da27d3b commit 1e8c52f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
41 changes: 40 additions & 1 deletion misc/utils/helpers.js
@@ -1,6 +1,10 @@
const spawn = require('child_process').spawn;

const axios = require('axios');

const fs = require('fs');
const mkdirp = require('mkdirp');

const Logger = require('../../node_core_logger');

const config = require('../config');
Expand Down Expand Up @@ -147,10 +151,45 @@ const extractProgress = (command, stderrLine) => {
}
};

const ABRTemplate = (name, transcodeEnabled = false) => {
let line = `#EXTM3U\n#EXT-X-VERSION:4\n`;
line += `#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="src",NAME="src",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en"\n`;
if (transcodeEnabled) {
line += `#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=640x360,VIDEO="low"\n./../../live/${name}/index_low.m3u8\n`;
line += `#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1400000,RESOLUTION=842x480,VIDEO="medium"\n./../../live/${name}/index_medium.m3u8\n`;
line += `#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2800000,RESOLUTION=1280x720,VIDEO="high"\n./../../live/${name}/index_high.m3u8\n`;
}
line += `#EXT-X-STREAM-INF::PROGRAM-ID=1,BANDWIDTH=5000000,RESOLUTION=1920x1080,VIDEO="src"\n./../../live/${name}/index.m3u8`;
return line;
};

const makeABRPlaylist = (ouPath, name, transcodeEnabled) => {
return new Promise((resolve, reject) => {
const playlist = `${ouPath}/abr.m3u8`;
fs.open(playlist, 'w', (err, fd) => {
if (err) {
reject(err.message);
} else {
fs.writeFile(fd, ABRTemplate(name, transcodeEnabled), errWrite => {
if (errWrite) {
reject(errWrite.message);
return;
} else {
fs.close(fd, () => {
resolve();
});
}
});
}
});
});
};

module.exports = {
router,
auth,
generateStreamThumbnail,
removeStreamThumbnail,
extractProgress
extractProgress,
makeABRPlaylist
};
7 changes: 7 additions & 0 deletions node_trans_server.js
Expand Up @@ -12,6 +12,8 @@ const fs = require('fs');
const _ = require('lodash');
const mkdirp = require('mkdirp');

const makeABRPlaylist = require('./misc/utils/helpers').makeABRPlaylist;

class NodeTransServer {
constructor(config) {
this.config = config;
Expand Down Expand Up @@ -65,6 +67,11 @@ class NodeTransServer {
let [app, name] = _.slice(regRes, 1);
let i = this.config.trans.tasks && this.config.trans.tasks.length
? this.config.trans.tasks.length : 0;

// Create ABR (adaptive bitrate) playlist
let ouPath = `${this.config.http.mediaroot}/${app}/${name}`;
makeABRPlaylist(ouPath, name, this.config.misc.transcode);
// Start transcoding sessions
while (i--) {
let conf = this.config.trans.tasks[i];
conf.ffmpeg = this.config.trans.ffmpeg;
Expand Down

0 comments on commit 1e8c52f

Please sign in to comment.