From b36338853ae7d7a5fb6b22fd52d887d6eeeba043 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 18 Mar 2014 15:13:25 +0800 Subject: [PATCH] refine the conf files, rename srs.conf to demo.conf --- README.md | 2 +- .../conf/{srs.19350.conf => demo.19350.conf} | 0 trunk/conf/demo.conf | 145 +++ trunk/conf/full.conf | 657 ++++++++++++++ trunk/conf/srs.conf | 845 ------------------ trunk/scripts/_step.start.srs.19350.sh | 6 +- trunk/scripts/_step.start.srs.sh | 6 +- trunk/scripts/stop.sh | 8 +- 8 files changed, 813 insertions(+), 856 deletions(-) rename trunk/conf/{srs.19350.conf => demo.19350.conf} (100%) create mode 100644 trunk/conf/demo.conf create mode 100644 trunk/conf/full.conf diff --git a/README.md b/README.md index 672702379..e469d455a 100755 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ cd simple-rtmp-server/trunk Step 2: build SRS, Requires Centos6.x/Ubuntu12 32/64bits, others see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/Build)
-./configure --with-ssl --without-hls --without-ffmpeg --without-http && make
+./configure --with-ssl --without-hls --without-ffmpeg --without-http-callback && make
 
Step 3: start SRS
diff --git a/trunk/conf/srs.19350.conf b/trunk/conf/demo.19350.conf
similarity index 100%
rename from trunk/conf/srs.19350.conf
rename to trunk/conf/demo.19350.conf
diff --git a/trunk/conf/demo.conf b/trunk/conf/demo.conf
new file mode 100644
index 000000000..d02491ae3
--- /dev/null
+++ b/trunk/conf/demo.conf
@@ -0,0 +1,145 @@
+listen              1935;
+chunk_size          60000;
+log_dir             ./objs/logs;
+max_connections     2000;
+
+vhost __defaultVhost__ {
+    enabled         on;
+    gop_cache       on;
+}
+
+vhost bandcheck.srs.com {
+    enabled         on;
+    chunk_size      65000;
+    bandcheck {
+        enabled         on;
+        key             "35c9b402c12a7246868752e2878f7e0e";
+        interval        30;
+        limit_kbps      4000;
+    }
+}
+
+vhost demo.srs.com {
+    chunk_size      60000;
+    enabled         on;
+    gop_cache       on;
+    queue_length    30;
+    forward         127.0.0.1:19350;
+    bandcheck {
+        enabled         off;
+    }
+    hls {
+        enabled         on;
+        hls_path        ./objs/nginx/html;
+        hls_fragment    5;
+        hls_window      30;
+    }
+    http_hooks {
+        enabled         on;
+        on_connect      http://127.0.0.1:8085/api/v1/clients;
+        on_close        http://127.0.0.1:8085/api/v1/clients;
+        on_publish      http://127.0.0.1:8085/api/v1/streams;
+        on_unpublish    http://127.0.0.1:8085/api/v1/streams;
+        on_play         http://127.0.0.1:8085/api/v1/sessions;
+        on_stop         http://127.0.0.1:8085/api/v1/sessions;
+    }
+    transcode {
+        enabled         on;
+        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
+        engine ld {
+            enabled         on;
+            vfilter {
+                vf                  'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontsize=30:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        1;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine sd {
+            enabled         on;
+            vfilter {
+                vf                  'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2';
+            }
+            vcodec          libx264;
+            vbitrate        500;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        1;
+            vprofile        main;
+            vpreset         fast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        40;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+
+vhost players {
+    enabled         on;
+    gop_cache       on;
+    transcode {
+        enabled         on;
+        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
+        engine hls {
+            enabled         on;
+            vfilter {
+                vf                  'drawtext=text=SRS(SimpleRtmpServer):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        1;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+                g           100;
+            }
+            acodec          libaacplus;
+            abitrate        30;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=players_pub/[stream];
+        }
+    }
+}
+
+vhost players_pub {
+    hls {
+        enabled         on;
+        hls_path        ./objs/nginx/html;
+        hls_fragment    5;
+        hls_window      30;
+    }
+}
+
+vhost players_pub_rtmp {
+    gop_cache       off;
+    hls {
+        enabled         off;
+    }
+}
diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf
new file mode 100644
index 000000000..daf2d2fe6
--- /dev/null
+++ b/trunk/conf/full.conf
@@ -0,0 +1,657 @@
+# 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%.
+# default: 60000
+chunk_size          60000;
+# the logs dir.
+# if enabled ffmpeg, each stracoding stream will create a log file.
+# default: ./objs/logs
+log_dir             ./objs/logs;
+# the max connections.
+# if exceed the max connections, server will drop the new connection.
+# default: 2000
+max_connections     2000;
+# vhost list, the __defaultVhost__ is the default vhost
+# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream.
+# for which cannot identify the required vhost.
+vhost __defaultVhost__ {
+    enabled         on;
+    gop_cache       on;
+}
+
+# vhost for bandwidth check
+# generally, the bandcheck vhost must be: bandcheck.srs.com,
+# or need to modify the vhost of client.
+vhost bandcheck.srs.com {
+    enabled         on;
+    chunk_size      65000;
+    # bandwidth check config.
+    bandcheck {
+        # whether support bandwidth check,
+        # default: off.
+        enabled         on;
+        # the key for server to valid,
+        # if invalid key, server disconnect and abort the bandwidth check.
+        key             "35c9b402c12a7246868752e2878f7e0e";
+        # the interval in seconds for bandwidth check,
+        # server donot allow new test request.
+        # default: 30
+        interval        30;
+        # the max available check bandwidth in kbps.
+        # to avoid attack of bandwidth check.
+        # default: 1000
+        limit_kbps      4000;
+    }
+}
+
+# set the chunk size of vhost.
+vhost chunksize.vhost.com {
+    # the default chunk size is 128, max is 65536,
+    # some client does not support chunk size change,
+    # vhost chunk size will override the global value.
+    # default: global chunk size.
+    chunk_size      128;
+}
+
+# the http hook callback vhost, srs will invoke the hooks for specified events.
+vhost hooks.callback.vhost.com {
+    http_hooks {
+        # whether the http hooks enalbe.
+        # default off.
+        enabled         on;
+        # when client connect to vhost/app, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_connect",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "pageUrl": "http://www.test.com/live.html"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_connect http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_connect      http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
+        # when client close/disconnect to vhost/app/stream, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_close",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_close http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_close        http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
+        # when client(encoder) publish to vhost/app/stream, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_publish",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_publish http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_publish      http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
+        # when client(encoder) stop publish to vhost/app/stream, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_unpublish",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_unpublish http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_unpublish    http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
+        # when client start to play vhost/app/stream, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_play",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_play http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_play         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
+        # when client stop to play vhost/app/stream, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_stop",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream"
+        #       }
+        # if valid, the hook must return HTTP code 200(Stauts OK) and response
+        # an int value specifies the error code(0 corresponding to success):
+        #       0
+        # support multiple api hooks, format:
+        #       on_stop http://xxx/api0 http://xxx/api1 http://xxx/apiN
+        on_stop         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
+    }
+}
+
+# the mirror filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction
+vhost mirror.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine mirror {
+            enabled         on;
+            vfilter {
+                vf                  'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# the drawtext filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#drawtext-1
+vhost drawtext.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine drawtext {
+            enabled         on;
+            vfilter {
+                vf                  'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# the crop filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#crop
+vhost crop.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine crop {
+            enabled         on;
+            vfilter {
+                vf                  'crop=in_w-20:in_h-160:10:80';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# the logo filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#overlay
+vhost logo.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine logo {
+            enabled         on;
+            vfilter {
+                i               ./doc/ffmpeg-logo.png;
+                filter_complex      'overlay=10:10';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# audio transcode only.
+# for example, FMLE publish audio codec in mp3, and donot support HLS output,
+# we can transcode the audio to aac and copy video to the new stream with HLS.
+vhost audio.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine acodec {
+            enabled         on;
+            vcodec          copy;
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# ffmpeg-copy(forward implements by ffmpeg).
+# copy the video and audio to a new stream.
+vhost copy.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine copy {
+            enabled         on;
+            vcodec          copy;
+            acodec          copy;
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# 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.
+        # default: off.
+        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 ffsuper {
+            # whether the engine is enabled
+            # default: off.
+            enabled         on;
+            # ffmpeg filters, follows the main input.
+            vfilter {
+                # the logo input file.
+                i               ./doc/ffmpeg-logo.png;
+                # the ffmpeg complex filter.
+                # for filters, @see: http://ffmpeg.org/ffmpeg-filters.html
+                filter_complex      'overlay=10:10';
+            }
+            # video encoder name. can be:
+            # libx264: use h.264(libx264) video encoder.
+            # copy: donot encoder the video stream, copy it.
+            vcodec          libx264;
+            # video bitrate, in kbps
+            vbitrate        1500;
+            # video framerate.
+            vfps            25;
+            # video width, must be even numbers.
+            vwidth          768;
+            # video height, must be even numbers.
+            vheight         320;
+            # 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 {
+                # ffmpeg options, @see: http://ffmpeg.org/ffmpeg.html
+                t               100;
+                # 264 params, @see: http://ffmpeg.org/ffmpeg-codecs.html#libx264
+                coder           1;
+                b_strategy      2;
+                bf              3;
+                refs            10;
+            }
+            # audio encoder name. can be:
+            # libaacplus: use aac(libaacplus) audio encoder.
+            # copy: donot encoder the audio stream, copy it.
+            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 {
+                # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders
+                profile:a   aac_low;
+            }
+            # output stream. variables:
+            # [vhost] the input stream vhost.
+            # [port] the intput stream port.
+            # [app] the input stream app.
+            # [stream] the input stream name.
+            # [engine] the tanscode engine name.
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine ffhd {
+            enabled         on;
+            vcodec          libx264;
+            vbitrate        1200;
+            vfps            25;
+            vwidth          1382;
+            vheight         576;
+            vthreads        6;
+            vprofile        main;
+            vpreset         medium;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        70;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine ffsd {
+            enabled         on;
+            vcodec          libx264;
+            vbitrate        800;
+            vfps            25;
+            vwidth          1152;
+            vheight         480;
+            vthreads        4;
+            vprofile        main;
+            vpreset         fast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        60;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine fffast {
+            enabled     on;
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine vcopy {
+            enabled     on;
+            vcodec          copy;
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine acopy {
+            enabled     on;
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          copy;
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+        engine copy {
+            enabled     on;
+            vcodec          copy;
+            acodec          copy;
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# transcode all stream using the empty ffmpeg demo, donothing.
+vhost ffempty.transcode.vhost.com {
+    transcode {
+        enabled     on;
+        ffmpeg ./objs/research/ffempty;
+        engine empty {
+            enabled         on;
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        2;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libaacplus;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# 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 {
+            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 {
+            enabled     off;
+        }
+    }
+}
+
+# the vhost which forward publish streams.
+vhost same.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}
+    # or specify the vhost by params, @see: change.vhost.forward.vhost.com
+    # if vhost not specified, use the request vhost instead.
+    forward         127.0.0.1:1936 127.0.0.1:1937;
+}
+# TODO: FIXME: change the forward schema with vhost.
+# [plan] the vhost which forward publish streams to other vhosts.
+vhost change.vhost.forward.vhost.com {
+    forward         127.0.0.1:1936 127.0.0.1:1937 {
+        # specify the vhost to override the vhost in client request.
+        vhost       forward2.vhost.com;
+        # specify the refer(pageUrl) to override the refer in client request.
+        refer       http://srs/index.html;
+    }
+    forward         127.0.0.1:1938 {
+        vhost       forward3.vhost.com;
+    }
+}
+
+# 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 with-hls.vhost.com {
+    hls {
+        # whether the hls is enabled.
+        # if off, donot write hls(ts and m3u8) when publish.
+        # default: off
+        enabled         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 {
+    hls {
+        # whether the hls is enabled.
+        # if off, donot write hls(ts and m3u8) when publish.
+        # default: off
+        enabled         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 max live queue length in seconds.
+    # if the messages in the queue exceed the max length, 
+    # drop the old whole gop.
+    # default: 30
+    queue_length    10;
+}
+
+# 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;
+    # shared print interval for all encoders, in milliseconds.
+    # if not specified, set to 2000.
+    encoder        3000;
+    # shared print interval for all hls, in milliseconds.
+    # if not specified, set to 2000.
+    hls            3000;
+}
diff --git a/trunk/conf/srs.conf b/trunk/conf/srs.conf
index eaeb4712d..7d97f914c 100644
--- a/trunk/conf/srs.conf
+++ b/trunk/conf/srs.conf
@@ -1,848 +1,3 @@
-# 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%.
-# default: 60000
-chunk_size          60000;
-# the logs dir.
-# if enabled ffmpeg, each stracoding stream will create a log file.
-# default: ./objs/logs
-log_dir             ./objs/logs;
-# the max connections.
-# if exceed the max connections, server will drop the new connection.
-# default: 2000
-max_connections     2000;
-# vhost list, the __defaultVhost__ is the default vhost
-# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream.
-# for which cannot identify the required vhost.
 vhost __defaultVhost__ {
-    enabled         on;
-    gop_cache       on;
 }
-
-# vhost for bandwidth check
-# generally, the bandcheck vhost must be: bandcheck.srs.com,
-# or need to modify the vhost of client.
-vhost bandcheck.srs.com {
-    enabled         on;
-    chunk_size      65000;
-    # bandwidth check config.
-    bandcheck {
-        # whether support bandwidth check,
-        # default: off.
-        enabled         on;
-        # the key for server to valid,
-        # if invalid key, server disconnect and abort the bandwidth check.
-        key             "35c9b402c12a7246868752e2878f7e0e";
-        # the interval in seconds for bandwidth check,
-        # server donot allow new test request.
-        # default: 30
-        interval        30;
-        # the max available check bandwidth in kbps.
-        # to avoid attack of bandwidth check.
-        # default: 1000
-        limit_kbps      4000;
-    }
-}
-
-# set the chunk size of vhost.
-vhost chunksize.vhost.com {
-    # the default chunk size is 128, max is 65536,
-    # some client does not support chunk size change,
-    # vhost chunk size will override the global value.
-    # default: global chunk size.
-    chunk_size      128;
-}
-
-# the http hook callback vhost, srs will invoke the hooks for specified events.
-vhost hooks.callback.vhost.com {
-    http_hooks {
-        # whether the http hooks enalbe.
-        # default off.
-        enabled         on;
-        # when client connect to vhost/app, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_connect",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
-        #           "pageUrl": "http://www.test.com/live.html"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_connect http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_connect      http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
-        # when client close/disconnect to vhost/app/stream, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_close",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_close http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_close        http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
-        # when client(encoder) publish to vhost/app/stream, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_publish",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
-        #           "stream": "livestream"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_publish http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_publish      http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
-        # when client(encoder) stop publish to vhost/app/stream, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_unpublish",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
-        #           "stream": "livestream"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_unpublish http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_unpublish    http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
-        # when client start to play vhost/app/stream, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_play",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
-        #           "stream": "livestream"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_play http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_play         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
-        # when client stop to play vhost/app/stream, call the hook,
-        # the request in the POST data string is a object encode by json:
-        #       {
-        #           "action": "on_stop",
-        #           "client_id": 1985,
-        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
-        #           "stream": "livestream"
-        #       }
-        # if valid, the hook must return HTTP code 200(Stauts OK) and response
-        # an int value specifies the error code(0 corresponding to success):
-        #       0
-        # support multiple api hooks, format:
-        #       on_stop http://xxx/api0 http://xxx/api1 http://xxx/apiN
-        on_stop         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
-    }
-}
-
-# the mirror filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction
-vhost mirror.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine mirror {
-            enabled         on;
-            vfilter {
-                vf                  'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# the drawtext filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#drawtext-1
-vhost drawtext.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine drawtext {
-            enabled         on;
-            vfilter {
-                vf                  'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# the crop filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#crop
-vhost crop.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine crop {
-            enabled         on;
-            vfilter {
-                vf                  'crop=in_w-20:in_h-160:10:80';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# the logo filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#overlay
-vhost logo.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine logo {
-            enabled         on;
-            vfilter {
-                i               ./doc/ffmpeg-logo.png;
-                filter_complex      'overlay=10:10';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# audio transcode only.
-# for example, FMLE publish audio codec in mp3, and donot support HLS output,
-# we can transcode the audio to aac and copy video to the new stream with HLS.
-vhost audio.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine acodec {
-            enabled         on;
-            vcodec          copy;
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# ffmpeg-copy(forward implements by ffmpeg).
-# copy the video and audio to a new stream.
-vhost copy.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine copy {
-            enabled         on;
-            vcodec          copy;
-            acodec          copy;
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# 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.
-        # default: off.
-        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 ffsuper {
-            # whether the engine is enabled
-            # default: off.
-            enabled         on;
-            # ffmpeg filters, follows the main input.
-            vfilter {
-                # the logo input file.
-                i               ./doc/ffmpeg-logo.png;
-                # the ffmpeg complex filter.
-                # for filters, @see: http://ffmpeg.org/ffmpeg-filters.html
-                filter_complex      'overlay=10:10';
-            }
-            # video encoder name. can be:
-            # libx264: use h.264(libx264) video encoder.
-            # copy: donot encoder the video stream, copy it.
-            vcodec          libx264;
-            # video bitrate, in kbps
-            vbitrate        1500;
-            # video framerate.
-            vfps            25;
-            # video width, must be even numbers.
-            vwidth          768;
-            # video height, must be even numbers.
-            vheight         320;
-            # 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 {
-                # ffmpeg options, @see: http://ffmpeg.org/ffmpeg.html
-                t               100;
-                # 264 params, @see: http://ffmpeg.org/ffmpeg-codecs.html#libx264
-                coder           1;
-                b_strategy      2;
-                bf              3;
-                refs            10;
-            }
-            # audio encoder name. can be:
-            # libaacplus: use aac(libaacplus) audio encoder.
-            # copy: donot encoder the audio stream, copy it.
-            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 {
-                # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders
-                profile:a   aac_low;
-            }
-            # output stream. variables:
-            # [vhost] the input stream vhost.
-            # [port] the intput stream port.
-            # [app] the input stream app.
-            # [stream] the input stream name.
-            # [engine] the tanscode engine name.
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine ffhd {
-            enabled         on;
-            vcodec          libx264;
-            vbitrate        1200;
-            vfps            25;
-            vwidth          1382;
-            vheight         576;
-            vthreads        6;
-            vprofile        main;
-            vpreset         medium;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        70;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine ffsd {
-            enabled         on;
-            vcodec          libx264;
-            vbitrate        800;
-            vfps            25;
-            vwidth          1152;
-            vheight         480;
-            vthreads        4;
-            vprofile        main;
-            vpreset         fast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        60;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine fffast {
-            enabled     on;
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine vcopy {
-            enabled     on;
-            vcodec          copy;
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine acopy {
-            enabled     on;
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          copy;
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine copy {
-            enabled     on;
-            vcodec          copy;
-            acodec          copy;
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# transcode all stream using the empty ffmpeg demo, donothing.
-vhost ffempty.transcode.vhost.com {
-    transcode {
-        enabled     on;
-        ffmpeg ./objs/research/ffempty;
-        engine empty {
-            enabled         on;
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        2;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# 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 {
-            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 {
-            enabled     off;
-        }
-    }
-}
-
-# the vhost which forward publish streams.
-vhost same.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}
-    # or specify the vhost by params, @see: change.vhost.forward.vhost.com
-    # if vhost not specified, use the request vhost instead.
-    forward         127.0.0.1:1936 127.0.0.1:1937;
-}
-# TODO: FIXME: change the forward schema with vhost.
-# [plan] the vhost which forward publish streams to other vhosts.
-vhost change.vhost.forward.vhost.com {
-    forward         127.0.0.1:1936 127.0.0.1:1937 {
-        # specify the vhost to override the vhost in client request.
-        vhost       forward2.vhost.com;
-        # specify the refer(pageUrl) to override the refer in client request.
-        refer       http://srs/index.html;
-    }
-    forward         127.0.0.1:1938 {
-        vhost       forward3.vhost.com;
-    }
-}
-
-# 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 with-hls.vhost.com {
-    hls {
-        # whether the hls is enabled.
-        # if off, donot write hls(ts and m3u8) when publish.
-        # default: off
-        enabled         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 {
-    hls {
-        # whether the hls is enabled.
-        # if off, donot write hls(ts and m3u8) when publish.
-        # default: off
-        enabled         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 max live queue length in seconds.
-    # if the messages in the queue exceed the max length, 
-    # drop the old whole gop.
-    # default: 30
-    queue_length    10;
-}
-
-# 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;
-    # shared print interval for all encoders, in milliseconds.
-    # if not specified, set to 2000.
-    encoder        3000;
-    # shared print interval for all hls, in milliseconds.
-    # if not specified, set to 2000.
-    hls            3000;
-}
-# vhost list, the __defaultVhost__ is the default vhost
-# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream.
-# for which cannot identify the required vhost.
-# for default demo.
-vhost demo.srs.com {
-    chunk_size      60000;
-    enabled         on;
-    gop_cache       on;
-    queue_length    30;
-    forward         127.0.0.1:19350;
-    bandcheck {
-        enabled         off;
-    }
-    hls {
-        enabled         on;
-        hls_path        ./objs/nginx/html;
-        hls_fragment    5;
-        hls_window      30;
-    }
-    http_hooks {
-        enabled         on;
-        on_connect      http://127.0.0.1:8085/api/v1/clients;
-        on_close        http://127.0.0.1:8085/api/v1/clients;
-        on_publish      http://127.0.0.1:8085/api/v1/streams;
-        on_unpublish    http://127.0.0.1:8085/api/v1/streams;
-        on_play         http://127.0.0.1:8085/api/v1/sessions;
-        on_stop         http://127.0.0.1:8085/api/v1/sessions;
-    }
-    transcode {
-        enabled         on;
-        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
-        engine ld {
-            enabled         on;
-            vfilter {
-                vf                  'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontsize=30:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        1;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine sd {
-            enabled         on;
-            vfilter {
-                vf                  'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2';
-            }
-            vcodec          libx264;
-            vbitrate        500;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        1;
-            vprofile        main;
-            vpreset         fast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        40;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-# for the players site, to play or publish.
-# the flash player publisher need to transcode to support hls,
-# we add players_hls vhost to support it.
-vhost players {
-    enabled         on;
-    gop_cache       on;
-    transcode {
-        enabled         on;
-        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
-        engine hls {
-            enabled         on;
-            vfilter {
-                vf                  'drawtext=text=SRS(SimpleRtmpServer):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf';
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        1;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-                g           100;
-            }
-            acodec          libaacplus;
-            abitrate        30;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=players_pub/[stream];
-        }
-    }
-}
-vhost players_pub {
-    hls {
-        enabled         on;
-        hls_path        ./objs/nginx/html;
-        hls_fragment    5;
-        hls_window      30;
-    }
-}
-# rtmp only, no hls, for chat(low latecy)
-vhost players_pub_rtmp {
-    gop_cache       off;
-    hls {
-        enabled         off;
-    }
-}
-
-# for development
-vhost dev {
-    enabled         on;
-    gop_cache       on;
-    queue_length    10;
-    #forward         127.0.0.1:19350;
-    hls {
-        enabled         off;
-        hls_path        ./objs/nginx/html;
-        hls_fragment    5;
-        hls_window      30;
-    }
-    http_hooks {
-        enabled         off;
-        on_connect      http://127.0.0.1:8085/api/v1/clients;
-        on_close        http://127.0.0.1:8085/api/v1/clients;
-        on_publish      http://127.0.0.1:8085/api/v1/streams;
-        on_unpublish    http://127.0.0.1:8085/api/v1/streams;
-        on_play         http://127.0.0.1:8085/api/v1/sessions;
-        on_stop         http://127.0.0.1:8085/api/v1/sessions;
-    }
-    transcode {
-        enabled     off;
-        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
-        engine dev {
-            enabled         on;
-            vfilter {
-            }
-            vcodec          libx264;
-            vbitrate        300;
-            vfps            20;
-            vwidth          768;
-            vheight         320;
-            vthreads        1;
-            vprofile        baseline;
-            vpreset         superfast;
-            vparams {
-            }
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-        engine dev_acodec {
-            enabled         on;
-            vcodec          copy;
-            acodec          libaacplus;
-            abitrate        45;
-            asample_rate    44100;
-            achannels       2;
-            aparams {
-            }
-            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
-        }
-    }
-}
-
-
diff --git a/trunk/scripts/_step.start.srs.19350.sh b/trunk/scripts/_step.start.srs.19350.sh
index 352506bb2..08edb591b 100755
--- a/trunk/scripts/_step.start.srs.19350.sh
+++ b/trunk/scripts/_step.start.srs.19350.sh
@@ -2,10 +2,10 @@
 src_dir='src'
 if [[ ! -d $src_dir ]]; then echo "错误:必须在src同目录执行脚本"; exit 1; fi
 
-cmd="nohup ./objs/srs -c conf/srs.19350.conf > ./objs/logs/srs.19350.log 2>&1 &"
+cmd="nohup ./objs/srs -c conf/demo.19350.conf > ./objs/logs/demo.19350.log 2>&1 &"
 echo "启动SRS转发服务器:$cmd"
-pids=`ps aux|grep srs|grep "./objs"|grep "srs.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
-nohup ./objs/srs -c conf/srs.19350.conf > ./objs/logs/srs.19350.log 2>&1 &
+pids=`ps aux|grep srs|grep "./objs"|grep "demo.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
+nohup ./objs/srs -c conf/demo.19350.conf > ./objs/logs/demo.19350.log 2>&1 &
 ret=$?; if [[ 0 -ne $ret ]]; then echo "错误:启动SRS转发服务器失败"; exit $ret; fi
 
 echo "启动SRS转发服务器成功"
diff --git a/trunk/scripts/_step.start.srs.sh b/trunk/scripts/_step.start.srs.sh
index de49a2064..bab8ceaf9 100755
--- a/trunk/scripts/_step.start.srs.sh
+++ b/trunk/scripts/_step.start.srs.sh
@@ -2,10 +2,10 @@
 src_dir='src'
 if [[ ! -d $src_dir ]]; then echo "错误:必须在src同目录执行脚本"; exit 1; fi
 
-cmd="nohup ./objs/srs -c conf/srs.conf >./objs/logs/srs.log 2>&1 &"
+cmd="nohup ./objs/srs -c conf/demo.conf >./objs/logs/demo.log 2>&1 &"
 echo "启动SRS服务器:$cmd"
-pids=`ps aux|grep srs|grep "./objs"|grep "srs.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
-nohup ./objs/srs -c conf/srs.conf >./objs/logs/srs.log 2>&1 &
+pids=`ps aux|grep srs|grep "./objs"|grep "demo.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
+nohup ./objs/srs -c conf/demo.conf >./objs/logs/demo.log 2>&1 &
 ret=$?; if [[ 0 -ne $ret ]]; then echo "错误:启动SRS失败"; exit $ret; fi
 
 echo "启动SRS服务器成功"
diff --git a/trunk/scripts/stop.sh b/trunk/scripts/stop.sh
index 2c456471f..83ffe832f 100755
--- a/trunk/scripts/stop.sh
+++ b/trunk/scripts/stop.sh
@@ -1,12 +1,12 @@
 #!/bin/bash
 
 echo "停止SRS服务器"
-ps aux|grep srs|grep "./objs"|grep "srs.conf"
-pids=`ps aux|grep srs|grep "./objs"|grep "srs.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
+ps aux|grep srs|grep "./objs"|grep "demo.conf"
+pids=`ps aux|grep srs|grep "./objs"|grep "demo.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
 
 echo "停止SRS转发服务器"
-ps aux|grep srs|grep "./objs"|grep "srs.19350.conf"
-pids=`ps aux|grep srs|grep "./objs"|grep "srs.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
+ps aux|grep srs|grep "./objs"|grep "demo.19350.conf"
+pids=`ps aux|grep srs|grep "./objs"|grep "demo.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done
 
 # step 4(optinal): start nginx for HLS 
 echo "停止NGINX(HLS服务)"