open_output_streams();
stream_audio_encoder->add_mux(http_mux.get());
- stream_audio_encoder->add_mux(srt_mux.get());
+ if (srt_mux != nullptr) {
+ stream_audio_encoder->add_mux(srt_mux.get());
+ }
quicksync_encoder->set_http_mux(http_mux.get());
- quicksync_encoder->set_srt_mux(srt_mux.get());
+ if (srt_mux != nullptr) {
+ quicksync_encoder->set_srt_mux(srt_mux.get());
+ }
if (global_flags.x264_video_to_http) {
x264_encoder->add_mux(http_mux.get());
- x264_encoder->add_mux(srt_mux.get());
+ if (srt_mux != nullptr) {
+ x264_encoder->add_mux(srt_mux.get());
+ }
}
#ifdef HAVE_AV1
if (global_flags.av1_video_to_http) {
av1_encoder->add_mux(http_mux.get());
- av1_encoder->add_mux(srt_mux.get());
+ if (srt_mux != nullptr) {
+ av1_encoder->add_mux(srt_mux.get());
+ }
}
#endif
}
RefCountedGLsync VideoEncoder::end_frame()
{
+ want_srt_metric_update = true;
lock_guard<mutex> lock(qs_mu);
return quicksync_encoder->end_frame();
}
if (is_srt) {
srt_mux.reset(mux);
srt_mux_metrics.init({{ "destination", "srt" }});
+ srt_metrics.init({{ "cardtype", "output" }});
+ global_metrics.add("srt_num_connection_attempts", {{ "cardtype", "output" }}, &metric_srt_num_connection_attempts);
} else {
http_mux.reset(mux);
http_mux_metrics.init({{ "destination", "http" }});
// Die immediately.
return sock;
}
+ ++metric_srt_num_connection_attempts;
if (srt_connect(sock, cur->ai_addr, cur->ai_addrlen) < 0) {
fprintf(stderr, "srt_connect(%s): %s\n", print_addrinfo(cur).c_str(), srt_getlasterror_str());
srt_close(sock);
int VideoEncoder::write_srt_packet(uint8_t *buf, int buf_size)
{
+ if (want_srt_metric_update.exchange(false) && srt_sock != -1) {
+ srt_metrics.update_srt_stats(srt_sock);
+ }
while (buf_size > 0) {
if (srt_sock == -1) {
srt_sock = connect_to_srt();
usleep(100000);
continue;
}
+ srt_metrics.update_srt_stats(srt_sock);
}
int to_send = min(buf_size, SRT_LIVE_DEF_PLSIZE);
int ret = srt_send(srt_sock, (char *)buf, to_send);
if (ret < 0) {
fprintf(stderr, "srt_send(): %s\n", srt_getlasterror_str());
srt_close(srt_sock);
+ srt_metrics.metric_srt_uptime_seconds = 0.0 / 0.0;
srt_sock = connect_to_srt();
continue;
}