Browse Source

obs-ffmpeg: Improve RIST/SRT log messages

Overall improvements to match behavior of other log sources.
tt2468 2 years ago
parent
commit
24d7bea41f

+ 26 - 25
plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c

@@ -31,8 +31,8 @@
 #include <libavutil/mastering_display_metadata.h>
 
 /* ------------------------------------------------------------------------- */
-#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;
 		}

+ 20 - 18
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);
 	}

+ 29 - 25
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;
 }