[FFmpeg-devel] "OPW Qualification: Enable daemon mode for FFserver"

Binathi Bingi binti179 at gmail.com
Mon Oct 27 18:14:06 CET 2014


Hi there,

I am Binathi, applying for FOSS OPW Round 9, for contributing to FFmpeg.

As a part of my qualification task, I had been working on bug " #3731 open
defect ffserver daemon mode " [https://trac.ffmpeg.org/ticket/3731]

I changed two files and uploaded them onto my git repository [
https://github.com/Binathi/ffserver] to allow ffserver run in daemon mode
in ffmpeg 2.4.2 version

After making changes, you should do (from within your ffmpeg source code
directory)
[1]
./configure (Required, if you haven't done this before)
make ffserver
[2] copy ffserver.conf to /some/place/else/ and then do
 "./ffserver -f /some/place/else/ffserver.conf" to start a new ffserver
instance running in daemon mode


Patch to ffserver.conf, 2 insertions

# '-' is the standard output.
CustomLog -

+# Suppress that if you don't want to launch ffserver as a daemon.
+Daemon

#######################################################

Patch to ffserver.c 2 deletions, 22 insertions

static int ffserver_debug;
+static int ffserver_daemon;
static int no_launch;
.............
if (resolve_host(&my_http_addr.sin_addr, arg) != 0) {
ERROR("%s:%d: Invalid host/IP address: %s\n", arg);}
}
-+else if (!av_strcasecmp(cmd, "Daemon")) {
+ffserver_daemon = 1;
-WARNING("NoDaemon option has no effect, you should remove it\n");
} else if (!av_strcasecmp(cmd, "RTSPPort")) {
.................
static void opt_debug(void)
{
ffserver_debug = 1;
+ffserver_daemon = 1;
logfilename[0] = '-';
................
int main(int argc, char **argv)
{
    struct sigaction sigact = { { 0 } };
    int ret = 0;
    +ffserver_daemon = 0;
    config_filename = av_strdup("/etc/ffserver.conf");
.................
    compute_bandwidth();
    +if(ffserver_daemon){
    +int ffserver_id = 0;
    +pid_t sid = 0;

    +ffserver_id = fork(); // Create child process

    +if (ffserver_id < 0){
        +printf("fork failed!\n"); //Indication of failure
        +exit(1);    }

    +if(ffserver_id > 0){ //Parent process need to kill
       +exit(0);    }

    +sid = setsid(); //set new session
    +if(sid < 0){
        +exit(1); //return failure   }

    +open ("/dev/null", O_RDWR);

    +if (strcmp(logfilename, "-") != 0) {
                +close(1);        }
    }
    /* signal init */
    signal(SIGPIPE, SIG_IGN);
    +if (ffserver_daemon)
        +chdir("/");
    if (http_server() < 0) {
............
}


Cheers,
Binathi

"living with taking zero risks is extremely risky!" - Robert Sharma


More information about the ffmpeg-devel mailing list