diff options
Diffstat (limited to 'server/models/video')
-rw-r--r-- | server/models/video/video-live.ts | 30 | ||||
-rw-r--r-- | server/models/video/video-streaming-playlist.ts | 11 | ||||
-rw-r--r-- | server/models/video/video.ts | 8 |
3 files changed, 45 insertions, 4 deletions
diff --git a/server/models/video/video-live.ts b/server/models/video/video-live.ts index 6929b9688..8608bc84c 100644 --- a/server/models/video/video-live.ts +++ b/server/models/video/video-live.ts | |||
@@ -1,14 +1,21 @@ | |||
1 | import { AllowNull, BelongsTo, Column, CreatedAt, DataType, DefaultScope, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript' | 1 | import { AllowNull, BelongsTo, Column, CreatedAt, DataType, DefaultScope, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript' |
2 | import { WEBSERVER } from '@server/initializers/constants' | 2 | import { WEBSERVER } from '@server/initializers/constants' |
3 | import { MVideoLive, MVideoLiveVideo } from '@server/types/models' | 3 | import { MVideoLive, MVideoLiveVideo } from '@server/types/models' |
4 | import { VideoLive } from '@shared/models/videos/video-live.model' | 4 | import { LiveVideo, VideoState } from '@shared/models' |
5 | import { VideoModel } from './video' | 5 | import { VideoModel } from './video' |
6 | import { VideoBlacklistModel } from './video-blacklist' | ||
6 | 7 | ||
7 | @DefaultScope(() => ({ | 8 | @DefaultScope(() => ({ |
8 | include: [ | 9 | include: [ |
9 | { | 10 | { |
10 | model: VideoModel, | 11 | model: VideoModel, |
11 | required: true | 12 | required: true, |
13 | include: [ | ||
14 | { | ||
15 | model: VideoBlacklistModel, | ||
16 | required: false | ||
17 | } | ||
18 | ] | ||
12 | } | 19 | } |
13 | ] | 20 | ] |
14 | })) | 21 | })) |
@@ -49,7 +56,22 @@ export class VideoLiveModel extends Model<VideoLiveModel> { | |||
49 | const query = { | 56 | const query = { |
50 | where: { | 57 | where: { |
51 | streamKey | 58 | streamKey |
52 | } | 59 | }, |
60 | include: [ | ||
61 | { | ||
62 | model: VideoModel.unscoped(), | ||
63 | required: true, | ||
64 | where: { | ||
65 | state: VideoState.WAITING_FOR_LIVE | ||
66 | }, | ||
67 | include: [ | ||
68 | { | ||
69 | model: VideoBlacklistModel.unscoped(), | ||
70 | required: false | ||
71 | } | ||
72 | ] | ||
73 | } | ||
74 | ] | ||
53 | } | 75 | } |
54 | 76 | ||
55 | return VideoLiveModel.findOne<MVideoLiveVideo>(query) | 77 | return VideoLiveModel.findOne<MVideoLiveVideo>(query) |
@@ -65,7 +87,7 @@ export class VideoLiveModel extends Model<VideoLiveModel> { | |||
65 | return VideoLiveModel.findOne<MVideoLive>(query) | 87 | return VideoLiveModel.findOne<MVideoLive>(query) |
66 | } | 88 | } |
67 | 89 | ||
68 | toFormattedJSON (): VideoLive { | 90 | toFormattedJSON (): LiveVideo { |
69 | return { | 91 | return { |
70 | rtmpUrl: WEBSERVER.RTMP_URL, | 92 | rtmpUrl: WEBSERVER.RTMP_URL, |
71 | streamKey: this.streamKey | 93 | streamKey: this.streamKey |
diff --git a/server/models/video/video-streaming-playlist.ts b/server/models/video/video-streaming-playlist.ts index b8dc7c450..73bd89844 100644 --- a/server/models/video/video-streaming-playlist.ts +++ b/server/models/video/video-streaming-playlist.ts | |||
@@ -153,6 +153,17 @@ export class VideoStreamingPlaylistModel extends Model<VideoStreamingPlaylistMod | |||
153 | return VideoStreamingPlaylistModel.findByPk(id, options) | 153 | return VideoStreamingPlaylistModel.findByPk(id, options) |
154 | } | 154 | } |
155 | 155 | ||
156 | static loadHLSPlaylistByVideo (videoId: number) { | ||
157 | const options = { | ||
158 | where: { | ||
159 | type: VideoStreamingPlaylistType.HLS, | ||
160 | videoId | ||
161 | } | ||
162 | } | ||
163 | |||
164 | return VideoStreamingPlaylistModel.findOne(options) | ||
165 | } | ||
166 | |||
156 | static getHlsPlaylistFilename (resolution: number) { | 167 | static getHlsPlaylistFilename (resolution: number) { |
157 | return resolution + '.m3u8' | 168 | return resolution + '.m3u8' |
158 | } | 169 | } |
diff --git a/server/models/video/video.ts b/server/models/video/video.ts index a3e3b6cfe..8493ab802 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts | |||
@@ -127,6 +127,7 @@ import { VideoShareModel } from './video-share' | |||
127 | import { VideoStreamingPlaylistModel } from './video-streaming-playlist' | 127 | import { VideoStreamingPlaylistModel } from './video-streaming-playlist' |
128 | import { VideoTagModel } from './video-tag' | 128 | import { VideoTagModel } from './video-tag' |
129 | import { VideoViewModel } from './video-view' | 129 | import { VideoViewModel } from './video-view' |
130 | import { LiveManager } from '@server/lib/live-manager' | ||
130 | 131 | ||
131 | export enum ScopeNames { | 132 | export enum ScopeNames { |
132 | AVAILABLE_FOR_LIST_IDS = 'AVAILABLE_FOR_LIST_IDS', | 133 | AVAILABLE_FOR_LIST_IDS = 'AVAILABLE_FOR_LIST_IDS', |
@@ -800,6 +801,13 @@ export class VideoModel extends Model<VideoModel> { | |||
800 | } | 801 | } |
801 | 802 | ||
802 | @BeforeDestroy | 803 | @BeforeDestroy |
804 | static stopLiveIfNeeded (instance: VideoModel) { | ||
805 | if (!instance.isLive) return | ||
806 | |||
807 | return LiveManager.Instance.stopSessionOf(instance.id) | ||
808 | } | ||
809 | |||
810 | @BeforeDestroy | ||
803 | static invalidateCache (instance: VideoModel) { | 811 | static invalidateCache (instance: VideoModel) { |
804 | ModelCache.Instance.invalidateCache('video', instance.id) | 812 | ModelCache.Instance.invalidateCache('video', instance.id) |
805 | } | 813 | } |