From f41bc2c32bd513e764ec564f228c361d430ffaf4 Mon Sep 17 00:00:00 2001 From: Matthew Orlando Date: Wed, 26 Sep 2018 11:39:34 -0700 Subject: [PATCH] UI: Fix unencoded stream failure A stream will fail to start if the output_info does not have an encoded_audio_codecs string, even if the output is not flagged as encoded. This allows unencoded outputs to omit that string. --- UI/window-basic-main-outputs.cpp | 99 ++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 29f27a39c..70d807e71 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -685,28 +685,39 @@ 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 (!codec) { - return false; - } + bool isEncoded = obs_output_get_flags(streamOutput) + & OBS_OUTPUT_ENCODED; - 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) + if (isEncoded) { + const char *codec = + obs_output_get_supported_audio_codecs( + streamOutput); + if (!codec) { + blog(LOG_WARNING, "Failed to load audio codec"); return false; + } - obs_encoder_update(aacStreaming, settings); - obs_encoder_set_audio(aacStreaming, obs_get_audio()); + 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); - obs_data_release(settings); + 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; @@ -1463,30 +1474,42 @@ 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 (!codec) { - return false; - } + bool isEncoded = obs_output_get_flags(streamOutput) + & OBS_OUTPUT_ENCODED; - 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) + if (isEncoded) { + const char *codec = + obs_output_get_supported_audio_codecs( + streamOutput); + if (!codec) { + blog(LOG_WARNING, "Failed to load audio codec"); return false; + } - obs_encoder_update(streamAudioEnc, settings); - obs_encoder_set_audio(streamAudioEnc, obs_get_audio()); + if (strcmp(codec, "aac") == 0) { + streamAudioEnc = aacTrack[trackIndex - 1]; + } else { + obs_data_t *settings = obs_data_create(); + const char *id = + FindAudioEncoderFromCodec(codec); + int audioBitrate = + GetAudioBitrate(trackIndex - 1); + + obs_data_set_int(settings, "bitrate", + audioBitrate); + streamAudioEnc = obs_audio_encoder_create(id, + "alt_audio_enc", nullptr, + trackIndex - 1, nullptr); - obs_data_release(settings); + if (!streamAudioEnc) + return false; + + obs_encoder_update(streamAudioEnc, settings); + obs_encoder_set_audio(streamAudioEnc, + obs_get_audio()); + + obs_data_release(settings); + } } outputType = type;