diff --git a/UI/window-basic-auto-config-test.cpp b/UI/window-basic-auto-config-test.cpp index 00491aff1..f2b0996e2 100644 --- a/UI/window-basic-auto-config-test.cpp +++ b/UI/window-basic-auto-config-test.cpp @@ -268,6 +268,16 @@ void AutoConfigTestPage::TestBandwidthThread() obs_output_release(output); obs_output_update(output, output_settings); + const char *audio_codec = + obs_output_get_supported_audio_codecs(output); + + if (strcmp(audio_codec, "aac") != 0) { + const char *id = FindAudioEncoderFromCodec(audio_codec); + aencoder = obs_audio_encoder_create(id, + "test_audio", nullptr, 0, nullptr); + obs_encoder_release(aencoder); + } + /* -----------------------------------*/ /* connect encoders/services/outputs */ diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index df9afb149..ea4f67216 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -682,6 +682,27 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) obs_output_get_signal_handler(streamOutput), "stop", OBSStopStreaming, this); + const char *codec = + obs_output_get_supported_audio_codecs(streamOutput); + + if (strcmp(codec, "aac") != 0) { + const char *id = FindAudioEncoderFromCodec(codec); + int audioBitrate = GetAudioBitrate(); + obs_data_t *settings = obs_data_create(); + obs_data_set_int(settings, "bitrate", audioBitrate); + + aacStreaming = obs_audio_encoder_create(id, + "alt_audio_enc", nullptr, 0, nullptr); + obs_encoder_release(aacStreaming); + if (!aacStreaming) + return false; + + obs_encoder_update(aacStreaming, settings); + obs_encoder_set_audio(aacStreaming, obs_get_audio()); + + obs_data_release(settings); + } + outputType = type; } @@ -956,6 +977,8 @@ struct AdvancedOutput : BasicOutputHandler { OBSEncoder h264Streaming; OBSEncoder h264Recording; + OBSEncoder streamAudioEnc; + bool ffmpegOutput; bool ffmpegRecording; bool useStreamEncoder; @@ -1346,11 +1369,34 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service) obs_output_get_signal_handler(streamOutput), "stop", OBSStopStreaming, this); + const char *codec = + obs_output_get_supported_audio_codecs(streamOutput); + + if (strcmp(codec, "aac") == 0) { + streamAudioEnc = aacTrack[trackIndex - 1]; + } else { + const char *id = FindAudioEncoderFromCodec(codec); + int audioBitrate = GetAudioBitrate(trackIndex - 1); + obs_data_t *settings = obs_data_create(); + obs_data_set_int(settings, "bitrate", audioBitrate); + + streamAudioEnc = obs_audio_encoder_create(id, + "alt_audio_enc", nullptr, + trackIndex - 1, nullptr); + if (!streamAudioEnc) + return false; + + obs_encoder_update(streamAudioEnc, settings); + obs_encoder_set_audio(streamAudioEnc, obs_get_audio()); + + obs_data_release(settings); + } + outputType = type; } obs_output_set_video_encoder(streamOutput, h264Streaming); - obs_output_set_audio_encoder(streamOutput, aacTrack[trackIndex - 1], 0); + obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0); /* --------------------- */