Hi there, Please find the attached patch with modifications.
Regards, Binathi On Mon, Nov 10, 2014 at 8:42 PM, Stefano Sabatini <stefa...@gmail.com> wrote: > On date Monday 2014-11-10 13:26:14 +0530, Binathi Bingi encoded: > [...] > > From c9d037758693a1522258a64849f7629d7cbd7408 Mon Sep 17 00:00:00 2001 > > From: Binathi <binti...@gmail.com> > > Provide complete name, the patch is used to track copyright. > > > Date: Tue, 4 Nov 2014 21:42:07 +0530 > > Subject: [PATCH] Restore Daemon mode in FFserver > > > > Signed-off-by: Binathi Bingi <binti...@gmail.com> > > --- > > doc/ffserver.conf | 5 +++++ > > doc/ffserver.texi | 7 ++++--- > > ffserver.c | 33 +++++++++++++++++++++++++++++++++ > > ffserver_config.c | 4 +++- > > ffserver_config.h | 1 + > > 5 files changed, 46 insertions(+), 4 deletions(-) > > > > diff --git a/doc/ffserver.conf b/doc/ffserver.conf > > index b756961..0b63555 100644 > > --- a/doc/ffserver.conf > > +++ b/doc/ffserver.conf > > @@ -25,6 +25,11 @@ MaxBandwidth 1000 > > # '-' is the standard output. > > CustomLog - > > > > > +# Suppress NoDaemon and enable Daemon, if you want to launch ffserver > in daemon mode. > > +# If no option is specified, default option is NoDaemon. > > +#NoDaemon > > +#Daemon > > Why NoDaemon followed by Daemon? This is confusing. > > > + > > ################################################################## > > # Definition of the live feeds. Each live feed contains one video > > # and/or audio sequence coming from an ffmpeg encoder or another > > diff --git a/doc/ffserver.texi b/doc/ffserver.texi > > index 77273d2..5d5fc0f 100644 > > --- a/doc/ffserver.texi > > +++ b/doc/ffserver.texi > > @@ -405,9 +405,10 @@ In case the commandline option @option{-d} is > specified this option is > > ignored, and the log is written to standard output. > > > > > @item NoDaemon > > -Set no-daemon mode. This option is currently ignored since now > > -@command{ffserver} will always work in no-daemon mode, and is > > -deprecated. > > +Set no-daemon mode. This is the default. > > It would be nice to provide a more lenghty explanation about the > daemon mode. Why is it useful? How does it differ with the NoDaemon > mode? Why and how is it useful? > > > + > > +@item Daemon > > > +Set daemon mode. The default is NoDaemon > > missing ending dot. > > > @end table > > > > @section Feed section > > diff --git a/ffserver.c b/ffserver.c > > index ea2a2ae..8b005b9 100644 > > --- a/ffserver.c > > +++ b/ffserver.c > > @@ -3671,6 +3671,7 @@ static void handle_child_exit(int sig) > > static void opt_debug(void) > > { > > config.debug = 1; > > + config.ffserver_daemon = 0; > > snprintf(config.logfilename, sizeof(config.logfilename), "-"); > > } > > > > @@ -3737,6 +3738,38 @@ int main(int argc, char **argv) > > > > compute_bandwidth(); > > > > + if (config.ffserver_daemon) { > > + pid_t ffserver_id = 0; > > + pid_t sid = 0; > > + int fd; > > + ffserver_id = fork(); > > + > > + if (ffserver_id < 0) { > > + ret = AVERROR(errno); > > + av_log(NULL, AV_LOG_ERROR, "Impossible to start in daemon > mode: %s\n", av_err2str(ret)); > > + exit(1); > > + } > > + > > + if (ffserver_id > 0) > > + exit(0); > > + > > + sid = setsid(); > > + if (sid < 0) > > + exit(1); > > + > > + fd = open("/dev/null", O_RDWR,0); > > + if (fd < 0) { > > + ret = AVERROR(errno); > > > + av_log(NULL, AV_LOG_ERROR, "Unable to repoen file > descriptors: %s\n", av_err2str(ret)); > > typo: repoen > > > + exit(1); > > + } > > + dup2(fd, 0); > > + dup2(fd, 2); > > > + if (strcmp(config.logfilename,"-") != 0) > > nit: logfilename,_"-" > > [...] > -- > FFmpeg = Fanciful Fabulous Mysterious Perennial Evil Generator > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
From 091b4a02c9325bea32b7f745d028ea72c8e1537e Mon Sep 17 00:00:00 2001 From: Binathi Bingi <binti...@gmail.com> Date: Tue, 4 Nov 2014 21:42:07 +0530 Subject: [PATCH] Restore Daemon mode in FFserver Signed-off-by: Binathi Bingi <binti...@gmail.com> Author: Binathi Bingi <binti...@gmail.com> --- doc/ffserver.conf | 4 ++++ doc/ffserver.texi | 11 +++++++---- ffserver.c | 34 ++++++++++++++++++++++++++++++++++ ffserver_config.c | 4 ++-- ffserver_config.h | 1 + 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/doc/ffserver.conf b/doc/ffserver.conf index b756961..a017b3c 100644 --- a/doc/ffserver.conf +++ b/doc/ffserver.conf @@ -25,6 +25,10 @@ MaxBandwidth 1000 # '-' is the standard output. CustomLog - +# Enable Daemon, to launch FFserver in Daemon mode. +# For NoDaemon mode, suppress Daemon. +#Daemon + ################################################################## # Definition of the live feeds. Each live feed contains one video # and/or audio sequence coming from an ffmpeg encoder or another diff --git a/doc/ffserver.texi b/doc/ffserver.texi index 77273d2..0c10c2f 100644 --- a/doc/ffserver.texi +++ b/doc/ffserver.texi @@ -404,10 +404,13 @@ If not specified @command{ffserver} will produce no log. In case the commandline option @option{-d} is specified this option is ignored, and the log is written to standard output. -@item NoDaemon -Set no-daemon mode. This option is currently ignored since now -@command{ffserver} will always work in no-daemon mode, and is -deprecated. +@item Daemon +Set Daemon mode. The default is NoDaemon. +Enabling Daemon mode would allow FFserver, at 2.4 level, fork in background +without "&" shell operator. It has logging capability to file, unlike in +NoDaemon mode, forks in background upon starting like any daemon and in +debug mode, it is prevented from forking, forcing foreground mode. + @end table @section Feed section diff --git a/ffserver.c b/ffserver.c index ea2a2ae..32b48ee 100644 --- a/ffserver.c +++ b/ffserver.c @@ -3671,6 +3671,7 @@ static void handle_child_exit(int sig) static void opt_debug(void) { config.debug = 1; + config.ffserver_daemon = 0; snprintf(config.logfilename, sizeof(config.logfilename), "-"); } @@ -3737,6 +3738,39 @@ int main(int argc, char **argv) compute_bandwidth(); + if (config.ffserver_daemon) { + pid_t ffserver_id = 0; + pid_t sid = 0; + int fd; + ffserver_id = fork(); + + if (ffserver_id < 0) { + ret = AVERROR(errno); + av_log(NULL, AV_LOG_ERROR, "Impossible to start in daemon mode: %s\n", av_err2str(ret)); + exit(1); + } + + if (ffserver_id > 0) + exit(0); + + sid = setsid(); + if (sid < 0) + exit(1); + + fd = open("/dev/null", O_RDWR,0); + + if (fd < 0) { + ret = AVERROR(errno); + av_log(NULL, AV_LOG_ERROR, "Unable to reopen file descriptors: %s\n", av_err2str(ret)); + exit(1); + } + dup2(fd, 0); + dup2(fd, 2); + if (strcmp(config.logfilename, "-") != 0) + dup2(fd, 1); + close(fd); + } + /* signal init */ signal(SIGPIPE, SIG_IGN); diff --git a/ffserver_config.c b/ffserver_config.c index e44cdf7..f0368c1 100644 --- a/ffserver_config.c +++ b/ffserver_config.c @@ -358,8 +358,8 @@ static int ffserver_parse_config_global(FFServerConfig *config, const char *cmd, ffserver_get_arg(arg, sizeof(arg), p); if (resolve_host(&config->http_addr.sin_addr, arg) != 0) ERROR("%s:%d: Invalid host/IP address: %s\n", arg); - } else if (!av_strcasecmp(cmd, "NoDaemon")) { - WARNING("NoDaemon option has no effect, you should remove it\n"); + } else if (!av_strcasecmp(cmd, "Daemon")){ + config->ffserver_daemon = 1; } else if (!av_strcasecmp(cmd, "RTSPPort")) { ffserver_get_arg(arg, sizeof(arg), p); val = atoi(arg); diff --git a/ffserver_config.h b/ffserver_config.h index 36d61d0..e3957b1 100644 --- a/ffserver_config.h +++ b/ffserver_config.h @@ -100,6 +100,7 @@ typedef struct FFServerConfig { unsigned int nb_max_http_connections; unsigned int nb_max_connections; uint64_t max_bandwidth; + int ffserver_daemon; int debug; char logfilename[1024]; struct sockaddr_in http_addr; -- 1.9.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel