From c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 17 Sep 2020 09:20:52 +0200 Subject: Live streaming implementation first step --- client/src/app/shared/shared-main/video/index.ts | 1 + .../shared-main/video/video-details.model.ts | 7 ++++-- .../shared/shared-main/video/video-live.service.ts | 28 ++++++++++++++++++++++ .../app/shared/shared-main/video/video.model.ts | 12 ++++++++-- .../app/shared/shared-main/video/video.service.ts | 3 ++- 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 client/src/app/shared/shared-main/video/video-live.service.ts (limited to 'client/src/app/shared/shared-main/video') diff --git a/client/src/app/shared/shared-main/video/index.ts b/client/src/app/shared/shared-main/video/index.ts index 3053df4ef..121635a30 100644 --- a/client/src/app/shared/shared-main/video/index.ts +++ b/client/src/app/shared/shared-main/video/index.ts @@ -2,6 +2,7 @@ export * from './redundancy.service' export * from './video-details.model' export * from './video-edit.model' export * from './video-import.service' +export * from './video-live.service' export * from './video-ownership.service' export * from './video.model' export * from './video.service' diff --git a/client/src/app/shared/shared-main/video/video-details.model.ts b/client/src/app/shared/shared-main/video/video-details.model.ts index a1cb051e9..f060d1dc9 100644 --- a/client/src/app/shared/shared-main/video/video-details.model.ts +++ b/client/src/app/shared/shared-main/video/video-details.model.ts @@ -62,8 +62,11 @@ export class VideoDetails extends Video implements VideoDetailsServerModel { } getFiles () { - if (this.files.length === 0) return this.getHlsPlaylist().files + if (this.files.length !== 0) return this.files - return this.files + const hls = this.getHlsPlaylist() + if (hls) return hls.files + + return [] } } diff --git a/client/src/app/shared/shared-main/video/video-live.service.ts b/client/src/app/shared/shared-main/video/video-live.service.ts new file mode 100644 index 000000000..12daff756 --- /dev/null +++ b/client/src/app/shared/shared-main/video/video-live.service.ts @@ -0,0 +1,28 @@ +import { catchError } from 'rxjs/operators' +import { HttpClient } from '@angular/common/http' +import { Injectable } from '@angular/core' +import { RestExtractor } from '@app/core' +import { VideoCreate, VideoLive } from '@shared/models' +import { environment } from '../../../../environments/environment' + +@Injectable() +export class VideoLiveService { + static BASE_VIDEO_LIVE_URL = environment.apiUrl + '/api/v1/videos/live/' + + constructor ( + private authHttp: HttpClient, + private restExtractor: RestExtractor + ) {} + + goLive (video: VideoCreate) { + return this.authHttp + .post<{ video: { id: number, uuid: string } }>(VideoLiveService.BASE_VIDEO_LIVE_URL, video) + .pipe(catchError(err => this.restExtractor.handleError(err))) + } + + getVideoLive (videoId: number | string) { + return this.authHttp + .get(VideoLiveService.BASE_VIDEO_LIVE_URL + videoId) + .pipe(catchError(err => this.restExtractor.handleError(err))) + } +} diff --git a/client/src/app/shared/shared-main/video/video.model.ts b/client/src/app/shared/shared-main/video/video.model.ts index 0dca3da0d..e3a52af3d 100644 --- a/client/src/app/shared/shared-main/video/video.model.ts +++ b/client/src/app/shared/shared-main/video/video.model.ts @@ -40,6 +40,8 @@ export class Video implements VideoServerModel { thumbnailPath: string thumbnailUrl: string + isLive: boolean + previewPath: string previewUrl: string @@ -103,6 +105,8 @@ export class Video implements VideoServerModel { this.state = hash.state this.description = hash.description + this.isLive = hash.isLive + this.duration = hash.duration this.durationLabel = durationToString(hash.duration) @@ -113,10 +117,14 @@ export class Video implements VideoServerModel { this.name = hash.name this.thumbnailPath = hash.thumbnailPath - this.thumbnailUrl = hash.thumbnailUrl || (absoluteAPIUrl + hash.thumbnailPath) + this.thumbnailUrl = this.thumbnailPath + ? hash.thumbnailUrl || (absoluteAPIUrl + hash.thumbnailPath) + : null this.previewPath = hash.previewPath - this.previewUrl = hash.previewUrl || (absoluteAPIUrl + hash.previewPath) + this.previewUrl = this.previewPath + ? hash.previewUrl || (absoluteAPIUrl + hash.previewPath) + : null this.embedPath = hash.embedPath this.embedUrl = hash.embedUrl || (getAbsoluteEmbedUrl() + hash.embedPath) diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts index 8a688c8ed..0e2d36081 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -18,7 +18,8 @@ import { VideoFilter, VideoPrivacy, VideoSortField, - VideoUpdate + VideoUpdate, + VideoCreate } from '@shared/models' import { environment } from '../../../../environments/environment' import { Account } from '../account/account.model' -- cgit v1.2.3