Hi there,

Updated changes in the patch.
Please let me know if any further enhancements are required.

Thanks,

Binathi

On Wed, Nov 12, 2014 at 8:50 PM, Stefano Sabatini <stefa...@gmail.com>
wrote:

> On date Wednesday 2014-11-12 00:46:09 +0530, Binathi Bingi encoded:
> [...]
> > From 692fb9ee19d5f9acf080eb98d22ca15fa1176393 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.
>
> I'd replace this line with:
> # NoDaemon is the default.
>
> since "suppress" is very ambiguous.
>
> > +#Daemon
>
> [...]
>
> No more comments from me, thanks.
> --
> FFmpeg = Fostering and Fierce Majestic Powerful Extroverse Gladiator
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
From a7c6a1f74902b6df8e4cc62480e8fd6f023905c4 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..a10bd77 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.
+# NoDaemon is the default.
+#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..9938500 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.
+In daemon mode @command{ffserver} will fork in background upon
+starting, without the need to specify the "&" shell operator in the
+command line. In daemon mode also @command{ffserver} will continue to
+log on stdout, unlike in NoDaemon 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

Reply via email to