Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI: Add (eRTMP) multitrack video output #10633

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 18 additions & 0 deletions UI/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,24 @@ target_sources(
ui-validation.cpp
ui-validation.hpp)

target_sources(
obs-studio
PRIVATE # cmake-format: sortable
goliveapi-censoredjson.cpp
goliveapi-censoredjson.hpp
goliveapi-network.cpp
goliveapi-network.hpp
goliveapi-postdata.cpp
goliveapi-postdata.hpp
Fenrirthviti marked this conversation as resolved.
Show resolved Hide resolved
models/multitrack-video.hpp
multitrack-video-error.cpp
multitrack-video-error.hpp
multitrack-video-output.cpp
multitrack-video-output.hpp
qt-helpers.cpp
qt-helpers.hpp
system-info.hpp)

if(OS_WINDOWS)
include(cmake/os-windows.cmake)
elseif(OS_MACOS)
Expand Down
10 changes: 10 additions & 0 deletions UI/api-interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,16 @@ struct OBSStudioAPI : obs_frontend_callbacks {

obs_output_t *obs_frontend_get_streaming_output(void) override
{
auto multitrackVideo =
main->outputHandler->multitrackVideo.get();
auto mtvOutput =
multitrackVideo
? obs_output_get_ref(
multitrackVideo->StreamingOutput())
: nullptr;
if (mtvOutput)
return mtvOutput;

OBSOutput output = main->outputHandler->streamOutput.Get();
return obs_output_get_ref(output);
}
Expand Down
23 changes: 23 additions & 0 deletions UI/cmake/legacy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,23 @@ target_sources(
window-remux.cpp
window-remux.hpp)

target_sources(
obs
PRIVATE # cmake-format: sortable
goliveapi-censoredjson.cpp
goliveapi-censoredjson.hpp
goliveapi-network.cpp
goliveapi-network.hpp
goliveapi-postdata.cpp
goliveapi-postdata.hpp
multitrack-video-error.cpp
multitrack-video-error.hpp
multitrack-video-output.cpp
multitrack-video-output.hpp
qt-helpers.cpp
qt-helpers.hpp
system-info.hpp)

target_sources(obs PRIVATE importers/importers.cpp importers/importers.hpp importers/classic.cpp importers/sl.cpp
importers/studio.cpp importers/xsplit.cpp)

Expand Down Expand Up @@ -368,6 +385,8 @@ if(OS_WINDOWS)
win-update/updater/manifest.hpp
${CMAKE_BINARY_DIR}/obs.rc)

target_sources(obs PRIVATE system-info-windows.cpp)

find_package(MbedTLS)
target_link_libraries(obs PRIVATE Mbedtls::Mbedtls nlohmann_json::nlohmann_json OBS::blake2 Detours::Detours)

Expand Down Expand Up @@ -428,6 +447,8 @@ elseif(OS_MACOS)
target_sources(obs PRIVATE platform-osx.mm)
target_sources(obs PRIVATE forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp)

target_sources(obs PRIVATE system-info-macos.mm)

if(ENABLE_WHATSNEW)
find_library(SECURITY Security)
find_package(nlohmann_json REQUIRED)
Expand Down Expand Up @@ -464,6 +485,8 @@ elseif(OS_POSIX)
target_sources(obs PRIVATE platform-x11.cpp)
target_link_libraries(obs PRIVATE Qt::GuiPrivate Qt::DBus)

target_sources(obs PRIVATE system-info-posix.cpp)

target_compile_definitions(obs PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}"
"$<$<BOOL:${LINUX_PORTABLE}>:LINUX_PORTABLE>")
if(TARGET obspython)
Expand Down
2 changes: 2 additions & 0 deletions UI/cmake/os-freebsd.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ target_sources(obs-studio PRIVATE platform-x11.cpp)
target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}")
target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate procstat)

target_sources(obs-studio PRIVATE system-info-posix.cpp)

if(TARGET OBS::python)
find_package(Python REQUIRED COMPONENTS Interpreter Development)
target_link_libraries(obs-studio PRIVATE Python::Python)
Expand Down
2 changes: 2 additions & 0 deletions UI/cmake/os-linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ target_sources(obs-studio PRIVATE platform-x11.cpp)
target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}")
target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus)

target_sources(obs-studio PRIVATE system-info-posix.cpp)

if(TARGET OBS::python)
find_package(Python REQUIRED COMPONENTS Interpreter Development)
target_link_libraries(obs-studio PRIVATE Python::Python)
Expand Down
2 changes: 2 additions & 0 deletions UI/cmake/os-macos.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ include(cmake/feature-sparkle.cmake)
target_sources(obs-studio PRIVATE platform-osx.mm forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp)
target_compile_options(obs-studio PRIVATE -Wno-quoted-include-in-framework-header -Wno-comma)

target_sources(obs-studio PRIVATE system-info-macos.mm)

set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)

if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3)
Expand Down
2 changes: 2 additions & 0 deletions UI/cmake/os-windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ target_sources(
win-dll-blocklist.c
win-update/updater/manifest.hpp)

target_sources(obs-studio PRIVATE system-info-windows.cpp)

target_link_libraries(obs-studio PRIVATE crypt32 OBS::blake2 OBS::w32-pthreads MbedTLS::MbedTLS
nlohmann_json::nlohmann_json Detours::Detours)

Expand Down
44 changes: 44 additions & 0 deletions UI/data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ MixerToolbarMenu="Audio Mixer Menu"
SceneFilters="Open Scene Filters"
List="List"
Grid="Grid"
Automatic="Automatic"

# warning for plugin load failures
PluginsFailedToLoad.Title="Plugin Load Error"
Expand Down Expand Up @@ -224,6 +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 %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 All @@ -242,6 +244,7 @@ Basic.AutoConfig.TestPage.Result.Header="The program has determined that these e
Basic.AutoConfig.TestPage.Result.Footer="To use these settings, click Apply Settings. To reconfigure the wizard and try again, click Back. To manually configure settings yourself, click Cancel and open Settings."
Basic.AutoConfig.Info="The auto-configuration wizard will determine the best settings based on your computer specs and internet speed."
Basic.AutoConfig.RunAnytime="This can be run at any time by going to the Tools menu."
Basic.AutoConfig.TestPage.Result.StreamingResolution="Streaming (Scaled) Resolution"

# stats
Basic.Stats="Stats"
Expand Down Expand Up @@ -721,6 +724,7 @@ Basic.Main.Scenes="Scenes"
Basic.Main.Sources="Sources"
Basic.Main.Source="Source"
Basic.Main.Controls="Controls"
Basic.Main.PreparingStream="Preparing..."
Basic.Main.Connecting="Connecting..."
Basic.Main.StartRecording="Start Recording"
Basic.Main.StartReplayBuffer="Start Replay Buffer"
Expand Down Expand Up @@ -859,6 +863,7 @@ Basic.MainMenu.Help.About="&About"
Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
Basic.Settings.ConfirmTitle="Confirm Changes"
Basic.Settings.Confirm="You have unsaved changes. Save changes?"
Basic.Settings.MultitrackVideoDisabledSettings="%1 %2 is controlling some of your stream settings"

# basic mode 'general' settings
Basic.Settings.General="General"
Expand Down Expand Up @@ -933,6 +938,7 @@ Basic.Settings.Appearance.General.NoVariant="No Styles Available"

# basic mode 'stream' settings
Basic.Settings.Stream="Stream"
Basic.Settings.Stream.Destination="Destination"
Basic.Settings.Stream.Custom.UseAuthentication="Use authentication"
Basic.Settings.Stream.Custom.Username="Username"
Basic.Settings.Stream.Custom.Password="Password"
Expand All @@ -956,6 +962,18 @@ 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.SpecifyCustomServer="Specify Custom Server..."
Basic.Settings.Stream.ServiceCustomServer="Custom Server"
Basic.Settings.Stream.EnableMultitrackVideo="Enable %1"
Basic.Settings.Stream.MultitrackVideoMaximumAggregateBitrate="Maximum Streaming Bandwidth"
Basic.Settings.Stream.MultitrackVideoMaximumAggregateBitrateAuto="Auto"
Basic.Settings.Stream.MultitrackVideoMaximumVideoTracks="Maximum Video Tracks"
Basic.Settings.Stream.MultitrackVideoMaximumVideoTracksAuto="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="Multitrack Video"
Basic.Settings.Stream.AdvancedOptions="Advanced Options"

# basic mode 'output' settings
Basic.Settings.Output="Output"
Expand Down Expand Up @@ -1539,3 +1557,29 @@ YouTube.Errors.rateLimitExceeded="You are sending messages too quickly."
# Browser Dock
YouTube.DocksRemoval.Title="Clear Legacy YouTube Browser Docks"
YouTube.DocksRemoval.Text="These browser docks will be removed as deprecated:\n\n%1\nUse \"Docks/YouTube Live Control Room\" instead."

# MultitrackVideo
ConfigDownload.WarningMessageTitle="Warning"
FailedToStartStream.MissingConfigURL="No config URL available for the current service"
FailedToStartStream.NoCustomRTMPURLInSettings="Custom RTMP URL not specified"
FailedToStartStream.InvalidCustomConfig="Invalid custom config"
FailedToStartStream.FailedToCreateMultitrackVideoService="Failed to create multitrack video service"
FailedToStartStream.FailedToCreateMultitrackVideoOutput="Failed to create multitrack video rtmp output"
FailedToStartStream.EncoderNotAvailable="NVENC not available.\n\nFailed to find encoder type '%1'"
FailedToStartStream.FailedToCreateVideoEncoder="Failed to create video encoder '%1' (type: '%2')"
FailedToStartStream.FailedToGetOBSVideoInfo="Failed to get obs video info while creating encoder '%1' (type: '%2')"
FailedToStartStream.FailedToCreateAudioEncoder="Failed to create audio encoder"
FailedToStartStream.NoRTMPURLInConfig="Config does not contain stream target RTMP(S) URL"
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.WarningUnknownStatus="Received unknown status value '%1'"
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"
FailedToStartStream.StatusMissingHTML="Go live request returned an unspecified error"
FailedToStartStream.NoConfigSupplied="Missing config"
MultitrackVideo.Info="%1 automatically optimizes your settings to encode and send multiple video qualities. Selecting this option will send %2 information about your computer and software setup."
MultitrackVideo.IncompatibleSettings.Title="Incompatible Settings"
MultitrackVideo.IncompatibleSettings.Text="%1 is not currently compatible with:\n\n%2\nTo continue streaming with %1, disable incompatible settings:\n\n%3\nand Start Streaming again."
MultitrackVideo.IncompatibleSettings.DisableAndStartStreaming="Disable for this stream and Start Streaming"
MultitrackVideo.IncompatibleSettings.UpdateAndStartStreaming="Update Settings and Start Streaming"
5 changes: 5 additions & 0 deletions UI/data/themes/Yami.obt
Original file line number Diff line number Diff line change
Expand Up @@ -1294,6 +1294,11 @@ QLabel#errorLabel {
font-weight: bold;
}

QFrame [themeID="notice"] {
background: var(--bg_preview);
border-radius: var(--border_radius);
}

/* About dialog */

* [themeID="aboutName"] {
Expand Down