Skip to content

Commit

Permalink
Merge pull request obsproject#165 from amazon-contributing/ruwen/non-…
Browse files Browse the repository at this point in the history
…twitch-branding

Only apply Twitch branding for Twitch
  • Loading branch information
palana authored Jan 19, 2024
2 parents 32b4f64 + ed02635 commit 9df264a
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 24 deletions.
13 changes: 7 additions & 6 deletions UI/data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefer hardware encoding"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware Encoding eliminates most CPU usage, but may require more bitrate to obtain the same level of quality."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Stream warning"
Basic.AutoConfig.StreamPage.StreamWarning.Text="The bandwidth test is about to stream randomized video data without audio to your channel. If you're able, it's recommended to temporarily turn off saving videos of streams and set the stream to private until after the test has completed. Continue?"
Basic.AutoConfig.StreamPage.UseMultitrackVideo="Test Enhanced Broadcasting"
Basic.AutoConfig.StreamPage.UseMultitrackVideo="Test %1"
Basic.AutoConfig.TestPage="Final Results"
Basic.AutoConfig.TestPage.SubTitle.Testing="The program is now executing a set of tests to estimate the ideal settings"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testing complete"
Expand Down Expand Up @@ -953,15 +953,15 @@ Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitrate: %1 kbp
Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitrate: %1 kbps"
Basic.Settings.Stream.Recommended.MaxResolution="Maximum Resolution: %1"
Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1"
Basic.Settings.Stream.EnableMultitrackVideo="Enable Enhanced Broadcasting"
Basic.Settings.Stream.EnableMultitrackVideo="Enable %1"
Basic.Settings.Stream.MultitrackVideoMaximumAggregateBitrate="Maximum Streaming Bandwidth"
Basic.Settings.Stream.MultitrackVideoMaximumAggregateBitrateAuto="Auto"
Basic.Settings.Stream.MultitrackVideoReservedEncoderSessions="Reserved Encoder Sessions"
Basic.Settings.Stream.MultitrackVideoReservedEncoderSessionsAuto="Auto"
Basic.Settings.Stream.MultitrackVideoStreamDumpEnable="Enable stream dump to FLV (uses simple recording file settings)"
Basic.Settings.Stream.MultitrackVideoConfigOverride="Config Override (JSON)"
Basic.Settings.Stream.MultitrackVideoConfigOverrideEnable="Enable Config Override"
Basic.Settings.Stream.MultitrackVideoLabel="Enhanced Broadcasting"
Basic.Settings.Stream.MultitrackVideoLabel="Multitrack Video"
Basic.Settings.Stream.SpecifyCustomServer="Specify Custom Server..."
Basic.Settings.Stream.ServiceCustomServer="Custom Server"
Basic.Settings.Stream.ServiceCustomStreamKey="Custom Stream Key"
Expand Down Expand Up @@ -1570,9 +1570,10 @@ FailedToStartStream.FailedToGetOBSVideoInfo="Failed to get obs video info while
FailedToStartStream.FailedToCreateAudioEncoder="Failed to create audio encoder"
FailedToStartStream.OBSOutputStartFailed="Failed to start stream (obs_output_start returned false)"
FailedToStartStream.NoRTMPURLInConfig="Config does not contain stream target RTMP(S) URL"
FailedToStartStream.FallbackToDefault="Starting the stream using Enhanced Broadcasting failed; do you want to retry using single encode settings?"
FailedToStartStream.FallbackToDefault="Starting the stream using %1 failed; do you want to retry using single encode settings?"
FailedToStartStream.ConfigRequestFailed="Could not fetch config from %1<br><br>HTTP error: %2"
FailedToStartStream.WarningRetryNonMultitrackVideo="\n<br><br>\nDo you want to continue streaming without Enhanced Broadcasting?"
FailedToStartStream.WarningRetryNonMultitrackVideo="\n<br><br>\nDo you want to continue streaming without %1?"
FailedToStartStream.WarningRetry="\n<br><br>\nDo you want to continue streaming?"
FailedToStartStream.MissingEncoderConfigs="Go live config did not include encoder configurations"
MultitrackVideo.InfoTest="Enhanced Broadcasting automatically optimizes your settings to encode and send multiple video qualities to %1, powering the best possible viewer experience. Selecting this option will send %1 information about your computer and software setup. <a href='https://help.twitch.tv/s/article/multiple-encodes'>Learn More</a>"
MultitrackVideo.InfoTest="%1 automatically optimizes your settings to encode and send multiple video qualities to %2, powering the best possible viewer experience. Selecting this option will send %2 information about your computer and software setup.%3"
MultitrackVideo.InfoLink=" <a href='%1'>Learn More</a>"
6 changes: 4 additions & 2 deletions UI/multitrack-video-error.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ MultitrackVideoError MultitrackVideoError::cancel()
return {Type::Cancel, {}};
}

bool MultitrackVideoError::ShowDialog(QWidget *parent) const
bool MultitrackVideoError::ShowDialog(
QWidget *parent, const QString &multitrack_video_name) const
{
QMessageBox mb(parent);
mb.setTextFormat(Qt::RichText);
Expand All @@ -27,7 +28,8 @@ bool MultitrackVideoError::ShowDialog(QWidget *parent) const
if (type == Type::Warning) {
mb.setText(
error +
QTStr("FailedToStartStream.WarningRetryNonMultitrackVideo"));
QTStr("FailedToStartStream.WarningRetryNonMultitrackVideo")
.arg(multitrack_video_name));
mb.setIcon(QMessageBox::Warning);
mb.setStandardButtons(QMessageBox::StandardButton::Yes |
QMessageBox::StandardButton::No);
Expand Down
3 changes: 2 additions & 1 deletion UI/multitrack-video-error.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ struct MultitrackVideoError {
static MultitrackVideoError warning(QString error);
static MultitrackVideoError cancel();

bool ShowDialog(QWidget *parent) const;
bool ShowDialog(QWidget *parent,
const QString &multitrack_video_name) const;

enum struct Type {
Critical,
Expand Down
18 changes: 15 additions & 3 deletions UI/multitrack-video-output.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -688,6 +688,15 @@ void MultitrackVideoOutput::PrepareStreaming(
bool is_custom_config = custom_config.has_value();
auto auto_config_url = MultitrackVideoAutoConfigURL(service);

OBSDataAutoRelease service_settings = obs_service_get_settings(service);
auto multitrack_video_name =
QTStr("Basic.Settings.Stream.MultitrackVideoLabel");
if (obs_data_has_user_value(service_settings,
"ertmp_multitrack_video_name")) {
multitrack_video_name = obs_data_get_string(
service_settings, "ertmp_multitrack_video_name");
}

auto auto_config_url_data = auto_config_url.toUtf8();

blog(LOG_INFO,
Expand Down Expand Up @@ -724,7 +733,8 @@ void MultitrackVideoOutput::PrepareStreaming(
go_live_post);
if (!go_live_config)
throw MultitrackVideoError::warning(
QTStr("FailedToStartStream.FallbackToDefault"));
QTStr("FailedToStartStream.FallbackToDefault")
.arg(multitrack_video_name));

download_time_elapsed = attempt_start_time.MSecsElapsed();

Expand Down Expand Up @@ -800,14 +810,16 @@ void MultitrackVideoOutput::PrepareStreaming(
auto recording_output = std::move(outputs.recording_output);
if (!output)
throw MultitrackVideoError::warning(
QTStr("FailedToStartStream.FallbackToDefault"));
QTStr("FailedToStartStream.FallbackToDefault")
.arg(multitrack_video_name));

auto multitrack_video_service =
create_service(device_id(), obs_session_id(),
go_live_config, rtmp_url, stream_key);
if (!multitrack_video_service)
throw MultitrackVideoError::warning(
QTStr("FailedToStartStream.FallbackToDefault"));
QTStr("FailedToStartStream.FallbackToDefault")
.arg(multitrack_video_name));

obs_output_set_service(output, multitrack_video_service);

Expand Down
38 changes: 36 additions & 2 deletions UI/window-basic-auto-config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -727,10 +727,44 @@ void AutoConfigStreamPage::ServiceChanged()
bool testBandwidth = ui->doBandwidthTest->isChecked();
bool custom = IsCustomService();

QString info_link_text;
auto multitrack_video_name =
QTStr("Basic.Settings.Stream.MultitrackVideoLabel");
if (!custom) {
OBSDataAutoRelease service_settings = obs_data_create();
obs_data_set_string(service_settings, "service",
service.c_str());
OBSServiceAutoRelease obs_service =
obs_service_create("rtmp_common", "temp service",
service_settings, nullptr);

if (obs_data_has_user_value(service_settings,
"ertmp_multitrack_video_name")) {
multitrack_video_name = obs_data_get_string(
service_settings,
"ertmp_multitrack_video_name");
}

if (obs_data_has_user_value(service_settings,
"ertmp_configuration_info_link")) {

info_link_text =
QTStr("MultitrackVideo.InfoLink")
.arg(obs_data_get_string(
service_settings,
"ertmp_configuration_info_link"));
}
}

ui->multitrackVideoInfo->setVisible(service == "Twitch");
ui->multitrackVideoInfo->setText(
QTStr("MultitrackVideo.InfoTest").arg(service.c_str()));
ui->multitrackVideoInfo->setText(QTStr("MultitrackVideo.InfoTest")
.arg(multitrack_video_name,
service.c_str(),
info_link_text));
ui->useMultitrackVideo->setVisible(service == "Twitch");
ui->useMultitrackVideo->setText(
QTStr("Basic.AutoConfig.StreamPage.UseMultitrackVideo")
.arg(multitrack_video_name));
ui->multitrackVideoInfo->setEnabled(wiz->hardwareEncodingAvailable);
ui->useMultitrackVideo->setEnabled(wiz->hardwareEncodingAvailable);

Expand Down
18 changes: 16 additions & 2 deletions UI/window-basic-main-outputs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2623,11 +2623,25 @@ FutureHolder<std::optional<bool>> BasicOutputHandler::SetupMultitrackVideo(

auto secondFuture = firstFuture.then(
main,
[&](std::optional<MultitrackVideoError> error)
[&, service = OBSService{service}](
std::optional<MultitrackVideoError> error)
-> std::optional<bool> {
if (error) {
OBSDataAutoRelease service_settings =
obs_service_get_settings(service);
auto multitrack_video_name = QTStr(
"Basic.Settings.Stream.MultitrackVideoLabel");
if (obs_data_has_user_value(
service_settings,
"ertmp_multitrack_video_name")) {
multitrack_video_name = obs_data_get_string(
service_settings,
"ertmp_multitrack_video_name");
}

multitrackVideoActive = false;
if (!error->ShowDialog(main))
if (!error->ShowDialog(main,
multitrack_video_name))
return false;
return std::nullopt;
}
Expand Down
43 changes: 42 additions & 1 deletion UI/window-basic-settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6269,9 +6269,50 @@ void OBSBasicSettings::UpdateMultitrackVideo()
ui->multitrackVideoConfigOverrideEnable->isChecked());

if (available) {
OBSDataAutoRelease settings;
{
auto service_name = ui->service->currentText();
auto custom_server = ui->customServer->text().trimmed();

obs_properties_t *props =
obs_get_service_properties("rtmp_common");
obs_property_t *service =
obs_properties_get(props, "service");

settings = obs_data_create();

obs_data_set_string(settings, "service",
QT_TO_UTF8(service_name));
obs_property_modified(service, settings);
}

auto multitrack_video_name =
QTStr("Basic.Settings.Stream.MultitrackVideoLabel");
if (obs_data_has_user_value(settings,
"ertmp_multitrack_video_name"))
multitrack_video_name = obs_data_get_string(
settings, "ertmp_multitrack_video_name");

ui->enableMultitrackVideo->setText(
QTStr("Basic.Settings.Stream.EnableMultitrackVideo")
.arg(multitrack_video_name));

QString info_link_text;
if (obs_data_has_user_value(settings,
"ertmp_configuration_info_link")) {

info_link_text =
QTStr("MultitrackVideo.InfoLink")
.arg(obs_data_get_string(
settings,
"ertmp_configuration_info_link"));
}

ui->multitrackVideoInfo->setText(
QTStr("MultitrackVideo.InfoTest")
.arg(ui->service->currentText()));
.arg(multitrack_video_name,
ui->service->currentText(),
info_link_text));
}
}

Expand Down
33 changes: 26 additions & 7 deletions plugins/rtmp-services/rtmp-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ static const char *get_protocol(json_t *service, obs_data_t *settings)
return "RTMP";
}

static void copy_info_to_settings(json_t *service, obs_data_t *settings);

static void rtmp_common_update(void *data, obs_data_t *settings)
{
struct rtmp_common *service = data;
Expand Down Expand Up @@ -185,6 +187,8 @@ static void rtmp_common_update(void *data, obs_data_t *settings)
bstrdup(ertmp_config_url);
}

copy_info_to_settings(serv, settings);

json_t *rec = json_object_get(serv, "recommended");
if (json_is_object(rec)) {
update_recommendations(service, rec);
Expand Down Expand Up @@ -553,6 +557,26 @@ static void update_protocol(json_t *service, obs_data_t *settings)
obs_data_set_string(settings, "protocol", "RTMP");
}

static void copy_info_to_settings(json_t *service, obs_data_t *settings)
{
const char *name = obs_data_get_string(settings, "service");

if (strncmp(name, "Twitch", 7) == 0) {
obs_data_set_string(
settings, "ertmp_configuration_info_link",
"https://help.twitch.tv/s/article/multiple-encodes");
obs_data_set_string(settings, "ertmp_multitrack_video_name",
"Enhanced Broadcasting");
}
fill_more_info_link(service, settings);
fill_stream_key_link(service, settings);
copy_string_from_json_if_available(service, settings,
"ertmp_configuration_info_link");
copy_string_from_json_if_available(service, settings,
"ertmp_multitrack_video_name");
update_protocol(service, settings);
}

static inline json_t *find_service(json_t *root, const char *name,
const char **p_new_name)
{
Expand Down Expand Up @@ -619,13 +643,8 @@ static bool service_selected(obs_properties_t *props, obs_property_t *p,
}

fill_servers(obs_properties_get(props, "server"), service, name);
fill_more_info_link(service, settings);
fill_stream_key_link(service, settings);
copy_string_from_json_if_available(service, settings,
"ertmp_configuration_info_link");
copy_string_from_json_if_available(service, settings,
"ertmp_multitrack_video_name");
update_protocol(service, settings);
copy_info_to_settings(service, settings);

return true;
}

Expand Down

0 comments on commit 9df264a

Please sign in to comment.