Skip to content

Instantly share code, notes, and snippets.

@t0rr3sp3dr0
Last active July 21, 2018 22:00
Show Gist options
  • Save t0rr3sp3dr0/6610d9ee1e61e3dcee7d2605b4792cba to your computer and use it in GitHub Desktop.
Save t0rr3sp3dr0/6610d9ee1e61e3dcee7d2605b4792cba to your computer and use it in GitHub Desktop.
node ./dlna_streamer.js video.mp4
#!/usr/bin/env node
const fs = require('fs');
const os = require('os');
const path = require('path');
const dlnacasts = require('dlnacasts')();
const express = require('express');
const mime = require('mime-types');
const tmp = require('tmp');
process.on('SIGINT', () => {
dlnacasts.players.forEach(player => player.stop());
setTimeout(process.exit, 1000);
});
if (['http', 'https'].indexOf(process.argv[2].split(':')[0]) !== -1) {
const filePath = process.argv[2];
const basename = path.basename(filePath);
const extname = path.extname(filePath);
const mimeType = mime.contentType(extname);
dlnacasts.on('update', player => {
console.log(player);
player.play(filePath, { title: basename, type: mimeType });
});
} else {
const filePath = path.resolve(process.argv[2]);
const basename = path.basename(filePath);
const extname = path.extname(filePath);
const mimeType = mime.contentType(extname);
const tmpDir = tmp.dirSync().name;
fs.symlinkSync(filePath, path.join(tmpDir, `video${extname}`));
const app = express();
app.use(express.static(tmpDir));
const listener = app.listen(0);
const address = [].concat.apply([], Object.values(os.networkInterfaces())).filter(details => details.family === 'IPv4' && details.internal === false)[0].address;
const port = listener.address().port;
dlnacasts.on('update', player => {
console.log(player);
player.play(`http://${address}:${port}/video${extname}`, { title: basename, type: mimeType });
});
}
setInterval(dlnacasts.update, 125);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment