1 <ng-container [formGroup]=
"form">
3 <div class=
"form-row mt-5">
4 <div class=
"form-group col-12 col-lg-4 col-xl-3">
5 <div i18n
class=
"inner-form-title">LIVE
</div>
6 <div i18n
class=
"inner-form-description">
7 Enable users of your instance to stream live.
11 <div class=
"form-group form-group-right col-12 col-lg-8 col-xl-9">
13 <ng-container formGroupName=
"live">
15 <div class=
"form-group">
16 <my-peertube-checkbox inputName=
"liveEnabled" formControlName=
"enabled">
17 <ng-template ptTemplate=
"label">
18 <ng-container i18n
>Allow live streaming
</ng-container>
21 <ng-container ngProjectAs=
"description">
22 <div i18n
>⚠️ Enabling live streaming requires trust in your users and extra moderation work
</div>
23 <div i18n
>If enabled, your server needs to accept incoming TCP traffic on port {{ getLiveRTMPPort() }}
</div>
26 <ng-container ngProjectAs=
"extra">
28 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() }">
30 inputName=
"liveAllowReplay" formControlName=
"allowReplay"
31 i18n-labelText
labelText=
"Allow your users to automatically publish a replay of their live"
33 <ng-container ngProjectAs=
"description" i18n
>
34 If the user quota is reached, PeerTube will automatically terminate the live streaming
36 </my-peertube-checkbox>
39 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() }">
40 <label i18n
for=
"liveMaxInstanceLives">Max simultaneous lives created on your instance
<span class=
"text-muted">(-
1 for "unlimited")
</span></label>
41 <div class=
"number-with-unit">
42 <input type=
"number" name=
"liveMaxInstanceLives" formControlName=
"maxInstanceLives" />
43 <span i18n
>{form.value['live']['maxInstanceLives'], plural, =
1 {live} other {lives}}
</span>
47 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() }">
48 <label i18n
for=
"liveMaxUserLives">Max simultaneous lives created per user
<span class=
"text-muted">(-
1 for "unlimited")
</span></label>
49 <div class=
"number-with-unit">
50 <input type=
"number" name=
"liveMaxUserLives" formControlName=
"maxUserLives" />
51 <span i18n
>{form.value['live']['maxUserLives'], plural, =
1 {live} other {lives}}
</span>
55 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() }">
56 <label i18n
for=
"liveMaxDuration">Max live duration
</label>
59 labelForId=
"liveMaxDuration" [items]=
"liveMaxDurationOptions" formControlName=
"maxDuration"
60 bindLabel=
"label" bindValue=
"value" [clearable]=
"false" [searchable]=
"true"
65 </my-peertube-checkbox>
71 <div class=
"form-row"> <!-- transcoding live streams grid -->
72 <div class=
"form-group col-12 col-lg-4 col-xl-3">
73 <div i18n
class=
"inner-form-title">TRANSCODING
</div>
74 <div i18n
class=
"inner-form-description">
75 Same as VOD transcoding, transcoding live streams so that they are in a streamable form that any device can play. Requires a beefy CPU, and then some.
79 <div class=
"form-group form-group-right col-12 col-lg-8 col-xl-9">
81 <ng-container formGroupName=
"live">
82 <ng-container formGroupName=
"transcoding">
84 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() }">
86 inputName=
"liveTranscodingEnabled" formControlName=
"enabled"
88 <ng-template ptTemplate=
"label">
89 <ng-container i18n
>Transcoding enabled for live streams
</ng-container>
91 </my-peertube-checkbox>
94 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
95 <label i18n
for=
"liveTranscodingThreads">Live resolutions to generate
</label>
97 <div class=
"ml-2 mt-2 d-flex flex-column">
98 <ng-container formGroupName=
"resolutions">
99 <div class=
"form-group" *
ngFor=
"let resolution of liveResolutions">
100 <my-peertube-checkbox
101 [inputName]=
"getResolutionKey(resolution.id)" [formControlName]=
"resolution.id"
102 labelText=
"{{resolution.label}}"
104 <ng-template *
ngIf=
"resolution.description" ptTemplate=
"help">
105 <div [innerHTML]=
"resolution.description"></div>
107 </my-peertube-checkbox>
113 <div class=
"form-group" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
114 <label i18n
for=
"liveTranscodingThreads">Live transcoding threads
</label>
115 <span class=
"text-muted ml-1">
116 <ng-container *
ngIf=
"getTotalTranscodingThreads().atMost" i18n
>will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding
</ng-container>
117 <ng-container *
ngIf=
"!getTotalTranscodingThreads().atMost" i18n
>will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding
</ng-container>
120 <my-select-custom-value
121 id=
"liveTranscodingThreads"
122 [items]=
"transcodingThreadOptions"
123 formControlName=
"threads"
125 ></my-select-custom-value>
126 <div *
ngIf=
"formErrors.live.transcoding.threads" class=
"form-error">{{ formErrors.live.transcoding.threads }}
</div>
129 <div class=
"form-group mt-4" [ngClass]=
"{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
130 <label i18n
for=
"liveTranscodingProfile">Live transcoding profile
</label>
131 <span class=
"text-muted ml-1" i18n
>new live transcoding profiles can be added by PeerTube plugins
</span>
134 id=
"liveTranscodingProfile"
135 formControlName=
"profile"
136 [items]=
"getAvailableTranscodingProfile()"
139 <ng-template ng-option-tmp
let-item=
"item" let-index=
"index">
141 <ng-container *
ngIf=
"item === 'default'">
143 <span class=
"text-muted" i18n
>x264, targeting maximum device compatibility
</span>
147 <div *
ngIf=
"formErrors.live.transcoding.profile" class=
"form-error">{{ formErrors.live.transcoding.profile }}
</div>