|
@@ -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)
|