add channel transcode mode and idle behavior (#2255)

* add channel transcode mode and idle behavior

* allow custom_title on all yaml content instructions
This commit is contained in:
Jason Dove
2025-08-04 20:25:31 +00:00
committed by GitHub
parent b52159e8db
commit c055e59723
25 changed files with 12401 additions and 40 deletions
+25 -6
View File
@@ -52,12 +52,19 @@
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Active Mode</MudText>
<MudText>Transcode Mode</MudText>
</div>
<MudSelect @bind-Value="_model.ActiveMode" For="@(() => _model.ActiveMode)">
<MudSelectItem Value="@(ChannelActiveMode.Active)">Active</MudSelectItem>
<MudSelectItem Value="@(ChannelActiveMode.Hidden)">Hidden</MudSelectItem>
<MudSelectItem Value="@(ChannelActiveMode.Inactive)">Inactive</MudSelectItem>
<MudSelect @bind-Value="_model.TranscodeMode" For="@(() => _model.TranscodeMode)" Disabled="true" HelperText="Controls when the transcoding process is active">
<MudSelectItem Value="@(ChannelTranscodeMode.OnDemand)">On Demand</MudSelectItem>
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Idle Behavior</MudText>
</div>
<MudSelect @bind-Value="_model.IdleBehavior" For="@(() => _model.IdleBehavior)" HelperText="Controls how the transcoding process behaves after all clients have disconnected">
<MudSelectItem Value="@(ChannelIdleBehavior.StopOnDisconnect)">Stop On Disconnect</MudSelectItem>
<MudSelectItem Value="@(ChannelIdleBehavior.KeepRunning)">Keep Running</MudSelectItem>
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
@@ -69,13 +76,23 @@
<MudSelectItem Value="@(ChannelPlayoutMode.OnDemand)">On Demand</MudSelectItem>
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Active Mode</MudText>
</div>
<MudSelect @bind-Value="_model.ActiveMode" For="@(() => _model.ActiveMode)">
<MudSelectItem Value="@(ChannelActiveMode.Active)">Active</MudSelectItem>
<MudSelectItem Value="@(ChannelActiveMode.Hidden)">Hidden</MudSelectItem>
<MudSelectItem Value="@(ChannelActiveMode.Inactive)">Inactive</MudSelectItem>
</MudSelect>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">
<MudText>Streaming Mode</MudText>
</div>
<MudSelect @bind-Value="_model.StreamingMode" For="@(() => _model.StreamingMode)">
<MudSelectItem Value="@(StreamingMode.TransportStreamHybrid)">MPEG-TS</MudSelectItem>
<MudSelectItem Value="@(StreamingMode.TransportStream)">MPEG-TS (Legacy)</MudSelectItem>
@* <MudSelectItem Value="@(StreamingMode.TransportStream)">MPEG-TS (Legacy)</MudSelectItem> *@
<MudSelectItem Value="@(StreamingMode.HttpLiveStreamingDirect)">HLS Direct</MudSelectItem>
<MudSelectItem Value="@(StreamingMode.HttpLiveStreamingSegmenter)">HLS Segmenter</MudSelectItem>
<MudSelectItem Value="@(StreamingMode.HttpLiveStreamingSegmenterV2)">HLS Segmenter V2</MudSelectItem>
@@ -324,6 +341,8 @@
_model.MusicVideoCreditsTemplate = channelViewModel.MusicVideoCreditsTemplate;
_model.SongVideoMode = channelViewModel.SongVideoMode;
_model.ActiveMode = channelViewModel.ActiveMode;
_model.TranscodeMode = channelViewModel.TranscodeMode;
_model.IdleBehavior = channelViewModel.IdleBehavior;
},
() => NavigationManager.NavigateTo("404"));
}
@@ -206,7 +206,8 @@
"discard_attempts": { "type": "integer" },
"offline_tail": { "type": "boolean" },
"stop_before_end": { "type": "boolean" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "duration", "content" ],
"additionalProperties": false
@@ -219,7 +220,8 @@
"trim": { "type": "boolean" },
"fallback": { "type": "string" },
"discard_attempts": { "type": "integer" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "pad_to_next", "content" ],
"additionalProperties": false
@@ -235,7 +237,8 @@
"fallback": { "type": "string" },
"discard_attempts": { "type": "integer" },
"stop_before_end": { "type": "boolean" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "pad_until", "content" ],
"additionalProperties": false
+6 -3
View File
@@ -250,7 +250,8 @@
"discard_attempts": { "type": "integer" },
"offline_tail": { "type": "boolean" },
"stop_before_end": { "type": "boolean" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "duration", "content" ],
"additionalProperties": false
@@ -263,7 +264,8 @@
"trim": { "type": "boolean" },
"fallback": { "type": "string" },
"discard_attempts": { "type": "integer" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "pad_to_next", "content" ],
"additionalProperties": false
@@ -279,7 +281,8 @@
"fallback": { "type": "string" },
"discard_attempts": { "type": "integer" },
"stop_before_end": { "type": "boolean" },
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" }
"filler_kind": { "$ref": "#/$defs/enums/filler_kind" },
"custom_title": { "type": "string" }
},
"required": [ "pad_until", "content" ],
"additionalProperties": false
+8 -2
View File
@@ -37,6 +37,8 @@ public class ChannelEditViewModel
public ChannelSongVideoMode SongVideoMode { get; set; }
public ChannelActiveMode ActiveMode { get; set; }
public ChannelTranscodeMode TranscodeMode { get; set; }
public ChannelIdleBehavior IdleBehavior { get; set; }
public UpdateChannel ToUpdate() =>
new(
@@ -62,7 +64,9 @@ public class ChannelEditViewModel
MusicVideoCreditsMode,
MusicVideoCreditsTemplate,
SongVideoMode,
ActiveMode);
ActiveMode,
TranscodeMode,
IdleBehavior);
public CreateChannel ToCreate() =>
new(
@@ -87,5 +91,7 @@ public class ChannelEditViewModel
MusicVideoCreditsMode,
MusicVideoCreditsTemplate,
SongVideoMode,
ActiveMode);
ActiveMode,
TranscodeMode,
IdleBehavior);
}