Support transcoding profile in client admin

pull/3662/head
Chocobozzz 2021-01-28 16:10:09 +01:00
parent 1896bca09e
commit 80ac2e5548
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 51 additions and 2 deletions

View File

@ -883,6 +883,20 @@
<div *ngIf="formErrors.transcoding.threads" class="form-error">{{ formErrors.transcoding.threads }}</div> <div *ngIf="formErrors.transcoding.threads" class="form-error">{{ formErrors.transcoding.threads }}</div>
</div> </div>
<div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }">
<label i18n for="transcodingProfile">Transcoding profile</label>
<span class="text-muted ml-1" i18n>New transcoding profiles can be added by PeerTube plugins</span>
<div class="peertube-select-container">
<select id="transcodingProfile" formControlName="profile" class="form-control">
<option *ngFor="let vodTranscodingProfileOption of getAvailableTranscodingProfile('vod')" [value]="vodTranscodingProfileOption">
{{ vodTranscodingProfileOption }}
</option>
</select>
</div>
<div *ngIf="formErrors.transcoding.profile" class="form-error">{{ formErrors.transcoding.profile }}</div>
</div>
</ng-container> </ng-container>
</div> </div>
@ -1023,6 +1037,20 @@
<div *ngIf="formErrors.live.transcoding.threads" class="form-error">{{ formErrors.live.transcoding.threads }}</div> <div *ngIf="formErrors.live.transcoding.threads" class="form-error">{{ formErrors.live.transcoding.threads }}</div>
</div> </div>
<div class="form-group mt-4" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
<label i18n for="liveTranscodingProfile">Live transcoding profile</label>
<span class="text-muted ml-1" i18n>New live transcoding profiles can be added by PeerTube plugins</span>
<div class="peertube-select-container">
<select id="liveTranscodingProfile" formControlName="profile" class="form-control">
<option *ngFor="let liveTranscodingProfileOption of getAvailableTranscodingProfile('live')" [value]="liveTranscodingProfileOption">
{{ liveTranscodingProfileOption }}
</option>
</select>
</div>
<div *ngIf="formErrors.live.transcoding.profile" class="form-error">{{ formErrors.live.transcoding.profile }}</div>
</div>
</ng-container> </ng-container>
</ng-container> </ng-container>

View File

@ -1,4 +1,5 @@
import { forkJoin } from 'rxjs' import { forkJoin } from 'rxjs'
import { pairwise } from 'rxjs/operators'
import { ViewportScroller } from '@angular/common' import { ViewportScroller } from '@angular/common'
import { AfterViewChecked, Component, OnInit, ViewChild } from '@angular/core' import { AfterViewChecked, Component, OnInit, ViewChild } from '@angular/core'
import { ConfigService } from '@app/+admin/config/shared/config.service' import { ConfigService } from '@app/+admin/config/shared/config.service'
@ -20,7 +21,6 @@ import { USER_VIDEO_QUOTA_DAILY_VALIDATOR, USER_VIDEO_QUOTA_VALIDATOR } from '@a
import { FormReactive, FormValidatorService, SelectOptionsItem } from '@app/shared/shared-forms' import { FormReactive, FormValidatorService, SelectOptionsItem } from '@app/shared/shared-forms'
import { NgbNav } from '@ng-bootstrap/ng-bootstrap' import { NgbNav } from '@ng-bootstrap/ng-bootstrap'
import { CustomConfig, ServerConfig } from '@shared/models' import { CustomConfig, ServerConfig } from '@shared/models'
import { pairwise } from 'rxjs/operators'
@Component({ @Component({
selector: 'my-edit-custom-config', selector: 'my-edit-custom-config',
@ -39,6 +39,9 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
transcodingThreadOptions: { label: string, value: number }[] = [] transcodingThreadOptions: { label: string, value: number }[] = []
liveMaxDurationOptions: { label: string, value: number }[] = [] liveMaxDurationOptions: { label: string, value: number }[] = []
vodTranscodingProfileOptions: string[] = []
liveTranscodingProfileOptions: string[] = []
languageItems: SelectOptionsItem[] = [] languageItems: SelectOptionsItem[] = []
categoryItems: SelectOptionsItem[] = [] categoryItems: SelectOptionsItem[] = []
@ -101,6 +104,9 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
{ value: 8, label: '8' } { value: 8, label: '8' }
] ]
this.vodTranscodingProfileOptions = [ 'default' ]
this.liveTranscodingProfileOptions = [ 'default' ]
this.liveMaxDurationOptions = [ this.liveMaxDurationOptions = [
{ value: -1, label: $localize`No limit` }, { value: -1, label: $localize`No limit` },
{ value: 1000 * 3600, label: $localize`1 hour` }, { value: 1000 * 3600, label: $localize`1 hour` },
@ -127,6 +133,14 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
return this.serverConfig.live.rtmp.port return this.serverConfig.live.rtmp.port
} }
getAvailableTranscodingProfile (type: 'live' | 'vod') {
if (type === 'live') {
return this.serverConfig.live.transcoding.availableProfiles
}
return this.serverConfig.transcoding.availableProfiles
}
getTotalTranscodingThreads () { getTotalTranscodingThreads () {
const transcodingEnabled = this.form.value['transcoding']['enabled'] const transcodingEnabled = this.form.value['transcoding']['enabled']
const transcodingThreads = this.form.value['transcoding']['threads'] const transcodingThreads = this.form.value['transcoding']['threads']
@ -247,6 +261,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
threads: TRANSCODING_THREADS_VALIDATOR, threads: TRANSCODING_THREADS_VALIDATOR,
allowAdditionalExtensions: null, allowAdditionalExtensions: null,
allowAudioFiles: null, allowAudioFiles: null,
profile: null,
resolutions: {}, resolutions: {},
hls: { hls: {
enabled: null enabled: null
@ -266,6 +281,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
transcoding: { transcoding: {
enabled: null, enabled: null,
threads: TRANSCODING_THREADS_VALIDATOR, threads: TRANSCODING_THREADS_VALIDATOR,
profile: null,
resolutions: {} resolutions: {}
} }
}, },

View File

@ -66,6 +66,8 @@ export class ServerService {
requiresEmailVerification: false requiresEmailVerification: false
}, },
transcoding: { transcoding: {
profile: 'default',
availableProfiles: [ 'default' ],
enabledResolutions: [], enabledResolutions: [],
hls: { hls: {
enabled: false enabled: false
@ -82,6 +84,8 @@ export class ServerService {
maxUserLives: -1, maxUserLives: -1,
transcoding: { transcoding: {
enabled: false, enabled: false,
profile: 'default',
availableProfiles: [ 'default' ],
enabledResolutions: [] enabledResolutions: []
}, },
rtmp: { rtmp: {

View File

@ -22,6 +22,7 @@ function checkMissedConfig () {
'signup.filters.cidr.whitelist', 'signup.filters.cidr.blacklist', 'signup.filters.cidr.whitelist', 'signup.filters.cidr.blacklist',
'redundancy.videos.strategies', 'redundancy.videos.check_interval', 'redundancy.videos.strategies', 'redundancy.videos.check_interval',
'transcoding.enabled', 'transcoding.threads', 'transcoding.allow_additional_extensions', 'transcoding.hls.enabled', 'transcoding.enabled', 'transcoding.threads', 'transcoding.allow_additional_extensions', 'transcoding.hls.enabled',
'transcoding.profile',
'transcoding.resolutions.0p', 'transcoding.resolutions.240p', 'transcoding.resolutions.360p', 'transcoding.resolutions.480p', 'transcoding.resolutions.0p', 'transcoding.resolutions.240p', 'transcoding.resolutions.360p', 'transcoding.resolutions.480p',
'transcoding.resolutions.720p', 'transcoding.resolutions.1080p', 'transcoding.resolutions.1440p', 'transcoding.resolutions.2160p', 'transcoding.resolutions.720p', 'transcoding.resolutions.1080p', 'transcoding.resolutions.1440p', 'transcoding.resolutions.2160p',
'import.videos.http.enabled', 'import.videos.torrent.enabled', 'auto_blacklist.videos.of_users.enabled', 'import.videos.http.enabled', 'import.videos.torrent.enabled', 'auto_blacklist.videos.of_users.enabled',
@ -39,7 +40,7 @@ function checkMissedConfig () {
'search.remote_uri.users', 'search.remote_uri.anonymous', 'search.search_index.enabled', 'search.search_index.url', 'search.remote_uri.users', 'search.remote_uri.anonymous', 'search.search_index.enabled', 'search.search_index.url',
'search.search_index.disable_local_search', 'search.search_index.is_default_search', 'search.search_index.disable_local_search', 'search.search_index.is_default_search',
'live.enabled', 'live.allow_replay', 'live.max_duration', 'live.max_user_lives', 'live.max_instance_lives', 'live.enabled', 'live.allow_replay', 'live.max_duration', 'live.max_user_lives', 'live.max_instance_lives',
'live.transcoding.enabled', 'live.transcoding.threads', 'live.transcoding.enabled', 'live.transcoding.threads', 'live.transcoding.profile',
'live.transcoding.resolutions.240p', 'live.transcoding.resolutions.360p', 'live.transcoding.resolutions.480p', 'live.transcoding.resolutions.240p', 'live.transcoding.resolutions.360p', 'live.transcoding.resolutions.480p',
'live.transcoding.resolutions.720p', 'live.transcoding.resolutions.1080p', 'live.transcoding.resolutions.1440p', 'live.transcoding.resolutions.720p', 'live.transcoding.resolutions.1080p', 'live.transcoding.resolutions.1440p',
'live.transcoding.resolutions.2160p' 'live.transcoding.resolutions.2160p'