Browse Source

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.
Matthew Orlando 7 years ago
parent
commit
f41bc2c32b
1 changed files with 64 additions and 41 deletions
  1. 64 41
      UI/window-basic-main-outputs.cpp

+ 64 - 41
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;
-		}
-
-		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)
+		bool isEncoded = obs_output_get_flags(streamOutput)
+			& OBS_OUTPUT_ENCODED;
+
+		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());
-
-			obs_data_release(settings);
+			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;
@@ -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());
-
-			obs_data_release(settings);
+			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);
+
+				if (!streamAudioEnc)
+					return false;
+
+				obs_encoder_update(streamAudioEnc, settings);
+				obs_encoder_set_audio(streamAudioEnc,
+						obs_get_audio());
+
+				obs_data_release(settings);
+			}
 		}
 
 		outputType = type;