diff options
Diffstat (limited to 'server/lib/live/live-manager.ts')
-rw-r--r-- | server/lib/live/live-manager.ts | 49 |
1 files changed, 1 insertions, 48 deletions
diff --git a/server/lib/live/live-manager.ts b/server/lib/live/live-manager.ts index 1b7b9dd4d..2562edb75 100644 --- a/server/lib/live/live-manager.ts +++ b/server/lib/live/live-manager.ts | |||
@@ -2,7 +2,6 @@ | |||
2 | import { readFile } from 'fs-extra' | 2 | import { readFile } from 'fs-extra' |
3 | import { createServer, Server } from 'net' | 3 | import { createServer, Server } from 'net' |
4 | import { createServer as createServerTLS, Server as ServerTLS } from 'tls' | 4 | import { createServer as createServerTLS, Server as ServerTLS } from 'tls' |
5 | import { isTestInstance } from '@server/helpers/core-utils' | ||
6 | import { | 5 | import { |
7 | computeResolutionsToTranscode, | 6 | computeResolutionsToTranscode, |
8 | ffprobePromise, | 7 | ffprobePromise, |
@@ -12,7 +11,7 @@ import { | |||
12 | } from '@server/helpers/ffprobe-utils' | 11 | } from '@server/helpers/ffprobe-utils' |
13 | import { logger, loggerTagsFactory } from '@server/helpers/logger' | 12 | import { logger, loggerTagsFactory } from '@server/helpers/logger' |
14 | import { CONFIG, registerConfigChangedHandler } from '@server/initializers/config' | 13 | import { CONFIG, registerConfigChangedHandler } from '@server/initializers/config' |
15 | import { P2P_MEDIA_LOADER_PEER_VERSION, VIDEO_LIVE, VIEW_LIFETIME } from '@server/initializers/constants' | 14 | import { P2P_MEDIA_LOADER_PEER_VERSION, VIDEO_LIVE } from '@server/initializers/constants' |
16 | import { UserModel } from '@server/models/user/user' | 15 | import { UserModel } from '@server/models/user/user' |
17 | import { VideoModel } from '@server/models/video/video' | 16 | import { VideoModel } from '@server/models/video/video' |
18 | import { VideoLiveModel } from '@server/models/video/video-live' | 17 | import { VideoLiveModel } from '@server/models/video/video-live' |
@@ -53,8 +52,6 @@ class LiveManager { | |||
53 | 52 | ||
54 | private readonly muxingSessions = new Map<string, MuxingSession>() | 53 | private readonly muxingSessions = new Map<string, MuxingSession>() |
55 | private readonly videoSessions = new Map<number, string>() | 54 | private readonly videoSessions = new Map<number, string>() |
56 | // Values are Date().getTime() | ||
57 | private readonly watchersPerVideo = new Map<number, number[]>() | ||
58 | 55 | ||
59 | private rtmpServer: Server | 56 | private rtmpServer: Server |
60 | private rtmpsServer: ServerTLS | 57 | private rtmpsServer: ServerTLS |
@@ -99,8 +96,6 @@ class LiveManager { | |||
99 | // Cleanup broken lives, that were terminated by a server restart for example | 96 | // Cleanup broken lives, that were terminated by a server restart for example |
100 | this.handleBrokenLives() | 97 | this.handleBrokenLives() |
101 | .catch(err => logger.error('Cannot handle broken lives.', { err, ...lTags() })) | 98 | .catch(err => logger.error('Cannot handle broken lives.', { err, ...lTags() })) |
102 | |||
103 | setInterval(() => this.updateLiveViews(), VIEW_LIFETIME.LIVE) | ||
104 | } | 99 | } |
105 | 100 | ||
106 | async run () { | 101 | async run () { |
@@ -184,19 +179,6 @@ class LiveManager { | |||
184 | this.abortSession(sessionId) | 179 | this.abortSession(sessionId) |
185 | } | 180 | } |
186 | 181 | ||
187 | addViewTo (videoId: number) { | ||
188 | if (this.videoSessions.has(videoId) === false) return | ||
189 | |||
190 | let watchers = this.watchersPerVideo.get(videoId) | ||
191 | |||
192 | if (!watchers) { | ||
193 | watchers = [] | ||
194 | this.watchersPerVideo.set(videoId, watchers) | ||
195 | } | ||
196 | |||
197 | watchers.push(new Date().getTime()) | ||
198 | } | ||
199 | |||
200 | private getContext () { | 182 | private getContext () { |
201 | return context | 183 | return context |
202 | } | 184 | } |
@@ -377,7 +359,6 @@ class LiveManager { | |||
377 | } | 359 | } |
378 | 360 | ||
379 | private onMuxingFFmpegEnd (videoId: number) { | 361 | private onMuxingFFmpegEnd (videoId: number) { |
380 | this.watchersPerVideo.delete(videoId) | ||
381 | this.videoSessions.delete(videoId) | 362 | this.videoSessions.delete(videoId) |
382 | } | 363 | } |
383 | 364 | ||
@@ -411,34 +392,6 @@ class LiveManager { | |||
411 | } | 392 | } |
412 | } | 393 | } |
413 | 394 | ||
414 | private async updateLiveViews () { | ||
415 | if (!this.isRunning()) return | ||
416 | |||
417 | if (!isTestInstance()) logger.info('Updating live video views.', lTags()) | ||
418 | |||
419 | for (const videoId of this.watchersPerVideo.keys()) { | ||
420 | const notBefore = new Date().getTime() - VIEW_LIFETIME.LIVE | ||
421 | |||
422 | const watchers = this.watchersPerVideo.get(videoId) | ||
423 | |||
424 | const numWatchers = watchers.length | ||
425 | |||
426 | const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId) | ||
427 | video.views = numWatchers | ||
428 | await video.save() | ||
429 | |||
430 | await federateVideoIfNeeded(video, false) | ||
431 | |||
432 | PeerTubeSocket.Instance.sendVideoViewsUpdate(video) | ||
433 | |||
434 | // Only keep not expired watchers | ||
435 | const newWatchers = watchers.filter(w => w > notBefore) | ||
436 | this.watchersPerVideo.set(videoId, newWatchers) | ||
437 | |||
438 | logger.debug('New live video views for %s is %d.', video.url, numWatchers, lTags()) | ||
439 | } | ||
440 | } | ||
441 | |||
442 | private async handleBrokenLives () { | 395 | private async handleBrokenLives () { |
443 | const videoUUIDs = await VideoModel.listPublishedLiveUUIDs() | 396 | const videoUUIDs = await VideoModel.listPublishedLiveUUIDs() |
444 | 397 | ||