Browse Source

obs-libfdk: Set bitstream to ADTS for mpegts output

This sets the aac bitstream to ADTS for the mpegts output.
This fixes a bug with mpegts ouput where the avformat muxer issues
an error with fdk-aac encoder.

Signed-off-by: pkv <[email protected]>
pkv 3 years ago
parent
commit
c8b2db9760
2 changed files with 6 additions and 1 deletions
  1. 5 1
      plugins/obs-libfdk/obs-libfdk.c
  2. 1 0
      plugins/rtmp-services/rtmp-custom.c

+ 5 - 1
plugins/obs-libfdk/obs-libfdk.c

@@ -96,6 +96,8 @@ static void *libfdk_create(obs_data_t *settings, obs_encoder_t *encoder)
 	int bitrate = (int)obs_data_get_int(settings, "bitrate") * 1000;
 	int bitrate = (int)obs_data_get_int(settings, "bitrate") * 1000;
 	int afterburner = obs_data_get_bool(settings, "afterburner") ? 1 : 0;
 	int afterburner = obs_data_get_bool(settings, "afterburner") ? 1 : 0;
 	audio_t *audio = obs_encoder_audio(encoder);
 	audio_t *audio = obs_encoder_audio(encoder);
+	bool set_to_ADTS = obs_data_get_bool(settings, "set_to_ADTS");
+	int transmux = set_to_ADTS ? 2 : 0;
 	int mode = 0;
 	int mode = 0;
 	AACENC_ERROR err;
 	AACENC_ERROR err;
 
 
@@ -159,7 +161,9 @@ static void *libfdk_create(obs_data_t *settings, obs_encoder_t *encoder)
 		aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATEMODE, 0));
 		aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATEMODE, 0));
 	CHECK_LIBFDK(
 	CHECK_LIBFDK(
 		aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATE, bitrate));
 		aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATE, bitrate));
-	CHECK_LIBFDK(aacEncoder_SetParam(enc->fdkhandle, AACENC_TRANSMUX, 0));
+
+	CHECK_LIBFDK(
+		aacEncoder_SetParam(enc->fdkhandle, AACENC_TRANSMUX, transmux));
 	CHECK_LIBFDK(aacEncoder_SetParam(enc->fdkhandle, AACENC_AFTERBURNER,
 	CHECK_LIBFDK(aacEncoder_SetParam(enc->fdkhandle, AACENC_AFTERBURNER,
 					 afterburner));
 					 afterburner));
 
 

+ 1 - 0
plugins/rtmp-services/rtmp-custom.c

@@ -122,6 +122,7 @@ static void rtmp_custom_apply_settings(void *data, obs_data_t *video_settings,
 	    strncmp(service->server, RTMP_PROTOCOL, strlen(RTMP_PROTOCOL)) !=
 	    strncmp(service->server, RTMP_PROTOCOL, strlen(RTMP_PROTOCOL)) !=
 		    0) {
 		    0) {
 		obs_data_set_bool(video_settings, "repeat_headers", true);
 		obs_data_set_bool(video_settings, "repeat_headers", true);
+		obs_data_set_bool(audio_settings, "set_to_ADTS", true);
 	}
 	}
 }
 }