# the listen ports, split by space.
listen              1935;
# the default chunk size is 128, max is 65536,
# some client does not support chunk size change,
# however, most clients supports it and it can improve 
# performance about 10%.
# if not specified, set to 4096.
chunk_size          65000;
# vhost list, the __defaultVhost__ is the default vhost
# for which cannot identify the required vhost.
vhost __defaultVhost__ {
    enabled         on;
    gop_cache       on;
    hls             on;
    hls_path        ./objs/nginx/html;
    hls_fragment    5;
    hls_window      30;
    #forward         127.0.0.1:1936;
    transcode {
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine fd{
            enabled         on;
            vcodec          libx264;
            vbitrate        300;
            vfps            20;
            vwidth          480;
            vheight         320;
            vthreads        2;
            vprofile        baseline;
            vpreset         superfast;
            vparams {}
            acodec          libaacplus;
            abitrate        30;
            asample_rate    22050;
            achannels       2;
            aparams {}
            output          rtmp://[vhost]:[port]/[app]/[stream]_fast;
        }
    }
}
# transcode all app and stream of vhost
vhost all.transcode.vhost.com {
    # the streaming transcode configs.
    transcode {
        # whether the transcode enabled.
        # if off, donot transcode.
        enabled     on;
        # the ffmpeg 
        ffmpeg ./objs/ffmpeg/bin/ffmpeg;
        # the transcode engine for matched stream.
        # all matched stream will transcoded to the following stream.
        # the transcode set name(ie. hd) is optional and not used.
        engine super{
            # whether the engine is enabled
            enabled         on;
            # video encoder name
            vcodec          libx264;
            # video bitrate, in kbps
            vbitrate        1500;
            # video framerate.
            vfps            25;
            # video width, must be even numbers.
            vwidth          1280;
            # video height, must be even numbers.
            vheight         720;
            # the max threads for ffmpeg to used.
            vthreads        12;
            # x264 profile, @see x264 -help, can be:
            # high,main,baseline
            vprofile        main;
            # x264 preset, @see x264 -help, can be: 
            # ultrafast,superfast,veryfast,faster,fast
            # medium,slow,slower,veryslow,placebo
            vpreset         medium;
            # other x264 or ffmpeg video params
            vparams {
            }
            # audio encoder name
            acodec          libaacplus;
            # audio bitrate, in kbps. [16, 72] for libaacplus.
            abitrate        70;
            # audio sample rate. for flv/rtmp, it must be:
            # 44100,22050,11025,5512
            asample_rate    44100;
            # audio channel, 1 for mono, 2 for stereo.
            achannels       2;
            # other ffmpeg audio params
            aparams {
            }
            # output stream. variables:
            # [vhost] the input stream vhost.
            # [port] the intput stream port.
            # [app] the input stream app.
            # [stream] the input stream name.
            output          rtmp://[vhost]:[port]/[app]/[stream]_super;
        }
        engine hd{
            enabled         on;
            vcodec          libx264;
            vbitrate        1200;
            vfps            25;
            vwidth          1024;
            vheight         576;
            vthreads        6;
            vprofile        main;
            vpreset         medium;
            vparams {
            }
            acodec          libaacplus;
            abitrate        70;
            asample_rate    44100;
            achannels       2;
            aparams {
            }
            output          rtmp://[vhost]:[port]/[app]/[stream]_hd;
        }
        engine sd{
            enabled         on;
            vcodec          libx264;
            vbitrate        800;
            vfps            25;
            vwidth          720;
            vheight         480;
            vthreads        4;
            vprofile        main;
            vpreset         fast;
            vparams {
            }
            acodec          libaacplus;
            abitrate        60;
            asample_rate    44100;
            achannels       2;
            aparams {
            }
            output          rtmp://[vhost]:[port]/[app]/[stream]_sd;
        }
        engine fast{
            enabled     on;
            vcodec          libx264;
            vbitrate        300;
            vfps            20;
            vwidth          480;
            vheight         320;
            vthreads        2;
            vprofile        baseline;
            vpreset         superfast;
            vparams {
            }
            acodec          libaacplus;
            abitrate        30;
            asample_rate    22050;
            achannels       2;
            aparams {
            }
            output          rtmp://[vhost]:[port]/[app]/[stream]_fast;
        }
    }
}
# transcode all app and stream of app
vhost app.transcode.vhost.com {
    # the streaming transcode configs.
    # if app specified, transcode all streams of app.
    transcode live {
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine fd{
            enabled     off;
        }
    }
}
# transcode specified stream.
vhost stream.transcode.vhost.com {
    # the streaming transcode configs.
    # if stream specified, transcode the matched stream.
    transcode live/livestream {
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine fd{
            enabled     off;
        }
    }
}
# the vhost which forward publish streams.
vhost forward.vhost.com {
    # forward all publish stream to the specified server.
    # this used to split/forward the current stream for cluster active-standby,
    # active-active for cdn to build high available fault tolerance system.
    # format: {ip}:{port} {ip_N}:{port_N}
    forward         127.0.0.1:1936 127.0.0.1:1937;
}
# the vhost disabled.
vhost removed.vhost.com {
    # whether the vhost is enabled.
    # if off, all request access denied.
    # default: on
    enabled         off;
}
# the vhost with hls specified.
vhost no-hls.vhost.com {
    # whether the hls is enabled.
    # if off, donot write hls(ts and m3u8) when publish.
    # default: on
    hls             on;
    # the hls output path.
    # the app dir is auto created under the hls_path.
    # for example, for rtmp stream:
    #   rtmp://127.0.0.1/live/livestream
    #   http://127.0.0.1/live/livestream.m3u8
    # where hls_path is /hls, srs will create the following files:
    #   /hls/live       the app dir for all streams.
    #   /hls/live/livestream.m3u8   the HLS m3u8 file.
    #   /hls/live/livestream-1.ts   the HLS media/ts file.
    # in a word, the hls_path is for vhost.
    # default: ./objs/nginx/html
    hls_path        /data/nginx/html;
    # the hls fragment in seconds, the duration of a piece of ts.
    # default: 10
    hls_fragment    10;
    # the hls window in seconds, the number of ts in m3u8.
    # default: 60
    hls_window      60;
}
# the vhost with hls disabled.
vhost no-hls.vhost.com {
    # whether the hls is enabled.
    # if off, donot write hls(ts and m3u8) when publish.
    # default: on
    hls             off;
}
# the vhost for min delay, donot cache any stream.
vhost min.delay.com {
    # whether cache the last gop.
    # if on, cache the last gop and dispatch to client,
    #   to enable fast startup for client, client play immediately.
    # if off, send the latest media data to client,
    #   client need to wait for the next Iframe to decode and show the video.
    # set to off if requires min delay;
    # set to on if requires client fast startup.
    # default: on
    gop_cache       off;
}
# the vhost for antisuck.
vhost refer.anti_suck.com {
    # the common refer for play and publish.
    # if the page url of client not in the refer, access denied.
    # if not specified this field, allow all.
    # default: not specified.
    refer           github.com github.io;
    # refer for publish clients specified.
    # the common refer is not overrided by this.
    # if not specified this field, allow all.
    # default: not specified.
    refer_publish   github.com github.io;
    # refer for play clients specified.
    # the common refer is not overrided by this.
    # if not specified this field, allow all.
    # default: not specified.
    refer_play      github.com github.io;
}
# config for the pithy print,
# which always print constant message specified by interval,
# whatever the clients in concurrency.
pithy_print {
    # shared print interval for all publish clients, in milliseconds.
    # if not specified, set to 1100.
    publish         2000;
    # shared print interval for all play clients, in milliseconds.
    # if not specified, set to 1300.
    play            3000;
    # shared print interval for all forwarders, in milliseconds.
    # if not specified, set to 2000.
    forwarder       3000;
}