Sfoglia il codice sorgente

obs-outputs: Remove legacy multitrack code

jp9000 5 anni fa
parent
commit
d310f1532b

+ 16 - 35
plugins/obs-outputs/flv-mux.c

@@ -58,11 +58,11 @@ void write_file_info(FILE *file, int64_t duration_ms, int64_t size)
 	fwrite(buf, 1, enc - buf, file);
 }
 
-static bool build_flv_meta_data(obs_output_t *context, uint8_t **output,
-				size_t *size, size_t a_idx)
+static void build_flv_meta_data(obs_output_t *context, uint8_t **output,
+				size_t *size)
 {
 	obs_encoder_t *vencoder = obs_output_get_video_encoder(context);
-	obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, a_idx);
+	obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, 0);
 	video_t *video = obs_encoder_video(vencoder);
 	audio_t *audio = obs_encoder_audio(aencoder);
 	char buf[4096];
@@ -70,31 +70,23 @@ static bool build_flv_meta_data(obs_output_t *context, uint8_t **output,
 	char *end = enc + sizeof(buf);
 	struct dstr encoder_name = {0};
 
-	if (a_idx > 0 && !aencoder)
-		return false;
-
 	enc_str(&enc, end, "@setDataFrame");
 	enc_str(&enc, end, "onMetaData");
 
 	*enc++ = AMF_ECMA_ARRAY;
-	enc = AMF_EncodeInt32(enc, end, a_idx == 0 ? 20 : 15);
+	enc = AMF_EncodeInt32(enc, end, 20);
 
 	enc_num_val(&enc, end, "duration", 0.0);
 	enc_num_val(&enc, end, "fileSize", 0.0);
 
-	if (a_idx == 0) {
-		enc_num_val(&enc, end, "width",
-			    (double)obs_encoder_get_width(vencoder));
-		enc_num_val(&enc, end, "height",
-			    (double)obs_encoder_get_height(vencoder));
-
-		enc_num_val(&enc, end, "videocodecid",
-			    VIDEODATA_AVCVIDEOPACKET);
-		enc_num_val(&enc, end, "videodatarate",
-			    encoder_bitrate(vencoder));
-		enc_num_val(&enc, end, "framerate",
-			    video_output_get_frame_rate(video));
-	}
+	enc_num_val(&enc, end, "width",
+		    (double)obs_encoder_get_width(vencoder));
+	enc_num_val(&enc, end, "height",
+		    (double)obs_encoder_get_height(vencoder));
+
+	enc_num_val(&enc, end, "videocodecid", VIDEODATA_AVCVIDEOPACKET);
+	enc_num_val(&enc, end, "videodatarate", encoder_bitrate(vencoder));
+	enc_num_val(&enc, end, "framerate", video_output_get_frame_rate(video));
 
 	enc_num_val(&enc, end, "audiocodecid", AUDIODATA_AAC);
 	enc_num_val(&enc, end, "audiodatarate", encoder_bitrate(aencoder));
@@ -133,11 +125,10 @@ static bool build_flv_meta_data(obs_output_t *context, uint8_t **output,
 
 	*size = enc - buf;
 	*output = bmemdup(buf, *size);
-	return true;
 }
 
-bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
-		   bool write_header, size_t audio_idx)
+void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
+		   bool write_header)
 {
 	struct array_output_data data;
 	struct serializer s;
@@ -146,12 +137,7 @@ bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
 	uint32_t start_pos;
 
 	array_output_serializer_init(&s, &data);
-
-	if (!build_flv_meta_data(context, &meta_data, &meta_data_size,
-				 audio_idx)) {
-		bfree(meta_data);
-		return false;
-	}
+	build_flv_meta_data(context, &meta_data, &meta_data_size);
 
 	if (write_header) {
 		s_write(&s, "FLV", 3);
@@ -177,7 +163,6 @@ bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
 	*size = data.bytes.num;
 
 	bfree(meta_data);
-	return true;
 }
 
 #ifdef DEBUG_TIMESTAMPS
@@ -373,7 +358,7 @@ static void flv_build_additional_meta_data(uint8_t **data, size_t *size)
 	*size = out.bytes.num;
 }
 
-bool flv_additional_meta_data(obs_output_t *context, uint8_t **data,
+void flv_additional_meta_data(obs_output_t *context, uint8_t **data,
 			      size_t *size)
 {
 	obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, 1);
@@ -382,9 +367,6 @@ bool flv_additional_meta_data(obs_output_t *context, uint8_t **data,
 	uint8_t *meta_data = NULL;
 	size_t meta_data_size;
 
-	if (!aencoder)
-		return false;
-
 	flv_build_additional_meta_data(&meta_data, &meta_data_size);
 
 	array_output_serializer_init(&s, &out);
@@ -402,7 +384,6 @@ bool flv_additional_meta_data(obs_output_t *context, uint8_t **data,
 
 	*data = out.bytes.array;
 	*size = out.bytes.num;
-	return false;
 }
 
 static inline void s_u29(struct serializer *s, uint32_t val)

+ 3 - 3
plugins/obs-outputs/flv-mux.h

@@ -28,9 +28,9 @@ static int32_t get_ms_time(struct encoder_packet *packet, int64_t val)
 
 extern void write_file_info(FILE *file, int64_t duration_ms, int64_t size);
 
-extern bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
-			  bool write_header, size_t audio_idx);
-extern bool flv_additional_meta_data(obs_output_t *context, uint8_t **output,
+extern void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
+			  bool write_header);
+extern void flv_additional_meta_data(obs_output_t *context, uint8_t **output,
 				     size_t *size);
 extern void flv_packet_mux(struct encoder_packet *packet, int32_t dts_offset,
 			   uint8_t **output, size_t *size, bool is_header);

+ 1 - 1
plugins/obs-outputs/flv-output.c

@@ -106,7 +106,7 @@ static void write_meta_data(struct flv_output *stream)
 	uint8_t *meta_data;
 	size_t meta_data_size;
 
-	flv_meta_data(stream->output, &meta_data, &meta_data_size, true, 0);
+	flv_meta_data(stream->output, &meta_data, &meta_data_size, true);
 	fwrite(meta_data, 1, meta_data_size, stream->file);
 	bfree(meta_data);
 }

+ 28 - 52
plugins/obs-outputs/rtmp-stream.c

@@ -423,7 +423,7 @@ static int send_packet(struct rtmp_stream *stream,
 		}
 	}
 
-	if (stream->using_metadata_multitrack && idx > 0) {
+	if (idx > 0) {
 		flv_additional_packet_mux(
 			packet, is_header ? 0 : stream->start_dts_offset, &data,
 			&size, is_header, idx);
@@ -436,11 +436,7 @@ static int send_packet(struct rtmp_stream *stream,
 	droptest_cap_data_rate(stream, size);
 #endif
 
-	if (stream->using_metadata_multitrack) {
-		idx = 0;
-	}
-
-	ret = RTMP_Write(&stream->rtmp, (char *)data, (int)size, (int)idx);
+	ret = RTMP_Write(&stream->rtmp, (char *)data, (int)size, 0);
 	bfree(data);
 
 	if (is_header)
@@ -669,16 +665,13 @@ static void *send_thread(void *data)
 	return NULL;
 }
 
-static bool send_additional_meta_data(struct rtmp_stream *stream, size_t idx,
-				      bool *next)
+static bool send_additional_meta_data(struct rtmp_stream *stream)
 {
 	uint8_t *meta_data;
 	size_t meta_data_size;
 	bool success = true;
 
-	*next = flv_additional_meta_data(stream->output, &meta_data,
-					 &meta_data_size);
-
+	flv_additional_meta_data(stream->output, &meta_data, &meta_data_size);
 	success = RTMP_Write(&stream->rtmp, (char *)meta_data,
 			     (int)meta_data_size, 0) >= 0;
 	bfree(meta_data);
@@ -686,20 +679,16 @@ static bool send_additional_meta_data(struct rtmp_stream *stream, size_t idx,
 	return success;
 }
 
-static bool send_meta_data(struct rtmp_stream *stream, size_t idx, bool *next)
+static bool send_meta_data(struct rtmp_stream *stream)
 {
 	uint8_t *meta_data;
 	size_t meta_data_size;
 	bool success = true;
 
-	*next = flv_meta_data(stream->output, &meta_data, &meta_data_size,
-			      false, idx);
-
-	if (*next) {
-		success = RTMP_Write(&stream->rtmp, (char *)meta_data,
-				     (int)meta_data_size, (int)idx) >= 0;
-		bfree(meta_data);
-	}
+	flv_meta_data(stream->output, &meta_data, &meta_data_size, false);
+	success = RTMP_Write(&stream->rtmp, (char *)meta_data,
+			     (int)meta_data_size, 0) >= 0;
+	bfree(meta_data);
 
 	return success;
 }
@@ -789,7 +778,7 @@ static int init_send(struct rtmp_stream *stream)
 {
 	int ret;
 	size_t idx = 0;
-	bool next = true;
+	obs_output_t *context = stream->output;
 
 #if defined(_WIN32)
 	adjust_sndbuf_size(stream, MIN_SENDBUF_SIZE);
@@ -827,7 +816,6 @@ static int init_send(struct rtmp_stream *stream)
 			bfree(stream->write_buf);
 
 		int total_bitrate = 0;
-		obs_output_t *context = stream->output;
 
 		obs_encoder_t *vencoder = obs_output_get_video_encoder(context);
 		if (vencoder) {
@@ -892,20 +880,25 @@ static int init_send(struct rtmp_stream *stream)
 	}
 
 	os_atomic_set_bool(&stream->active, true);
-	while (next) {
-		bool success =
-			(stream->using_metadata_multitrack && idx != 0)
-				? send_additional_meta_data(stream, idx, &next)
-				: send_meta_data(stream, idx, &next);
-		idx++;
-
-		if (!success) {
-			warn("Disconnected while attempting to connect to "
-			     "server.");
-			set_output_error(stream);
-			return OBS_OUTPUT_DISCONNECTED;
-		}
+
+	if (!send_meta_data(stream)) {
+		warn("Disconnected while attempting to send metadata");
+		set_output_error(stream);
+		return OBS_OUTPUT_DISCONNECTED;
+	}
+
+	obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, 1);
+	if (aencoder && !send_additional_meta_data(stream)) {
+		warn("Disconnected while attempting to send additional "
+		     "metadata");
+		return OBS_OUTPUT_DISCONNECTED;
 	}
+
+	if (obs_output_get_audio_encoder(context, 2) != NULL) {
+		warn("Additional audio streams not supported");
+		return OBS_OUTPUT_DISCONNECTED;
+	}
+
 	obs_output_begin_data_capture(stream->output, 0);
 
 	return OBS_OUTPUT_SUCCESS;
@@ -1015,20 +1008,6 @@ static int try_connect(struct rtmp_stream *stream)
 
 	RTMP_AddStream(&stream->rtmp, stream->key.array);
 
-	if (!stream->using_metadata_multitrack) {
-		for (size_t idx = 1;; idx++) {
-			obs_encoder_t *encoder = obs_output_get_audio_encoder(
-				stream->output, idx);
-			const char *encoder_name;
-
-			if (!encoder)
-				break;
-
-			encoder_name = obs_encoder_get_name(encoder);
-			RTMP_AddStream(&stream->rtmp, encoder_name);
-		}
-	}
-
 	stream->rtmp.m_outChunkSize = 4096;
 	stream->rtmp.m_bSendChunkSizeInfo = true;
 	stream->rtmp.m_bUseNagle = true;
@@ -1087,8 +1066,6 @@ static bool init_connect(struct rtmp_stream *stream)
 	drop_p = (int64_t)obs_data_get_int(settings, OPT_PFRAME_DROP_THRESHOLD);
 	stream->max_shutdown_time_sec =
 		(int)obs_data_get_int(settings, OPT_MAX_SHUTDOWN_TIME_SEC);
-	stream->using_metadata_multitrack =
-		obs_data_get_bool(settings, OPT_METADATA_MULTITRACK);
 
 	obs_encoder_t *venc = obs_output_get_video_encoder(stream->output);
 	obs_encoder_t *aenc = obs_output_get_audio_encoder(stream->output, 0);
@@ -1488,7 +1465,6 @@ static void rtmp_stream_defaults(obs_data_t *defaults)
 	obs_data_set_default_string(defaults, OPT_BIND_IP, "default");
 	obs_data_set_default_bool(defaults, OPT_NEWSOCKETLOOP_ENABLED, false);
 	obs_data_set_default_bool(defaults, OPT_LOWLATENCY_ENABLED, false);
-	obs_data_set_default_bool(defaults, OPT_METADATA_MULTITRACK, true);
 }
 
 static obs_properties_t *rtmp_stream_properties(void *unused)

+ 0 - 1
plugins/obs-outputs/rtmp-stream.h

@@ -59,7 +59,6 @@ struct rtmp_stream {
 	pthread_mutex_t packets_mutex;
 	struct circlebuf packets;
 	bool sent_headers;
-	bool using_metadata_multitrack;
 
 	bool got_first_video;
 	int64_t start_dts_offset;