diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 802c5d1c2..813a81589 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1044,7 +1044,7 @@ bool SimpleOutput::ReplayBufferActive() const /* ------------------------------------------------------------------------ */ struct AdvancedOutput : BasicOutputHandler { - OBSEncoder aacStreaming; + OBSEncoder streamAudioEnc; OBSEncoder aacTrack[MAX_AUDIO_MIXES]; OBSEncoder h264Streaming; OBSEncoder h264Recording; @@ -1212,7 +1212,7 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) std::string id; int streamTrack = config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1; - if (!CreateAACEncoder(aacStreaming, id, GetAudioBitrate(streamTrack), + if (!CreateAACEncoder(streamAudioEnc, id, GetAudioBitrate(streamTrack), "avc_aac_stream", streamTrack)) throw "Failed to create streaming audio encoder " "(advanced output)"; @@ -1283,7 +1283,7 @@ inline void AdvancedOutput::SetupStreaming() } } - obs_output_set_audio_encoder(streamOutput, aacStreaming, streamTrack); + obs_output_set_audio_encoder(streamOutput, streamAudioEnc, streamTrack); obs_encoder_set_scaled_size(h264Streaming, cx, cy); obs_encoder_set_video(h264Streaming, obs_get_video()); } @@ -1454,7 +1454,7 @@ inline void AdvancedOutput::UpdateAudioSettings() settings[i]); } - obs_encoder_update(aacStreaming, settings[i]); + obs_encoder_update(streamAudioEnc, settings[i]); } obs_data_release(settings[i]); @@ -1468,7 +1468,7 @@ void AdvancedOutput::SetupOutputs() obs_encoder_set_video(h264Recording, obs_get_video()); for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) obs_encoder_set_audio(aacTrack[i], obs_get_audio()); - obs_encoder_set_audio(aacStreaming, obs_get_audio()); + obs_encoder_set_audio(streamAudioEnc, obs_get_audio()); SetupStreaming(); @@ -1490,6 +1490,9 @@ int AdvancedOutput::GetAudioBitrate(size_t i) const bool AdvancedOutput::StartStreaming(obs_service_t *service) { + int streamTrack = + config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1; + if (!useStreamEncoder || (!ffmpegOutput && !obs_output_active(fileOutput))) { UpdateStreamSettings(); @@ -1553,13 +1556,34 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service) blog(LOG_WARNING, "Failed to load audio codec"); return false; } + + if (strcmp(codec, "aac") != 0) { + OBSData settings = obs_encoder_get_settings( + streamAudioEnc); + obs_data_release(settings); + + const char *id = + FindAudioEncoderFromCodec(codec); + + streamAudioEnc = obs_audio_encoder_create( + id, "alt_audio_enc", nullptr, + streamTrack, nullptr); + + if (!streamAudioEnc) + return false; + + obs_encoder_release(streamAudioEnc); + obs_encoder_update(streamAudioEnc, settings); + obs_encoder_set_audio(streamAudioEnc, + obs_get_audio()); + } } outputType = type; } obs_output_set_video_encoder(streamOutput, h264Streaming); - obs_output_set_audio_encoder(streamOutput, aacStreaming, 0); + obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0); /* --------------------- */