Message ID | 1522386549-16614-1-git-send-email-vdixit@akamai.com |
---|---|
State | New |
Headers | show |
> On 30 Mar 2018, at 13:09, vdixit@akamai.com wrote: > > From: Vishwanath Dixit <vdixit@akamai.com> > > --- > doc/muxers.texi | 9 +++++++++ > libavformat/hlsenc.c | 16 +++++++++------- > 2 files changed, 18 insertions(+), 7 deletions(-) > > diff --git a/doc/muxers.texi b/doc/muxers.texi > index 0d9ecef..a651a49 100644 > --- a/doc/muxers.texi > +++ b/doc/muxers.texi > @@ -977,6 +977,15 @@ Use persistent HTTP connections. Applicable only for HTTP output. > @item timeout > Set timeout for socket I/O operations. Applicable only for HTTP output. > > +@item -ignore_nw_error @var{ignore_nw_error} > +Enable (1) or disable (0) ignoring the following non-fatal network errors during > +muxing. Applicable only for HTTP output. > +@example > +EPIPE - Broken pipe > +ECONNREFUSED - Connection refused > +ECONNRESET - Connection reset by peer > +@end example > + > @end table > > @anchor{ico} > diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c > index 334720f..f6de326 100644 > --- a/libavformat/hlsenc.c > +++ b/libavformat/hlsenc.c > @@ -225,6 +225,7 @@ typedef struct HLSContext { > AVIOContext *m3u8_out; > AVIOContext *sub_m3u8_out; > int64_t timeout; > + int ignore_nw_err; > } HLSContext; > > static int mkdir_p(const char *path) { > @@ -2247,7 +2248,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) > ret = flush_dynbuf(vs, &range_length); > if (ret < 0) { > av_free(old_filename); > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > vs->size = range_length; > } else { > @@ -2255,12 +2256,12 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) > if (ret < 0) { > av_log(s, AV_LOG_ERROR, "Failed to open file '%s'\n", > vs->avf->url); > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > write_styp(vs->out); > ret = flush_dynbuf(vs, &range_length); > if (ret < 0) { > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > ff_format_io_close(s, &vs->out); > } > @@ -2277,7 +2278,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) > vs->duration = 0; > if (ret < 0) { > av_free(old_filename); > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > } > > @@ -2308,12 +2309,12 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) > av_free(old_filename); > > if (ret < 0) { > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > > if (!vs->fmp4_init_mode || byterange_mode) > if ((ret = hls_window(s, 0, vs)) < 0) { > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > } > > @@ -2321,7 +2322,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) > if (oc->pb) > ret = ff_write_chained(oc, stream_index, pkt, s, 0); > > - return ret; > + return av_handle_error(s, ret, hls->ignore_nw_err); > } > > static int hls_write_trailer(struct AVFormatContext *s) > @@ -2835,6 +2836,7 @@ static const AVOption options[] = { > {"master_pl_publish_rate", "Publish master play list every after this many segment intervals", OFFSET(master_publish_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, UINT_MAX, E}, > {"http_persistent", "Use persistent HTTP connections", OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E }, > {"timeout", "set timeout for socket I/O operations", OFFSET(timeout), AV_OPT_TYPE_DURATION, { .i64 = -1 }, -1, INT_MAX, .flags = E }, > + { "ignore_nw_error", "Ignores any non-fatal network errors during muxing", OFFSET(ignore_nw_err), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E }, > { NULL }, > }; > > -- > 1.9.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel LGTM Thanks Steven
diff --git a/doc/muxers.texi b/doc/muxers.texi index 0d9ecef..a651a49 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -977,6 +977,15 @@ Use persistent HTTP connections. Applicable only for HTTP output. @item timeout Set timeout for socket I/O operations. Applicable only for HTTP output. +@item -ignore_nw_error @var{ignore_nw_error} +Enable (1) or disable (0) ignoring the following non-fatal network errors during +muxing. Applicable only for HTTP output. +@example +EPIPE - Broken pipe +ECONNREFUSED - Connection refused +ECONNRESET - Connection reset by peer +@end example + @end table @anchor{ico} diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 334720f..f6de326 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -225,6 +225,7 @@ typedef struct HLSContext { AVIOContext *m3u8_out; AVIOContext *sub_m3u8_out; int64_t timeout; + int ignore_nw_err; } HLSContext; static int mkdir_p(const char *path) { @@ -2247,7 +2248,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) ret = flush_dynbuf(vs, &range_length); if (ret < 0) { av_free(old_filename); - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } vs->size = range_length; } else { @@ -2255,12 +2256,12 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) { av_log(s, AV_LOG_ERROR, "Failed to open file '%s'\n", vs->avf->url); - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } write_styp(vs->out); ret = flush_dynbuf(vs, &range_length); if (ret < 0) { - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } ff_format_io_close(s, &vs->out); } @@ -2277,7 +2278,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) vs->duration = 0; if (ret < 0) { av_free(old_filename); - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } } @@ -2308,12 +2309,12 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) av_free(old_filename); if (ret < 0) { - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } if (!vs->fmp4_init_mode || byterange_mode) if ((ret = hls_window(s, 0, vs)) < 0) { - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } } @@ -2321,7 +2322,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (oc->pb) ret = ff_write_chained(oc, stream_index, pkt, s, 0); - return ret; + return av_handle_error(s, ret, hls->ignore_nw_err); } static int hls_write_trailer(struct AVFormatContext *s) @@ -2835,6 +2836,7 @@ static const AVOption options[] = { {"master_pl_publish_rate", "Publish master play list every after this many segment intervals", OFFSET(master_publish_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, UINT_MAX, E}, {"http_persistent", "Use persistent HTTP connections", OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E }, {"timeout", "set timeout for socket I/O operations", OFFSET(timeout), AV_OPT_TYPE_DURATION, { .i64 = -1 }, -1, INT_MAX, .flags = E }, + { "ignore_nw_error", "Ignores any non-fatal network errors during muxing", OFFSET(ignore_nw_err), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E }, { NULL }, };
From: Vishwanath Dixit <vdixit@akamai.com> --- doc/muxers.texi | 9 +++++++++ libavformat/hlsenc.c | 16 +++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-)