Skip to content

Commit 203b0e7

Browse files
SpaceKaeruSpaceKaeru
authored andcommitted
rtmp-services,frontend: Add data-driven VOD track support
1 parent 407944a commit 203b0e7

6 files changed

Lines changed: 33 additions & 6 deletions

File tree

frontend/settings/OBSBasicSettings_Stream.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -953,11 +953,25 @@ void OBSBasicSettings::on_server_currentIndexChanged(int /*index*/)
953953
void OBSBasicSettings::UpdateVodTrackSetting()
954954
{
955955
bool enableForCustomServer = config_get_bool(App()->GetUserConfig(), "General", "EnableCustomServerVodTrack");
956-
bool enableVodTrack = ui->service->currentText() == "Twitch";
956+
bool enableVodTrack = false;
957957
bool wasEnabled = !!vodTrackCheckbox;
958958

959-
if (enableForCustomServer && IsCustomService())
959+
if (enableForCustomServer && IsCustomService()) {
960960
enableVodTrack = true;
961+
} else if (!IsCustomService()) {
962+
QString serviceName = ui->service->currentText();
963+
OBSDataAutoRelease settings = obs_data_create();
964+
obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
965+
OBSServiceAutoRelease temp_service =
966+
obs_service_create_private("rtmp_common", "vod track query service", settings);
967+
OBSDataAutoRelease serviceSettings = obs_service_get_settings(temp_service);
968+
969+
if (obs_data_has_user_value(serviceSettings, "supports_vod_track")) {
970+
enableVodTrack = obs_data_get_bool(serviceSettings, "supports_vod_track");
971+
} else {
972+
enableVodTrack = (serviceName == "Twitch");
973+
}
974+
}
961975

962976
if (enableVodTrack == wasEnabled)
963977
return;

frontend/utility/AdvancedOutput.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,8 @@ inline std::optional<size_t> AdvancedOutput::VodTrackMixerIdx(obs_service_t *ser
575575
vodTrackEnabled = enableForCustomServer ? vodTrackEnabled : false;
576576
} else {
577577
OBSDataAutoRelease settings = obs_service_get_settings(service);
578-
const char *service = obs_data_get_string(settings, "service");
579-
if (!ServiceSupportsVodTrack(service))
578+
const char *serviceName = obs_data_get_string(settings, "service");
579+
if (!ServiceSupportsVodTrack(serviceName, settings))
580580
vodTrackEnabled = false;
581581
}
582582

frontend/utility/BasicOutputHandler.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,11 @@ inline bool can_use_output(const char *prot, const char *output, const char *pro
134134

135135
const char *GetStreamOutputType(const obs_service_t *service);
136136

137-
inline bool ServiceSupportsVodTrack(const char *service)
137+
inline bool ServiceSupportsVodTrack(const char *service, obs_data_t *settings)
138138
{
139+
if (settings && obs_data_has_user_value(settings, "supports_vod_track"))
140+
return obs_data_get_bool(settings, "supports_vod_track");
141+
139142
static const char *vodTrackServices[] = {"Twitch"};
140143

141144
for (const char *vodTrackService : vodTrackServices) {

frontend/utility/SimpleOutput.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ bool SimpleOutput::IsVodTrackEnabled(obs_service_t *service)
669669
if (strcmp(id, "rtmp_custom") == 0)
670670
return enableForCustomServer ? enable : false;
671671
else
672-
return advanced && enable && ServiceSupportsVodTrack(name);
672+
return advanced && enable && ServiceSupportsVodTrack(name, settings);
673673
}
674674

675675
void SimpleOutput::SetupVodTrack(obs_service_t *service)

plugins/rtmp-services/data/schema/service-schema-v5.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,11 @@
218218
"default": [
219219
""
220220
]
221+
},
222+
"supports_vod_track": {
223+
"type": "boolean",
224+
"description": "Whether or not the service supports a separate VOD audio track.",
225+
"default": false
221226
}
222227
},
223228
"additionalProperties": false,

plugins/rtmp-services/rtmp-common.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,11 @@ static void copy_info_to_settings(json_t *service, obs_data_t *settings)
602602
dstr_free(&str);
603603

604604
update_protocol(service, settings);
605+
606+
json_t *vod_track_val = json_object_get(service, "supports_vod_track");
607+
if (vod_track_val && json_is_boolean(vod_track_val)) {
608+
obs_data_set_bool(settings, "supports_vod_track", json_is_true(vod_track_val));
609+
}
605610
}
606611

607612
static inline json_t *find_service(json_t *root, const char *name, const char **p_new_name)

0 commit comments

Comments
 (0)