@@ -1456,7 +1456,7 @@ struct AdvancedOutput : BasicOutputHandler {
14561456 OBSEncoder streamAudioEnc;
14571457 OBSEncoder streamArchiveEnc;
14581458 OBSEncoder recordTrack[MAX_AUDIO_MIXES];
1459- OBSEncoder videoStreaming;
1459+ OBSEncoder videoStreaming[ 3 ] ;
14601460 OBSEncoder videoRecording;
14611461
14621462 bool ffmpegOutput;
@@ -1619,13 +1619,25 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
16191619 }
16201620 }
16211621
1622- videoStreaming = obs_video_encoder_create (streamEncoder,
1623- " advanced_video_stream" ,
1624- streamEncSettings, nullptr );
1625- if (!videoStreaming)
1622+ videoStreaming[0 ] = obs_video_encoder_create (streamEncoder,
1623+ " advanced_video_stream_1" ,
1624+ streamEncSettings,
1625+ nullptr );
1626+
1627+ videoStreaming[1 ] = obs_video_encoder_create (streamEncoder,
1628+ " advanced_video_stream_2" ,
1629+ streamEncSettings,
1630+ nullptr );
1631+
1632+ videoStreaming[2 ] = obs_video_encoder_create (streamEncoder,
1633+ " advanced_video_stream_3" ,
1634+ streamEncSettings,
1635+ nullptr );
1636+
1637+ if (!videoStreaming[0 ])
16261638 throw " Failed to create streaming video encoder "
16271639 " (advanced output)" ;
1628- obs_encoder_release (videoStreaming);
1640+ obs_encoder_release (videoStreaming[ 0 ] );
16291641
16301642 const char *rate_control = obs_data_get_string (
16311643 useStreamEncoder ? streamEncSettings : recordEncSettings,
@@ -1697,7 +1709,7 @@ void AdvancedOutput::UpdateStreamSettings()
16971709 config_get_string (main->Config (), " AdvOut" , " Encoder" );
16981710
16991711 OBSData settings = GetDataFromJsonFile (" streamEncoder.json" );
1700- ApplyEncoderDefaults (settings, videoStreaming);
1712+ ApplyEncoderDefaults (settings, videoStreaming[ 0 ] );
17011713
17021714 if (applyServiceSettings) {
17031715 int bitrate = (int )obs_data_get_int (settings, " bitrate" );
@@ -1726,11 +1738,11 @@ void AdvancedOutput::UpdateStreamSettings()
17261738 case VIDEO_FORMAT_P010:
17271739 break ;
17281740 default :
1729- obs_encoder_set_preferred_video_format (videoStreaming,
1741+ obs_encoder_set_preferred_video_format (videoStreaming[ 0 ] ,
17301742 VIDEO_FORMAT_NV12);
17311743 }
17321744
1733- obs_encoder_update (videoStreaming, settings);
1745+ obs_encoder_update (videoStreaming[ 0 ] , settings);
17341746}
17351747
17361748inline void AdvancedOutput::UpdateRecordingSettings ()
@@ -1775,14 +1787,14 @@ inline void AdvancedOutput::SetupStreaming()
17751787 }
17761788
17771789 obs_output_set_audio_encoder (streamOutput, streamAudioEnc, 0 );
1778- obs_encoder_set_scaled_size (videoStreaming, cx, cy);
1790+ obs_encoder_set_scaled_size (videoStreaming[ 0 ] , cx, cy);
17791791
17801792 const char *id = obs_service_get_id (main->GetService ());
17811793 if (strcmp (id, " rtmp_custom" ) == 0 ) {
17821794 OBSDataAutoRelease settings = obs_data_create ();
17831795 obs_service_apply_encoder_settings (main->GetService (), settings,
17841796 nullptr );
1785- obs_encoder_update (videoStreaming, settings);
1797+ obs_encoder_update (videoStreaming[ 0 ] , settings);
17861798 }
17871799}
17881800
@@ -1821,10 +1833,18 @@ inline void AdvancedOutput::SetupRecording()
18211833 tracks = config_get_int (main->Config (), " AdvOut" , " TrackIndex" );
18221834
18231835 if (useStreamEncoder) {
1824- obs_output_set_video_encoder (fileOutput, videoStreaming);
1836+ // Sean-Der
1837+ obs_encoder_set_scaled_size (videoStreaming[0 ], 640 , 480 );
1838+ obs_encoder_set_scaled_size (videoStreaming[1 ], 800 , 600 );
1839+ obs_encoder_set_scaled_size (videoStreaming[2 ], 1024 , 768 );
1840+
1841+ obs_output_set_video_encoder2 (fileOutput, videoStreaming[0 ], 0 );
1842+ obs_output_set_video_encoder2 (fileOutput, videoStreaming[1 ], 1 );
1843+ obs_output_set_video_encoder2 (fileOutput, videoStreaming[2 ], 2 );
1844+
18251845 if (replayBuffer)
18261846 obs_output_set_video_encoder (replayBuffer,
1827- videoStreaming);
1847+ videoStreaming[ 0 ] );
18281848 } else {
18291849 if (rescale && rescaleRes && *rescaleRes) {
18301850 if (sscanf (rescaleRes, " %ux%u" , &cx, &cy) != 2 ) {
@@ -2013,7 +2033,10 @@ inline void AdvancedOutput::UpdateAudioSettings()
20132033
20142034void AdvancedOutput::SetupOutputs ()
20152035{
2016- obs_encoder_set_video (videoStreaming, obs_get_video ());
2036+ obs_encoder_set_video (videoStreaming[0 ], obs_get_video ());
2037+ obs_encoder_set_video (videoStreaming[1 ], obs_get_video ());
2038+ obs_encoder_set_video (videoStreaming[2 ], obs_get_video ());
2039+
20172040 if (videoRecording)
20182041 obs_encoder_set_video (videoRecording, obs_get_video ());
20192042 for (size_t i = 0 ; i < MAX_AUDIO_MIXES; i++)
@@ -2123,7 +2146,10 @@ bool AdvancedOutput::SetupStreaming(obs_service_t *service)
21232146 outputType = type;
21242147 }
21252148
2126- obs_output_set_video_encoder (streamOutput, videoStreaming);
2149+ obs_output_set_video_encoder2 (streamOutput, videoStreaming[0 ], 0 );
2150+ obs_output_set_video_encoder2 (streamOutput, videoStreaming[1 ], 1 );
2151+ obs_output_set_video_encoder2 (streamOutput, videoStreaming[2 ], 2 );
2152+
21272153 obs_output_set_audio_encoder (streamOutput, streamAudioEnc, 0 );
21282154
21292155 return true ;
0 commit comments