From 4ec52d04dcc5d664612331f8e08d7d90da990415 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 21 Apr 2022 09:06:52 +0200 Subject: Add ability to save replay of permanent lives --- shared/models/server/job.model.ts | 3 +++ .../models/videos/live/live-video-create.model.ts | 5 +++-- shared/server-commands/videos/live-command.ts | 2 +- shared/server-commands/videos/live.ts | 23 +++++++++++++++++++--- 4 files changed, 27 insertions(+), 6 deletions(-) (limited to 'shared') diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts index 92d1b5698..9370cf011 100644 --- a/shared/models/server/job.model.ts +++ b/shared/models/server/job.model.ts @@ -159,6 +159,9 @@ export type VideoTranscodingPayload = export interface VideoLiveEndingPayload { videoId: number + publishedAt: string + + replayDirectory?: string } export interface ActorKeysPayload { diff --git a/shared/models/videos/live/live-video-create.model.ts b/shared/models/videos/live/live-video-create.model.ts index 49ccaf45b..bd245dec5 100644 --- a/shared/models/videos/live/live-video-create.model.ts +++ b/shared/models/videos/live/live-video-create.model.ts @@ -1,8 +1,9 @@ -import { LiveVideoLatencyMode } from '.' import { VideoCreate } from '../video-create.model' +import { LiveVideoLatencyMode } from './live-video-latency-mode.enum' export interface LiveVideoCreate extends VideoCreate { - saveReplay?: boolean permanentLive?: boolean latencyMode?: LiveVideoLatencyMode + + saveReplay?: boolean } diff --git a/shared/server-commands/videos/live-command.ts b/shared/server-commands/videos/live-command.ts index f7816eca0..c24c7a5fc 100644 --- a/shared/server-commands/videos/live-command.ts +++ b/shared/server-commands/videos/live-command.ts @@ -117,7 +117,7 @@ export class LiveCommand extends AbstractCommand { return this.server.servers.waitUntilLog(`${videoUUID}/${segmentName}`, 2, false) } - async waitUntilSaved (options: OverrideCommandOptions & { + async waitUntilReplacedByReplay (options: OverrideCommandOptions & { videoId: number | string }) { let video: VideoDetails diff --git a/shared/server-commands/videos/live.ts b/shared/server-commands/videos/live.ts index 7a7faa911..6f180b05f 100644 --- a/shared/server-commands/videos/live.ts +++ b/shared/server-commands/videos/live.ts @@ -1,6 +1,7 @@ import ffmpeg, { FfmpegCommand } from 'fluent-ffmpeg' import { buildAbsoluteFixturePath, wait } from '@shared/core-utils' import { PeerTubeServer } from '../server/server' +import { VideoDetails, VideoInclude } from '@shared/models' function sendRTMPStream (options: { rtmpBaseUrl: string @@ -84,17 +85,33 @@ async function waitUntilLivePublishedOnAllServers (servers: PeerTubeServer[], vi } } -async function waitUntilLiveSavedOnAllServers (servers: PeerTubeServer[], videoId: string) { +async function waitUntilLiveWaitingOnAllServers (servers: PeerTubeServer[], videoId: string) { for (const server of servers) { - await server.live.waitUntilSaved({ videoId }) + await server.live.waitUntilWaiting({ videoId }) } } +async function waitUntilLiveReplacedByReplayOnAllServers (servers: PeerTubeServer[], videoId: string) { + for (const server of servers) { + await server.live.waitUntilReplacedByReplay({ videoId }) + } +} + +async function findExternalSavedVideo (server: PeerTubeServer, liveDetails: VideoDetails) { + const { data } = await server.videos.list({ token: server.accessToken, sort: '-publishedAt', include: VideoInclude.BLACKLISTED }) + + return data.find(v => v.name === liveDetails.name + ' - ' + new Date(liveDetails.publishedAt).toLocaleString()) +} + export { sendRTMPStream, waitFfmpegUntilError, testFfmpegStreamError, stopFfmpeg, + waitUntilLivePublishedOnAllServers, - waitUntilLiveSavedOnAllServers + waitUntilLiveReplacedByReplayOnAllServers, + waitUntilLiveWaitingOnAllServers, + + findExternalSavedVideo } -- cgit v1.2.3