obs-outputs: Remove legacy multitrack code

This commit is contained in:
jp9000 2020-08-24 13:07:38 -07:00
parent 371e8334dd
commit d310f1532b
5 changed files with 46 additions and 90 deletions

View file

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

View file

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

View file

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

View file

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

View file

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