From 26e3e98ff0e222a9fb9226938ac6902af77921bd Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 3 May 2022 11:38:07 +0200 Subject: Support live session in server --- shared/models/server/job.model.ts | 1 + shared/models/videos/live/index.ts | 2 + shared/models/videos/live/live-video-error.enum.ts | 7 ++++ .../models/videos/live/live-video-session.model.ts | 16 ++++++++ shared/server-commands/videos/live-command.ts | 48 +++++++++++++++++++++- 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 shared/models/videos/live/live-video-error.enum.ts create mode 100644 shared/models/videos/live/live-video-session.model.ts (limited to 'shared') diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts index 9370cf011..bc5ffa570 100644 --- a/shared/models/server/job.model.ts +++ b/shared/models/server/job.model.ts @@ -160,6 +160,7 @@ export type VideoTranscodingPayload = export interface VideoLiveEndingPayload { videoId: number publishedAt: string + liveSessionId: number replayDirectory?: string } diff --git a/shared/models/videos/live/index.ts b/shared/models/videos/live/index.ts index 68f32092a..07b59fe2c 100644 --- a/shared/models/videos/live/index.ts +++ b/shared/models/videos/live/index.ts @@ -1,6 +1,8 @@ export * from './live-video-create.model' +export * from './live-video-error.enum' export * from './live-video-event-payload.model' export * from './live-video-event.type' export * from './live-video-latency-mode.enum' +export * from './live-video-session.model' export * from './live-video-update.model' export * from './live-video.model' diff --git a/shared/models/videos/live/live-video-error.enum.ts b/shared/models/videos/live/live-video-error.enum.ts new file mode 100644 index 000000000..3a8e4afa0 --- /dev/null +++ b/shared/models/videos/live/live-video-error.enum.ts @@ -0,0 +1,7 @@ +export const enum LiveVideoError { + BAD_SOCKET_HEALTH = 1, + DURATION_EXCEEDED = 2, + QUOTA_EXCEEDED = 3, + FFMPEG_ERROR = 4, + BLACKLISTED = 5 +} diff --git a/shared/models/videos/live/live-video-session.model.ts b/shared/models/videos/live/live-video-session.model.ts new file mode 100644 index 000000000..7ff6afbe5 --- /dev/null +++ b/shared/models/videos/live/live-video-session.model.ts @@ -0,0 +1,16 @@ +import { LiveVideoError } from './live-video-error.enum' + +export interface LiveVideoSession { + id: number + + startDate: string + endDate: string + + error: LiveVideoError + + replayVideo: { + id: number + uuid: string + shortUUID: string + } +} diff --git a/shared/server-commands/videos/live-command.ts b/shared/server-commands/videos/live-command.ts index c24c7a5fc..2ff65881b 100644 --- a/shared/server-commands/videos/live-command.ts +++ b/shared/server-commands/videos/live-command.ts @@ -4,7 +4,17 @@ import { readdir } from 'fs-extra' import { omit } from 'lodash' import { join } from 'path' import { wait } from '@shared/core-utils' -import { HttpStatusCode, LiveVideo, LiveVideoCreate, LiveVideoUpdate, VideoCreateResult, VideoDetails, VideoState } from '@shared/models' +import { + HttpStatusCode, + LiveVideo, + LiveVideoCreate, + LiveVideoSession, + LiveVideoUpdate, + ResultList, + VideoCreateResult, + VideoDetails, + VideoState +} from '@shared/models' import { unwrapBody } from '../requests' import { AbstractCommand, OverrideCommandOptions } from '../shared' import { sendRTMPStream, testFfmpegStreamError } from './live' @@ -25,6 +35,42 @@ export class LiveCommand extends AbstractCommand { }) } + listSessions (options: OverrideCommandOptions & { + videoId: number | string + }) { + const path = `/api/v1/videos/live/${options.videoId}/sessions` + + return this.getRequestBody>({ + ...options, + + path, + implicitToken: true, + defaultExpectedStatus: HttpStatusCode.OK_200 + }) + } + + async findLatestSession (options: OverrideCommandOptions & { + videoId: number | string + }) { + const { data: sessions } = await this.listSessions(options) + + return sessions[sessions.length - 1] + } + + getReplaySession (options: OverrideCommandOptions & { + videoId: number | string + }) { + const path = `/api/v1/videos/${options.videoId}/live-session` + + return this.getRequestBody({ + ...options, + + path, + implicitToken: true, + defaultExpectedStatus: HttpStatusCode.OK_200 + }) + } + update (options: OverrideCommandOptions & { videoId: number | string fields: LiveVideoUpdate -- cgit v1.2.3