[FFmpeg-devel] [PATCH 4/8] avformat/utils: function to check and ignore non fatal network errors

vdixit at akamai.com vdixit at akamai.com
Fri Mar 30 08:08:34 EEST 2018


From: Vishwanath Dixit <vdixit at akamai.com>

For live HLS/DASH output usecases, currently ffmpeg application exits
for any network error during muxing. However, some of the errors like
EPIPE, ECONNREFUSED and ECONNRESET are non-fatal. They might cause
temporary disruption. However, muxer can recover and continue further
processing.
---
 libavformat/internal.h | 11 +++++++++++
 libavformat/utils.c    | 10 ++++++++++
 2 files changed, 21 insertions(+)

diff --git a/libavformat/internal.h b/libavformat/internal.h
index a020b1b..e56f867 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -731,6 +731,17 @@ int ff_unlock_avformat(void);
  */
 void ff_format_set_url(AVFormatContext *s, char *url);
 
+/**
+ * Handle error.
+ * Ignores network errors EPIPE, ECONNREFUSED and ECONNRESET
+ *
+ * @param s AVFormatContext
+ * @param err error code
+ * @param ignore_nw_err flag to ignore network errors
+ * @return 0 if error is ignored, else err
+ */
+int av_handle_error(AVFormatContext *s, int err, int ignore_nw_err);
+
 #if FF_API_NEXT
 /**
   * Register devices in deprecated format linked list.
diff --git a/libavformat/utils.c b/libavformat/utils.c
index f13c820..a942ad0 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -5658,3 +5658,13 @@ FF_DISABLE_DEPRECATION_WARNINGS
 FF_ENABLE_DEPRECATION_WARNINGS
 #endif
 }
+
+int av_handle_error(AVFormatContext *s, int err, int ignore_nw_err) {
+    if (err && ff_is_http_proto(s->url) && ignore_nw_err &&
+        (err == AVERROR(EPIPE) || err == AVERROR(ECONNREFUSED) ||
+         err == AVERROR(ECONNRESET))) {
+        av_log(s, AV_LOG_WARNING, "Ignored network error %d\n", err);
+        return 0;
+    }
+    return err;
+}
-- 
1.9.1



More information about the ffmpeg-devel mailing list