Refetch missing media from catalog source
This commit is contained in:
@@ -158,7 +158,7 @@ function metaFromInfo(info, duration) {
|
||||
// getInfo async (videoId) => yt-dlp -J info — duration, live flags, meta
|
||||
// ----------------------------------------------------------------------------
|
||||
export function createMediaCache({
|
||||
dir, db, download, getInfo,
|
||||
dir, db, download, getInfo, getSourceUrl = id => `https://www.youtube.com/watch?v=${id}`,
|
||||
ffmpeg = 'ffmpeg', ffprobe = 'ffprobe', nice = 'nice',
|
||||
maxBytes = 10 * 1024 ** 3,
|
||||
minFreeBytes = 5 * 1024 ** 3,
|
||||
@@ -314,7 +314,9 @@ export function createMediaCache({
|
||||
await job.persisted;
|
||||
try {
|
||||
await setStatus(job, 'downloading');
|
||||
const info = await getInfo(id);
|
||||
const sourceUrl = await getSourceUrl(id);
|
||||
if (!sourceUrl || !/^https:\/\/www\.youtube\.com\/watch\?v=[\w-]{11}$/.test(sourceUrl)) throw new MediaSkip('source URL is unavailable');
|
||||
const info = await getInfo(id, sourceUrl);
|
||||
const live = info.is_live || ['is_live', 'post_live', 'is_upcoming'].includes(info.live_status);
|
||||
if (live) throw new MediaSkip('live streams are not cached');
|
||||
const expected = typeof info.duration === 'number' ? info.duration : 0;
|
||||
@@ -324,7 +326,7 @@ export function createMediaCache({
|
||||
}
|
||||
await makeRoom(id, Math.max(expected, 60) * EST_BYTES_PER_SEC);
|
||||
|
||||
const raw = await download(id, `${base}.dl.mp4`);
|
||||
const raw = await download(id, `${base}.dl.mp4`, sourceUrl);
|
||||
await setStatus(job, 'validating');
|
||||
|
||||
// Normalise: first video + first audio, moov atom up front so the copy
|
||||
|
||||
Reference in New Issue
Block a user