Hello I tried to include the changes specified by Nicholas. We can switch between both Daemon and NoDaemon mode, using the option in ffserver.conf file.
>From 018f8c1e1acf062a9e6a3ec94f671d574ec4b712 Mon Sep 17 00:00:00 2001 From: Binathi <binti...@gmail.com> Date: Fri, 31 Oct 2014 23:27:20 +0530 Subject: [PATCH] Enable Daemon mode for FFServer Signed-off-by: Binathi <binti...@gmail.com> --- doc/ffserver.conf | 4 ++++ doc/ffserver.texi | 7 +++++-- ffserver.c | 31 +++++++++++++++++++++++++++++-- ffserver_config.c | 7 +++++-- ffserver_config.h | 1 + 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/doc/ffserver.conf b/doc/ffserver.conf index b756961..eac088b 100644 --- a/doc/ffserver.conf +++ b/doc/ffserver.conf @@ -25,6 +25,10 @@ MaxBandwidth 1000 # '-' is the standard output. CustomLog - +# Suppress Daemon if you don't want to launch ffserver in daemon mode. +#NoDaemon +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..15dc4b3 100644 --- a/doc/ffserver.texi +++ b/doc/ffserver.texi @@ -406,8 +406,11 @@ 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. +@command{ffserver} will always work in daemon mode. + +@ Daemon +Set daemon mode. +@command{ffserver} will always work in daemon mode. To enable no-daemon mode, suppress this and enable NoDaemon. @end table @section Feed section diff --git a/ffserver.c b/ffserver.c index ea2a2ae..d6eb0b4 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), "-"); } @@ -3736,10 +3737,36 @@ int main(int argc, char **argv) build_feed_streams(); compute_bandwidth(); - + + if (config.ffserver_daemon) { + int ffserver_id = 0; + pid_t sid = 0; + + ffserver_id = fork(); + + if (ffserver_id < 0) { + av_log(NULL, AV_LOG_WARNING, "Fork failed!Couldn't launch ffserver in daemon mode.\n"); + exit(1); + } + + if (ffserver_id > 0) { + exit(0); + } + + sid = setsid(); + if (sid < 0) { + exit(1); + } + + open ("/dev/null", O_RDWR); + + if (strcmp(config.logfilename, "-") != 0) { + close(1); + } + } /* signal init */ signal(SIGPIPE, SIG_IGN); - + if (http_server() < 0) { http_log("Could not start server\n"); exit(1); diff --git a/ffserver_config.c b/ffserver_config.c index e44cdf7..f46d8f4 100644 --- a/ffserver_config.c +++ b/ffserver_config.c @@ -358,8 +358,11 @@ 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") || !av_strcasecmp(cmd, "NoDaemon")) { + if (!av_strcasecmp(cmd, "Daemon")) + config->ffserver_daemon = 1; + if (!av_strcasecmp(cmd, "NoDaemon")) + config->ffserver_daemon = 0; } 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 Binathi. On Thu, Oct 30, 2014 at 8:41 PM, Reynaldo H. Verdejo Pinochet < reyna...@osg.samsung.com> wrote: > Hello > > On 10/30/2014 10:50 AM, Nicolas George wrote: > > [..] Third, I do not think this exact version is correct. If you > > make the daemon mode the default, then NoDaemon must not be > > ignored, it must have its specified effect: turn daemon off; if you > > do not make the daemon mode the default, then there must be an > > option to turn it on. > > > > IMHO, the best is to have both Daemon and NoDaemon mode. [..] > > I would prefer no-deamon mode been the default to not > break current behavior till deamon-mode has had a good > deal of production testing. I also think having a single > Daemonize yes/no toggle should be enough but I'm OK > either way in the context of this patch. > > Binathi: As an added bonus, try adding an -s to your > commit command line so you get the Signed-off-by: > line added, this is customary. > > Bests, > > -- > Reynaldo H. Verdejo Pinochet > Open Source Group > Samsung Research America / Silicon Valley > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel