X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fvideo_encoder.cpp;h=4d6a403d0051cfec8d3a8c6c5ad638b3983c600c;hb=1ea13d66da4aca375505b550bd207ad1c14d298f;hp=29f31050e084a4e9527407cbdfc6823c0a7330d4;hpb=435d5e4f35ffd433e5cf9a6b372c9de662a9afa9;p=nageru diff --git a/nageru/video_encoder.cpp b/nageru/video_encoder.cpp index 29f3105..4d6a403 100644 --- a/nageru/video_encoder.cpp +++ b/nageru/video_encoder.cpp @@ -209,6 +209,7 @@ bool VideoEncoder::begin_frame(int64_t pts, int64_t duration, movit::YCbCrLumaCo RefCountedGLsync VideoEncoder::end_frame() { + want_srt_metric_update = true; lock_guard lock(qs_mu); return quicksync_encoder->end_frame(); } @@ -256,6 +257,8 @@ void VideoEncoder::open_output_streams() 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" }}); @@ -373,6 +376,7 @@ int VideoEncoder::connect_to_srt() // 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); @@ -390,6 +394,9 @@ int VideoEncoder::connect_to_srt() 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(); @@ -397,12 +404,14 @@ int VideoEncoder::write_srt_packet(uint8_t *buf, int buf_size) 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; }