From 24d7bea41ffff2612beacf2e5f3fb5f2ad02d5df Mon Sep 17 00:00:00 2001 From: tt2468 Date: Fri, 11 Nov 2022 03:17:44 -0800 Subject: [PATCH] obs-ffmpeg: Improve RIST/SRT log messages Overall improvements to match behavior of other log sources. --- plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 51 ++++++++++++------------ plugins/obs-ffmpeg/obs-ffmpeg-rist.h | 38 +++++++++--------- plugins/obs-ffmpeg/obs-ffmpeg-srt.h | 54 ++++++++++++++------------ 3 files changed, 75 insertions(+), 68 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index 52ed50197..fd93595fb 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -31,8 +31,8 @@ #include /* ------------------------------------------------------------------------- */ -#define do_log(level, format, ...) \ - blog(level, "[obs-ffmpeg mpegts muxer: '%s'] " format, \ +#define do_log(level, format, ...) \ + blog(level, "[obs-ffmpeg mpegts muxer: '%s']: " format, \ obs_output_get_name(stream->output), ##__VA_ARGS__) #define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__) @@ -151,7 +151,7 @@ static bool create_video_stream(struct ffmpeg_output *stream, const char *name = data->config.video_encoder; const AVCodecDescriptor *codec = avcodec_descriptor_get_by_name(name); if (!codec) { - error("Couldn't find codec '%s'\n", name); + error("Couldn't find codec '%s'", name); return false; } if (!new_stream(data, &data->video, name)) @@ -239,7 +239,7 @@ static bool create_audio_stream(struct ffmpeg_output *stream, const AVCodecDescriptor *codec = avcodec_descriptor_get_by_name(name); if (!codec) { - warn("Couldn't find codec '%s'\n", name); + warn("Couldn't find codec '%s'", name); return false; } @@ -327,14 +327,14 @@ static inline int connect_mpegts_url(struct ffmpeg_output *stream, bool is_rist) const char *url = stream->ff_data.config.url; if (!ff_network_init()) { ffmpeg_mpegts_log_error(LOG_ERROR, &stream->ff_data, - "Can not initialize network."); + "Couldn't initialize network"); return AVERROR(EIO); } URLContext *uc = av_mallocz(sizeof(URLContext) + strlen(url) + 1); if (!uc) { ffmpeg_mpegts_log_error(LOG_ERROR, &stream->ff_data, - "Can not allocate memory."); + "Couldn't allocate memory"); goto fail; } uc->url = (char *)url; @@ -344,7 +344,7 @@ static inline int connect_mpegts_url(struct ffmpeg_output *stream, bool is_rist) : av_mallocz(sizeof(SRTContext)); if (!uc->priv_data) { ffmpeg_mpegts_log_error(LOG_ERROR, &stream->ff_data, - "Can not allocate memory."); + "Couldn't allocate memory"); goto fail; } /* For SRT, pass streamid & passphrase; for RIST, pass passphrase, username @@ -458,9 +458,9 @@ static inline int open_output_file(struct ffmpeg_output *stream, "=", " ", 0))) { ffmpeg_mpegts_log_error( LOG_WARNING, data, - "Failed to parse protocol settings: %s\n%s", - av_err2str(ret), - data->config.protocol_settings); + "Failed to parse protocol settings: %s, %s", + data->config.protocol_settings, + av_err2str(ret)); av_dict_free(&dict); return OBS_OUTPUT_INVALID_STREAM; @@ -494,7 +494,7 @@ static inline int open_output_file(struct ffmpeg_output *stream, ret = avio_open2(&data->output->pb, data->config.url, AVIO_FLAG_WRITE, NULL, &dict); } else { - info("[ffmpeg mpegts muxer:] Invalid protocol: %s", + info("[ffmpeg mpegts muxer]: Invalid protocol: %s", data->config.url); return OBS_OUTPUT_BAD_PATH; } @@ -502,7 +502,7 @@ static inline int open_output_file(struct ffmpeg_output *stream, if (ret < 0) { if ((rist || srt) && (ret == OBS_OUTPUT_CONNECT_FAILED || ret == OBS_OUTPUT_INVALID_STREAM)) { - error("failed to open the url or invalid stream"); + error("Failed to open the url or invalid stream"); } else { ffmpeg_mpegts_log_error(LOG_WARNING, data, "Couldn't open '%s', %s", @@ -527,7 +527,7 @@ static inline int open_output_file(struct ffmpeg_output *stream, dstr_catf(&str, "\n\t%s=%s", entry->key, entry->value); - info("[ffmpeg mpegts muxer:]Invalid protocol settings: %s", + info("[ffmpeg mpegts muxer]: Invalid protocol settings: %s", str.array); dstr_free(&str); } @@ -535,7 +535,7 @@ static inline int open_output_file(struct ffmpeg_output *stream, } else { ret = allocate_custom_aviocontext(stream, rist); if (ret < 0) { - info("Couldn't allocate custom avio_context for rist or srt'%s', %s\n", + info("Couldn't allocate custom avio_context for url: '%s', %s", data->config.url, av_err2str(ret)); return OBS_OUTPUT_INVALID_STREAM; } @@ -591,7 +591,7 @@ static void close_mpegts_url(struct ffmpeg_output *stream, bool is_rist) avio_context_free(&stream->s); if (err) - info("[ffmpeg mpegts muxer:] Error closing URL %s", + info("[ffmpeg mpegts muxer]: Error closing URL %s", stream->ff_data.config.url); } @@ -665,7 +665,7 @@ bool ffmpeg_mpegts_data_init(struct ffmpeg_output *stream, "Couldn't set output format to mpegts"); goto fail; } else { - info("info: Output format name and long_name: %s, %s\n", + info("Output format name and long_name: %s, %s", output_format->name ? output_format->name : "unknown", output_format->long_name ? output_format->long_name : "unknown"); @@ -897,7 +897,8 @@ static bool set_config(struct ffmpeg_output *stream) obs_to_ffmpeg_video_format(video_output_get_format(video)); if (config.format == AV_PIX_FMT_NONE) { - blog(LOG_DEBUG, "invalid pixel format used for mpegts output"); + blog(LOG_WARNING, + "Invalid pixel format used for mpegts output"); return false; } @@ -1012,7 +1013,7 @@ static bool set_config(struct ffmpeg_output *stream) } code = open_output_file(stream, ff_data); if (code != 0) { - error("failed to open the url"); + error("Failed to open the url"); goto fail; } av_dump_format(ff_data->output, 0, NULL, 1); @@ -1026,7 +1027,7 @@ static bool set_config(struct ffmpeg_output *stream) if (ret != 0) { ffmpeg_mpegts_log_error( LOG_WARNING, &stream->ff_data, - "ffmpeg_output_start: failed to create write " + "ffmpeg_output_start: Failed to create write " "thread."); code = OBS_OUTPUT_ERROR; goto fail; @@ -1156,7 +1157,7 @@ void mpegts_write_packet(struct ffmpeg_output *stream, packet->data = av_memdup(encpacket->data, (int)encpacket->size); if (packet->data == NULL) { - error("couldn't allocate packet data"); + error("Couldn't allocate packet data"); goto fail; } packet->size = (int)encpacket->size; @@ -1184,8 +1185,8 @@ static bool write_header(struct ffmpeg_output *stream, struct ffmpeg_data *data) " ", 0))) { ffmpeg_mpegts_log_error( LOG_WARNING, data, - "Failed to parse muxer settings: %s\n%s", - av_err2str(ret), data->config.muxer_settings); + "Failed to parse muxer settings: %s, %s", + data->config.muxer_settings, av_err2str(ret)); av_dict_free(&dict); return false; @@ -1222,7 +1223,7 @@ static bool write_header(struct ffmpeg_output *stream, struct ffmpeg_data *data) AV_DICT_IGNORE_SUFFIX))) dstr_catf(&str, "\n\t%s=%s", entry->key, entry->value); - info("[ffmpeg mpegts muxer:] Invalid mpegts muxer settings: %s", + info("[ffmpeg mpegts muxer]: Invalid mpegts muxer settings: %s", str.array); dstr_free(&str); } @@ -1240,12 +1241,12 @@ static void ffmpeg_mpegts_data(void *data, struct encoder_packet *packet) if (get_extradata(stream)) { stream->got_headers = true; } else { - warn("failed to retrieve headers"); + warn("Failed to retrieve headers"); code = OBS_OUTPUT_INVALID_STREAM; goto fail; } if (!write_header(stream, ff_data)) { - error("failed to write headers"); + error("Failed to write headers"); code = OBS_OUTPUT_INVALID_STREAM; goto fail; } diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-rist.h b/plugins/obs-ffmpeg/obs-ffmpeg-rist.h index f6a7bf655..41e8bd337 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-rist.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-rist.h @@ -113,7 +113,7 @@ static int librist_close(URLContext *h) ret = rist_destroy(s->ctx); if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : failed to close properly %s\n", + "[obs-ffmpeg mpegts muxer / librist]: Failed to close properly %s", h->url); return -1; } @@ -128,11 +128,15 @@ static int cb_stats(void *arg, const struct rist_stats *stats_container) rist_log(&s->logging_settings, RIST_LOG_INFO, "%s\n", stats_container->stats_json); if (stats_container->stats_type == RIST_STATS_SENDER_PEER) { + blog(LOG_INFO, "---------------------------------"); blog(LOG_DEBUG, - "[obs-ffmpeg mpegts muxer / librist] RIST STATS\n\n" - "bandwidth [%.3f Mbps]\npackets sent [%llu]\npkts received [%llu]\n" - "pkts retransmitted [%llu]\nquality (pkt sent over sent+retransmitted+skipped) [%.2f] \n" - "rtt [%" PRIu32 " ms]\n\n", + "[obs-ffmpeg mpegts muxer / librist]: Session Summary\n" + "\tbandwidth [%.3f Mbps]\n" + "\tpackets sent [%lu]\n" + "\tpkts received [%lu]\n" + "\tpkts retransmitted [%lu]\n" + "\tquality (pkt sent over sent+retransmitted+skipped) [%.2f]\n" + "\trtt [%" PRIu32 " ms]\n", (double)(stats_container->stats.sender_peer.bandwidth) / 1000000.0, stats_container->stats.sender_peer.sent, @@ -166,12 +170,12 @@ static int librist_open(URLContext *h, const char *uri) NULL); if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : Failed to initialize logging settings."); + "[obs-ffmpeg mpegts muxer / librist]: Failed to initialize logging settings"); return OBS_OUTPUT_CONNECT_FAILED; } blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / librist] : \n librist version %s & API = %s .", + "[obs-ffmpeg mpegts muxer / librist]: libRIST version: %s, API: %s", librist_version(), librist_api_version()); h->max_packet_size = s->packet_size; @@ -179,14 +183,14 @@ static int librist_open(URLContext *h, const char *uri) if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : failed to create a sender \n"); + "[obs-ffmpeg mpegts muxer / librist]: Failed to create a sender"); goto err; } ret = rist_peer_config_defaults_set(peer_config); if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : failed to set peer config defaults.\n"); + "[obs-ffmpeg mpegts muxer / librist]: Failed to set peer config defaults"); goto err; } @@ -198,7 +202,7 @@ static int librist_open(URLContext *h, const char *uri) #endif if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : failed to parse the url %s\n", + "[obs-ffmpeg mpegts muxer / librist]: Failed to parse url: %s", uri); librist_close(h); return OBS_OUTPUT_INVALID_STREAM; @@ -208,7 +212,7 @@ static int librist_open(URLContext *h, const char *uri) ((peer_config->key_size == 128 || peer_config->key_size == 256) && !peer_config->secret[0])) { blog(LOG_ERROR, - "secret is mandatory if encryption is enabled\n"); + "[obs-ffmpeg mpegts muxer / librist]: Secret is mandatory if encryption is enabled"); librist_close(h); return OBS_OUTPUT_INVALID_STREAM; } @@ -234,22 +238,20 @@ static int librist_open(URLContext *h, const char *uri) ret = rist_peer_create(s->ctx, &s->peer, &s->peer_config); if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : failed to create a peer. \n"); + "[obs-ffmpeg mpegts muxer / librist]: Failed to create a peer."); goto err; } ret = rist_start(s->ctx); if (ret < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / librist] : rist failed to start \n"); + "[obs-ffmpeg mpegts muxer / librist]: RIST failed to start"); goto err; } if (rist_stats_callback_set(s->ctx, s->statsinterval, cb_stats, - (void *)s) == -1) { + (void *)s) == -1) rist_log(&s->logging_settings, RIST_LOG_ERROR, - "Could not enable stats callback\n"); - ; - } + "Could not enable stats callback"); return 0; err: @@ -271,7 +273,7 @@ static int librist_write(URLContext *h, const uint8_t *buf, int size) ret = rist_sender_data_write(s->ctx, &data_block); if (ret < 0) { blog(LOG_WARNING, - "[obs-ffmpeg mpegts muxer / librist] : failed to send data of size %i bytes", + "[obs-ffmpeg mpegts muxer / librist]: Failed to send %i bytes", size); return risterr2ret(ret); } diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h index 6eca21776..416476173 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h @@ -83,7 +83,7 @@ static int libsrt_neterrno(URLContext *h) SRTContext *s = (SRTContext *)h->priv_data; int os_errno; int err = srt_getlasterror(&os_errno); - blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt] : %s\n", + blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt]: %s", srt_getlasterror_str()); if (err == SRT_EASYNCRCV || err == SRT_EASYNCSND) return AVERROR(EAGAIN); @@ -91,10 +91,10 @@ static int libsrt_neterrno(URLContext *h) int errj = srt_getrejectreason(s->fd); if (errj == SRT_REJ_BADSECRET) blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Wrong password"); + "[obs-ffmpeg mpegts muxer / libsrt]: Wrong password"); else blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Connection rejected, %s", + "[obs-ffmpeg mpegts muxer / libsrt]: Connection rejected, %s", srt_rejectreason_str(errj)); } @@ -106,7 +106,7 @@ static int libsrt_getsockopt(URLContext *h, SRTSOCKET fd, SRT_SOCKOPT optname, { if (srt_getsockopt(fd, 0, optname, optval, optlen) < 0) { blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / libsrt] : failed to get option %s on socket: %s\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Failed to get option %s on socket: %s", optnamestr, srt_getlasterror_str()); return AVERROR(EIO); } @@ -157,11 +157,11 @@ static int libsrt_network_wait_fd(URLContext *h, int eid, int write) if (reason == SRT_REJ_BADSECRET || reason == SRT_REJ_UNSECURE) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Connection rejected, wrong password"); + "[obs-ffmpeg mpegts muxer / libsrt]: Connection rejected, wrong password"); return OBS_OUTPUT_INVALID_STREAM; } else { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Connection rejected, %s", + "[obs-ffmpeg mpegts muxer / libsrt]: Connection rejected, %s", srt_rejectreason_str(reason)); } } @@ -216,7 +216,7 @@ static int libsrt_listen(int eid, SRTSOCKET fd, const struct sockaddr *addr, if (srt_setsockopt(fd, SOL_SOCKET, SRTO_REUSEADDR, &reuse, sizeof(reuse))) { blog(LOG_WARNING, - "[obs-ffmpeg mpegts muxer / libsrt] : setsockopt(SRTO_REUSEADDR) failed\n"); + "[obs-ffmpeg mpegts muxer / libsrt]: setsockopt(SRTO_REUSEADDR) failed"); } if (srt_bind(fd, addr, addrlen)) return libsrt_neterrno(h); @@ -234,12 +234,12 @@ static int libsrt_listen(int eid, SRTSOCKET fd, const struct sockaddr *addr, return libsrt_neterrno(h); if (libsrt_socket_nonblock(ret, 1) < 0) blog(LOG_DEBUG, - "[obs-ffmpeg mpegts muxer / libsrt] : libsrt_socket_nonblock failed\n"); + "[obs-ffmpeg mpegts muxer / libsrt]: libsrt_socket_nonblock failed"); if (!libsrt_getsockopt(h, ret, SRTO_STREAMID, "SRTO_STREAMID", streamid, &streamid_len)) /* Note: returned streamid_len doesn't count the terminating null character */ blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / libsrt] : accept streamid [%s], length %d\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Accept streamid [%s], length %d", streamid, streamid_len); return ret; @@ -259,11 +259,11 @@ static int libsrt_listen_connect(int eid, SRTSOCKET fd, if (ret < 0) { if (will_try_next) { blog(LOG_WARNING, - "[obs-ffmpeg mpegts muxer / libsrt] : Connection to %s failed (%s), trying next address\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Connection to %s failed (%s), trying next address", h->url, av_err2str(ret)); } else { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Connection to %s failed: %s\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Connection to %s failed: %s", h->url, av_err2str(ret)); } } @@ -276,7 +276,7 @@ static int libsrt_setsockopt(URLContext *h, SRTSOCKET fd, SRT_SOCKOPT optname, { if (srt_setsockopt(fd, 0, optname, optval, optlen) < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : failed to set option %s on socket: %s\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Failed to set option %s on socket: %s", optnamestr, srt_getlasterror_str()); return AVERROR(EIO); } @@ -460,7 +460,7 @@ static int libsrt_setup(URLContext *h, const char *uri) return AVERROR(EINVAL); if (port <= 0 || port >= 65536) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Port missing in uri\n"); + "[obs-ffmpeg mpegts muxer / libsrt]: Port missing in uri"); return OBS_OUTPUT_CONNECT_FAILED; } p = strchr(uri, '?'); @@ -483,7 +483,7 @@ static int libsrt_setup(URLContext *h, const char *uri) ret = getaddrinfo(hostname[0] ? hostname : NULL, portstr, &hints, &ai); if (ret) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : Failed to resolve hostname %s: %s\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Failed to resolve hostname %s: %s", hostname, gai_strerror(ret)); return OBS_OUTPUT_CONNECT_FAILED; } @@ -516,7 +516,7 @@ restart: } if (libsrt_socket_nonblock(fd, 1) < 0) blog(LOG_DEBUG, - "[obs-ffmpeg mpegts muxer / libsrt] : libsrt_socket_nonblock failed\n"); + "[obs-ffmpeg mpegts muxer / libsrt]: libsrt_socket_nonblock failed"); ret = write_eid = libsrt_epoll_create(h, fd, 1); if (ret < 0) @@ -633,11 +633,11 @@ static int libsrt_open(URLContext *h, const char *uri) if (srt_startup() < 0) { blog(LOG_ERROR, - "[obs-ffmpeg mpegts muxer / libsrt] : libsrt failed to load.\n"); + "[obs-ffmpeg mpegts muxer / libsrt]: libsrt failed to load"); return OBS_OUTPUT_CONNECT_FAILED; } else { blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / libsrt] : libsrt v.%s loaded.\n", + "[obs-ffmpeg mpegts muxer / libsrt]: libsrt version %s loaded", SRT_VERSION_STRING); } libsrt_set_defaults(s); @@ -825,8 +825,8 @@ static int libsrt_write(URLContext *h, const uint8_t *buf, int size) #endif if (time > (s->time + 60.0)) { srt_bistats(s->fd, &perf, 0, 1); - blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / libsrt] : rtt [%.2f ms], link bandwidth [%.1f Mbps]\n", + blog(LOG_DEBUG, + "[obs-ffmpeg mpegts muxer / libsrt]: RTT [%.2f ms], Link Bandwidth [%.1f Mbps]", perf.msRTT, perf.mbpsBandwidth); s->time = time; } @@ -845,11 +845,14 @@ static int libsrt_close(URLContext *h) /* Log stream stats. */ SRT_TRACEBSTATS perf; srt_bstats(s->fd, &perf, 1); + blog(LOG_INFO, "---------------------------------"); blog(LOG_INFO, - "[obs-ffmpeg mpegts muxer / libsrt] : Stream stats\n\n" - "time elapsed [%.1f sec]\nmean speed [%.1f Mbp]\n" - "total bytes sent [%.1f MB]\nbytes retransmitted [%.1f %%]\n" - "bytes dropped [%.1f %%]\n\n", + "[obs-ffmpeg mpegts muxer / libsrt]: Session Summary\n" + "\ttime elapsed [%.1f sec]\n" + "\tmean speed [%.1f Mbp]\n" + "\ttotal bytes sent [%.1f MB]\n" + "\tbytes retransmitted [%.1f %%]\n" + "\tbytes dropped [%.1f %%]\n", (double)perf.msTimeStamp / 1000.0, perf.mbpsSendRate, (double)perf.byteSentTotal / 1000000.0, perf.byteSentTotal @@ -862,13 +865,14 @@ static int libsrt_close(URLContext *h) srt_epoll_release(s->eid); int err = srt_close(s->fd); if (err < 0) { - blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt] : %s\n", + blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt]: %s", srt_getlasterror_str()); return -1; } srt_cleanup(); - blog(LOG_INFO, "[obs-ffmpeg mpegts muxer / libsrt] : closing srt"); + blog(LOG_INFO, + "[obs-ffmpeg mpegts muxer / libsrt]: SRT connection closed"); return 0; }