prevent crash if youtube video is fucked up
ill remake a youtube function to pick a good video instead of broken one later, i just dont want cobalt to hang if one youtube cdn is down i hate youtube so much
This commit is contained in:
parent
7ff5f56538
commit
a5e081e2bf
3 changed files with 34 additions and 22 deletions
|
@ -81,7 +81,7 @@ if (fs.existsSync('./.env')) {
|
|||
res.status(200).json({ "status": "continue" });
|
||||
} else if (req.query.t) {
|
||||
let ip = req.header('x-forwarded-for') ? req.header('x-forwarded-for') : req.ip
|
||||
stream(res, ip, req.query.t, req.query.h, req.query.e, languageCode(req));
|
||||
stream(res, ip, req.query.t, req.query.h, req.query.e);
|
||||
} else {
|
||||
let j = apiJSON(0, { t: loc(languageCode(req), 'ErrorNoStreamID') })
|
||||
res.status(j.status).json(j.body);
|
||||
|
|
|
@ -2,7 +2,7 @@ import { apiJSON } from "../sub/utils.js";
|
|||
import { verifyStream } from "./manage.js";
|
||||
import { streamAudioOnly, streamDefault, streamLiveRender } from "./types.js";
|
||||
|
||||
export default function(res, ip, id, hmac, exp, lang) {
|
||||
export default function(res, ip, id, hmac, exp) {
|
||||
try {
|
||||
let streamInfo = verifyStream(ip, id, hmac, exp, process.env.streamSalt);
|
||||
if (!streamInfo.error) {
|
||||
|
@ -11,10 +11,10 @@ export default function(res, ip, id, hmac, exp, lang) {
|
|||
} else {
|
||||
switch (streamInfo.type) {
|
||||
case "render":
|
||||
streamLiveRender(streamInfo, res, lang);
|
||||
streamLiveRender(streamInfo, res);
|
||||
break;
|
||||
default:
|
||||
streamDefault(streamInfo, res, lang);
|
||||
streamDefault(streamInfo, res);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@ import ffmpeg from "ffmpeg-static";
|
|||
import got from "got";
|
||||
import { ffmpegArgs, genericUserAgent } from "../config.js";
|
||||
import { msToTime } from "../sub/utils.js";
|
||||
import { internalError } from "../sub/errors.js";
|
||||
import loc from "../../localization/manager.js";
|
||||
|
||||
export async function streamDefault(streamInfo, res) {
|
||||
try {
|
||||
|
@ -16,16 +14,16 @@ export async function streamDefault(streamInfo, res) {
|
|||
isStream: true
|
||||
});
|
||||
stream.pipe(res).on('error', (err) => {
|
||||
internalError(res);
|
||||
res.end();
|
||||
});
|
||||
stream.on('error', (err) => {
|
||||
internalError(res);
|
||||
res.end();
|
||||
});
|
||||
} catch (e) {
|
||||
internalError(res);
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
export async function streamLiveRender(streamInfo, res, lang) {
|
||||
export async function streamLiveRender(streamInfo, res) {
|
||||
try {
|
||||
if (streamInfo.urls.length == 2) {
|
||||
let headers = {};
|
||||
|
@ -51,28 +49,39 @@ export async function streamLiveRender(streamInfo, res, lang) {
|
|||
'pipe', 'pipe', 'pipe'
|
||||
],
|
||||
});
|
||||
ffmpegProcess.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
});
|
||||
audio.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
});
|
||||
video.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
});
|
||||
res.setHeader('Content-Disposition', `attachment; filename="${streamInfo.filename}"`);
|
||||
ffmpegProcess.stdio[5].pipe(res);
|
||||
|
||||
ffmpegProcess.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
return;
|
||||
});
|
||||
video.pipe(ffmpegProcess.stdio[3]).on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
return;
|
||||
});
|
||||
audio.pipe(ffmpegProcess.stdio[4]).on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
return;
|
||||
});
|
||||
audio.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
return;
|
||||
});
|
||||
video.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
return;
|
||||
});
|
||||
} else {
|
||||
res.status(400).json({ status: "error", text: loc(lang, 'ErrorCorruptedStream') });
|
||||
res.end();
|
||||
}
|
||||
} catch (e) {
|
||||
internalError(res);
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
export async function streamAudioOnly(streamInfo, res) {
|
||||
|
@ -100,16 +109,19 @@ export async function streamAudioOnly(streamInfo, res) {
|
|||
});
|
||||
ffmpegProcess.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
});
|
||||
audio.on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
});
|
||||
res.setHeader('Content-Disposition', `attachment; filename="${streamInfo.filename}.${streamInfo.audioFormat}"`);
|
||||
ffmpegProcess.stdio[4].pipe(res);
|
||||
audio.pipe(ffmpegProcess.stdio[3]).on('error', (err) => {
|
||||
ffmpegProcess.kill();
|
||||
res.end();
|
||||
});
|
||||
} catch (e) {
|
||||
internalError(res);
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue