diff options
author | Chocobozzz <me@florianbigard.com> | 2023-01-27 09:04:02 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2023-01-27 09:04:02 +0100 |
commit | afb371d940531a5a8aafb5895b369b9cdecd555b (patch) | |
tree | 0456b1fcc83b57a24c8e10b6a9886e1841ceb937 /server/lib/live/live-manager.ts | |
parent | 06a9fdf4331db011d1d77aa09911b17d76d69b85 (diff) | |
download | PeerTube-afb371d940531a5a8aafb5895b369b9cdecd555b.tar.gz PeerTube-afb371d940531a5a8aafb5895b369b9cdecd555b.tar.zst PeerTube-afb371d940531a5a8aafb5895b369b9cdecd555b.zip |
Refactor playlist creation for lives
Diffstat (limited to 'server/lib/live/live-manager.ts')
-rw-r--r-- | server/lib/live/live-manager.ts | 34 |
1 files changed, 5 insertions, 29 deletions
diff --git a/server/lib/live/live-manager.ts b/server/lib/live/live-manager.ts index fa4e1df07..1d5b8bf14 100644 --- a/server/lib/live/live-manager.ts +++ b/server/lib/live/live-manager.ts | |||
@@ -13,18 +13,18 @@ import { | |||
13 | } from '@server/helpers/ffmpeg' | 13 | } from '@server/helpers/ffmpeg' |
14 | import { logger, loggerTagsFactory } from '@server/helpers/logger' | 14 | import { logger, loggerTagsFactory } from '@server/helpers/logger' |
15 | import { CONFIG, registerConfigChangedHandler } from '@server/initializers/config' | 15 | import { CONFIG, registerConfigChangedHandler } from '@server/initializers/config' |
16 | import { P2P_MEDIA_LOADER_PEER_VERSION, VIDEO_LIVE } from '@server/initializers/constants' | 16 | import { VIDEO_LIVE } from '@server/initializers/constants' |
17 | import { UserModel } from '@server/models/user/user' | 17 | import { UserModel } from '@server/models/user/user' |
18 | import { VideoModel } from '@server/models/video/video' | 18 | import { VideoModel } from '@server/models/video/video' |
19 | import { VideoLiveModel } from '@server/models/video/video-live' | 19 | import { VideoLiveModel } from '@server/models/video/video-live' |
20 | import { VideoLiveSessionModel } from '@server/models/video/video-live-session' | 20 | import { VideoLiveSessionModel } from '@server/models/video/video-live-session' |
21 | import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist' | 21 | import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist' |
22 | import { MStreamingPlaylistVideo, MVideo, MVideoLiveSession, MVideoLiveVideo } from '@server/types/models' | 22 | import { MVideo, MVideoLiveSession, MVideoLiveVideo } from '@server/types/models' |
23 | import { pick, wait } from '@shared/core-utils' | 23 | import { pick, wait } from '@shared/core-utils' |
24 | import { LiveVideoError, VideoState, VideoStorage, VideoStreamingPlaylistType } from '@shared/models' | 24 | import { LiveVideoError, VideoState } from '@shared/models' |
25 | import { federateVideoIfNeeded } from '../activitypub/videos' | 25 | import { federateVideoIfNeeded } from '../activitypub/videos' |
26 | import { JobQueue } from '../job-queue' | 26 | import { JobQueue } from '../job-queue' |
27 | import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename, getLiveReplayBaseDirectory } from '../paths' | 27 | import { getLiveReplayBaseDirectory } from '../paths' |
28 | import { PeerTubeSocket } from '../peertube-socket' | 28 | import { PeerTubeSocket } from '../peertube-socket' |
29 | import { Hooks } from '../plugins/hooks' | 29 | import { Hooks } from '../plugins/hooks' |
30 | import { LiveQuotaStore } from './live-quota-store' | 30 | import { LiveQuotaStore } from './live-quota-store' |
@@ -255,13 +255,10 @@ class LiveManager { | |||
255 | { allResolutions, ...lTags(sessionId, video.uuid) } | 255 | { allResolutions, ...lTags(sessionId, video.uuid) } |
256 | ) | 256 | ) |
257 | 257 | ||
258 | const streamingPlaylist = await this.createLivePlaylist(video, allResolutions) | ||
259 | |||
260 | return this.runMuxingSession({ | 258 | return this.runMuxingSession({ |
261 | sessionId, | 259 | sessionId, |
262 | videoLive, | 260 | videoLive, |
263 | 261 | ||
264 | streamingPlaylist, | ||
265 | inputUrl, | 262 | inputUrl, |
266 | fps, | 263 | fps, |
267 | bitrate, | 264 | bitrate, |
@@ -275,7 +272,6 @@ class LiveManager { | |||
275 | sessionId: string | 272 | sessionId: string |
276 | videoLive: MVideoLiveVideo | 273 | videoLive: MVideoLiveVideo |
277 | 274 | ||
278 | streamingPlaylist: MStreamingPlaylistVideo | ||
279 | inputUrl: string | 275 | inputUrl: string |
280 | fps: number | 276 | fps: number |
281 | bitrate: number | 277 | bitrate: number |
@@ -298,7 +294,7 @@ class LiveManager { | |||
298 | videoLive, | 294 | videoLive, |
299 | user, | 295 | user, |
300 | 296 | ||
301 | ...pick(options, [ 'streamingPlaylist', 'inputUrl', 'bitrate', 'ratio', 'fps', 'allResolutions', 'hasAudio' ]) | 297 | ...pick(options, [ 'inputUrl', 'bitrate', 'ratio', 'fps', 'allResolutions', 'hasAudio' ]) |
302 | }) | 298 | }) |
303 | 299 | ||
304 | muxingSession.on('live-ready', () => this.publishAndFederateLive(videoLive, localLTags)) | 300 | muxingSession.on('live-ready', () => this.publishAndFederateLive(videoLive, localLTags)) |
@@ -474,26 +470,6 @@ class LiveManager { | |||
474 | return resolutionsEnabled | 470 | return resolutionsEnabled |
475 | } | 471 | } |
476 | 472 | ||
477 | private async createLivePlaylist (video: MVideo, allResolutions: number[]): Promise<MStreamingPlaylistVideo> { | ||
478 | const playlist = await VideoStreamingPlaylistModel.loadOrGenerate(video) | ||
479 | |||
480 | playlist.playlistFilename = generateHLSMasterPlaylistFilename(true) | ||
481 | playlist.segmentsSha256Filename = generateHlsSha256SegmentsFilename(true) | ||
482 | |||
483 | playlist.p2pMediaLoaderPeerVersion = P2P_MEDIA_LOADER_PEER_VERSION | ||
484 | playlist.type = VideoStreamingPlaylistType.HLS | ||
485 | |||
486 | playlist.storage = CONFIG.OBJECT_STORAGE.ENABLED | ||
487 | ? VideoStorage.OBJECT_STORAGE | ||
488 | : VideoStorage.FILE_SYSTEM | ||
489 | |||
490 | if (playlist.storage === VideoStorage.FILE_SYSTEM) { | ||
491 | playlist.assignP2PMediaLoaderInfoHashes(video, allResolutions) | ||
492 | } | ||
493 | |||
494 | return playlist.save() | ||
495 | } | ||
496 | |||
497 | private saveStartingSession (videoLive: MVideoLiveVideo) { | 473 | private saveStartingSession (videoLive: MVideoLiveVideo) { |
498 | const liveSession = new VideoLiveSessionModel({ | 474 | const liveSession = new VideoLiveSessionModel({ |
499 | startDate: new Date(), | 475 | startDate: new Date(), |