aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2022-04-21 09:06:52 +0200
committerChocobozzz <me@florianbigard.com>2022-04-21 11:47:57 +0200
commit4ec52d04dcc5d664612331f8e08d7d90da990415 (patch)
tree4b193f9f8f210caaf2dbe05ef3e37fa3a6fc28f0 /shared
parent2024a3b9338d667640aa115da6071ea83d088c50 (diff)
downloadPeerTube-4ec52d04dcc5d664612331f8e08d7d90da990415.tar.gz
PeerTube-4ec52d04dcc5d664612331f8e08d7d90da990415.tar.zst
PeerTube-4ec52d04dcc5d664612331f8e08d7d90da990415.zip
Add ability to save replay of permanent lives
Diffstat (limited to 'shared')
-rw-r--r--shared/models/server/job.model.ts3
-rw-r--r--shared/models/videos/live/live-video-create.model.ts5
-rw-r--r--shared/server-commands/videos/live-command.ts2
-rw-r--r--shared/server-commands/videos/live.ts23
4 files changed, 27 insertions, 6 deletions
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 =
159 159
160export interface VideoLiveEndingPayload { 160export interface VideoLiveEndingPayload {
161 videoId: number 161 videoId: number
162 publishedAt: string
163
164 replayDirectory?: string
162} 165}
163 166
164export interface ActorKeysPayload { 167export 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 @@
1import { LiveVideoLatencyMode } from '.'
2import { VideoCreate } from '../video-create.model' 1import { VideoCreate } from '../video-create.model'
2import { LiveVideoLatencyMode } from './live-video-latency-mode.enum'
3 3
4export interface LiveVideoCreate extends VideoCreate { 4export interface LiveVideoCreate extends VideoCreate {
5 saveReplay?: boolean
6 permanentLive?: boolean 5 permanentLive?: boolean
7 latencyMode?: LiveVideoLatencyMode 6 latencyMode?: LiveVideoLatencyMode
7
8 saveReplay?: boolean
8} 9}
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 {
117 return this.server.servers.waitUntilLog(`${videoUUID}/${segmentName}`, 2, false) 117 return this.server.servers.waitUntilLog(`${videoUUID}/${segmentName}`, 2, false)
118 } 118 }
119 119
120 async waitUntilSaved (options: OverrideCommandOptions & { 120 async waitUntilReplacedByReplay (options: OverrideCommandOptions & {
121 videoId: number | string 121 videoId: number | string
122 }) { 122 }) {
123 let video: VideoDetails 123 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 @@
1import ffmpeg, { FfmpegCommand } from 'fluent-ffmpeg' 1import ffmpeg, { FfmpegCommand } from 'fluent-ffmpeg'
2import { buildAbsoluteFixturePath, wait } from '@shared/core-utils' 2import { buildAbsoluteFixturePath, wait } from '@shared/core-utils'
3import { PeerTubeServer } from '../server/server' 3import { PeerTubeServer } from '../server/server'
4import { VideoDetails, VideoInclude } from '@shared/models'
4 5
5function sendRTMPStream (options: { 6function sendRTMPStream (options: {
6 rtmpBaseUrl: string 7 rtmpBaseUrl: string
@@ -84,17 +85,33 @@ async function waitUntilLivePublishedOnAllServers (servers: PeerTubeServer[], vi
84 } 85 }
85} 86}
86 87
87async function waitUntilLiveSavedOnAllServers (servers: PeerTubeServer[], videoId: string) { 88async function waitUntilLiveWaitingOnAllServers (servers: PeerTubeServer[], videoId: string) {
88 for (const server of servers) { 89 for (const server of servers) {
89 await server.live.waitUntilSaved({ videoId }) 90 await server.live.waitUntilWaiting({ videoId })
90 } 91 }
91} 92}
92 93
94async function waitUntilLiveReplacedByReplayOnAllServers (servers: PeerTubeServer[], videoId: string) {
95 for (const server of servers) {
96 await server.live.waitUntilReplacedByReplay({ videoId })
97 }
98}
99
100async function findExternalSavedVideo (server: PeerTubeServer, liveDetails: VideoDetails) {
101 const { data } = await server.videos.list({ token: server.accessToken, sort: '-publishedAt', include: VideoInclude.BLACKLISTED })
102
103 return data.find(v => v.name === liveDetails.name + ' - ' + new Date(liveDetails.publishedAt).toLocaleString())
104}
105
93export { 106export {
94 sendRTMPStream, 107 sendRTMPStream,
95 waitFfmpegUntilError, 108 waitFfmpegUntilError,
96 testFfmpegStreamError, 109 testFfmpegStreamError,
97 stopFfmpeg, 110 stopFfmpeg,
111
98 waitUntilLivePublishedOnAllServers, 112 waitUntilLivePublishedOnAllServers,
99 waitUntilLiveSavedOnAllServers 113 waitUntilLiveReplacedByReplayOnAllServers,
114 waitUntilLiveWaitingOnAllServers,
115
116 findExternalSavedVideo
100} 117}