38 lines
962 B
JavaScript
38 lines
962 B
JavaScript
|
const fs = require("fs");
|
||
|
const path = require("path");
|
||
|
const crypto = require("crypto");
|
||
|
const { exec } = require("child_process");
|
||
|
|
||
|
const videokey = process.argv[2];
|
||
|
|
||
|
const base = path.join(__dirname, "public", "videos", videokey);
|
||
|
|
||
|
fs.mkdirSync(base);
|
||
|
|
||
|
fs.writeFileSync(
|
||
|
path.join(base, "key_info.txt"),
|
||
|
`
|
||
|
/videos/${videokey}/key_file.key
|
||
|
videos/${videokey}/key_file.key
|
||
|
`.trim(),
|
||
|
);
|
||
|
|
||
|
const key = crypto.randomBytes(16);
|
||
|
fs.writeFileSync(path.join(base, "key_file.key"), key);
|
||
|
|
||
|
const proc = exec(
|
||
|
`ffmpeg -i ../input.mp4 -c:v libx264 -c:a aac -f hls -hls_key_info_file videos/${videokey}/key_info.txt -hls_playlist_type vod -hls_flags independent_segments videos/${videokey}/output.m3u8`,
|
||
|
{ cwd: path.join(__dirname, "public") },
|
||
|
);
|
||
|
|
||
|
proc.stdout.on("data", (data) => {
|
||
|
console.log(data);
|
||
|
});
|
||
|
proc.stderr.on("data", (data) => {
|
||
|
console.error(data);
|
||
|
});
|
||
|
|
||
|
proc.on("exit", () => {
|
||
|
console.log("\n\nHotovo!\nhttp://localhost:3000/?" + videokey);
|
||
|
});
|