1 <ng-container [formGroup]=
"form">
4 <div class=
"col-12 col-lg-4 col-xl-3">
5 <h2 i18n
class=
"inner-form-title">LIVE
</h2>
6 <div i18n
class=
"inner-form-description">
7 Enable users of your instance to stream live.
11 <div class=
"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]=
"getDisabledLiveClass()">
30 inputName=
"liveAllowReplay" formControlName=
"allowReplay"
31 i18n-labelText
labelText=
"Allow your users to automatically publish a replay of their live"
33 </my-peertube-checkbox>
36 <div class=
"form-group" formGroupName=
"latencySetting" [ngClass]=
"getDisabledLiveClass()">
38 inputName=
"liveLatencySettingEnabled" formControlName=
"enabled"
39 i18n-labelText
labelText=
"Allow your users to change live latency"
41 <ng-container ngProjectAs=
"description" i18n
>
42 Small latency disables P2P and high latency can increase P2P ratio
44 </my-peertube-checkbox>
47 <div class=
"form-group" [ngClass]=
"getDisabledLiveClass()">
48 <label i18n
for=
"liveMaxInstanceLives">Max simultaneous lives created on your instance
</label>
50 <span class=
"ms-2 small muted">(-
1 for "unlimited")
</span>
52 <div class=
"number-with-unit">
53 <input type=
"number" name=
"liveMaxInstanceLives" formControlName=
"maxInstanceLives" />
54 <span i18n
>{form.value['live']['maxInstanceLives'], plural, =
1 {live} other {lives}}
</span>
57 <div *
ngIf=
"formErrors.live.maxInstanceLives" class=
"form-error">{{ formErrors.live.maxInstanceLives }}
</div>
60 <div class=
"form-group" [ngClass]=
"getDisabledLiveClass()">
61 <label i18n
for=
"liveMaxUserLives">Max simultaneous lives created per user
</label>
62 <span class=
"ms-2 small muted">(-
1 for "unlimited")
</span>
64 <div class=
"number-with-unit">
65 <input type=
"number" name=
"liveMaxUserLives" formControlName=
"maxUserLives" />
66 <span i18n
>{form.value['live']['maxUserLives'], plural, =
1 {live} other {lives}}
</span>
69 <div *
ngIf=
"formErrors.live.maxUserLives" class=
"form-error">{{ formErrors.live.maxUserLives }}
</div>
72 <div class=
"form-group" [ngClass]=
"getDisabledLiveClass()">
73 <label i18n
for=
"liveMaxDuration">Max live duration
</label>
76 labelForId=
"liveMaxDuration" [items]=
"liveMaxDurationOptions" formControlName=
"maxDuration"
77 bindLabel=
"label" bindValue=
"value" [clearable]=
"false" [searchable]=
"true"
80 <div *
ngIf=
"formErrors.live.maxDuration" class=
"form-error">{{ formErrors.live.maxDuration }}
</div>
84 </my-peertube-checkbox>
90 <div class=
"row"> <!-- transcoding live streams grid -->
91 <div class=
"col-12 col-lg-4 col-xl-3">
92 <h2 i18n
class=
"inner-form-title">TRANSCODING
</h2>
93 <div i18n
class=
"inner-form-description">
94 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.
98 <div class=
"col-12 col-lg-8 col-xl-9">
100 <ng-container formGroupName=
"live">
101 <ng-container formGroupName=
"transcoding">
103 <div class=
"form-group" [ngClass]=
"getDisabledLiveClass()">
104 <my-peertube-checkbox
105 inputName=
"liveTranscodingEnabled" formControlName=
"enabled"
107 <ng-template ptTemplate=
"label">
108 <ng-container i18n
>Transcoding enabled for live streams
</ng-container>
110 </my-peertube-checkbox>
113 <div class=
"callout callout-light pt-2 mt-2 pb-0">
114 <h3 class=
"callout-title" i18n
>Output formats
</h3>
116 <div class=
"form-group" [ngClass]=
"getDisabledLiveTranscodingClass()">
117 <label i18n
for=
"liveTranscodingThreads">Live resolutions to generate
</label>
119 <div class=
"ms-2 mt-2 d-flex flex-column">
121 <ng-container formGroupName=
"resolutions">
122 <div class=
"form-group" *
ngFor=
"let resolution of liveResolutions">
123 <my-peertube-checkbox
124 [inputName]=
"getResolutionKey(resolution.id)" [formControlName]=
"resolution.id"
125 labelText=
"{{resolution.label}}"
127 <ng-template *
ngIf=
"resolution.description" ptTemplate=
"help">
128 <div [innerHTML]=
"resolution.description"></div>
130 </my-peertube-checkbox>
134 <div class=
"form-group">
135 <my-peertube-checkbox
136 inputName=
"transcodingAlwaysTranscodeOriginalResolution" formControlName=
"alwaysTranscodeOriginalResolution"
137 i18n-labelText
labelText=
"Also transcode original resolution"
139 <ng-container i18n
ngProjectAs=
"description">
140 Even if it's above your maximum enabled resolution
142 </my-peertube-checkbox>
148 <div class=
"form-group mt-4" formGroupName=
"remoteRunners" [ngClass]=
"getDisabledLiveTranscodingClass()">
149 <my-peertube-checkbox
150 inputName=
"transcodingRemoteRunnersEnabled" formControlName=
"enabled"
151 i18n-labelText
labelText=
"Enable remote runners for lives"
153 <ng-container ngProjectAs=
"description">
155 Use
<a routerLink=
"/admin/system/runners/runners-list">remote runners
</a> to process live transcoding.
156 Remote runners has to register on your instance first.
159 </my-peertube-checkbox>
162 <div class=
"form-group" [ngClass]=
"getDisabledLiveLocalTranscodingClass()">
163 <label i18n
for=
"liveTranscodingThreads">Live transcoding threads
</label>
165 <span class=
"small muted ms-1">
166 <ng-container *
ngIf=
"getTotalTranscodingThreads().atMost" i18n
>
167 will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding
170 <ng-container *
ngIf=
"!getTotalTranscodingThreads().atMost" i18n
>
171 will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding
175 <my-select-custom-value
176 id=
"liveTranscodingThreads"
177 [items]=
"transcodingThreadOptions"
178 formControlName=
"threads"
180 ></my-select-custom-value>
181 <div *
ngIf=
"formErrors.live.transcoding.threads" class=
"form-error">{{ formErrors.live.transcoding.threads }}
</div>
184 <div class=
"form-group mt-4" [ngClass]=
"getDisabledLiveLocalTranscodingClass()">
185 <label i18n
for=
"liveTranscodingProfile">Live transcoding profile
</label>
186 <span class=
"small muted ms-1" i18n
>new live transcoding profiles can be added by PeerTube plugins
</span>
189 id=
"liveTranscodingProfile"
190 formControlName=
"profile"
191 [items]=
"transcodingProfiles"
196 <div *
ngIf=
"formErrors.live.transcoding.profile" class=
"form-error">{{ formErrors.live.transcoding.profile }}
</div>