diff --git b/conf/bandwidth.conf a/conf/bandwidth.conf
new file mode 100644
index 0000000..a0bf060
--- /dev/null
+++ a/conf/bandwidth.conf
@@ -0,0 +1,20 @@
+# bandwidth test tool config for srs.
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+}
+
+vhost bandcheck.srs.com {
+    enabled         on;
+    chunk_size      65000;
+    bandcheck {
+        enabled         on;
+        key             "35c9b402c12a7246868752e2878f7e0e";
+        interval        30;
+        limit_kbps      4000;
+    }
+}
diff --git b/conf/console.conf a/conf/console.conf
new file mode 100644
index 0000000..6814346
--- /dev/null
+++ a/conf/console.conf
@@ -0,0 +1,17 @@
+# no-daemon and write log to console config for srs.
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_api {
+    enabled         on;
+    listen          1985;
+}
+http_server {
+    enabled         on;
+    listen          8080;
+}
+vhost __defaultVhost__ {
+}
diff --git b/conf/demo.19350.conf a/conf/demo.19350.conf
new file mode 100644
index 0000000..a6dd3ef
--- /dev/null
+++ a/conf/demo.19350.conf
@@ -0,0 +1,22 @@
+# the config for srs demo
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleDemo
+# @see full.conf for detail config.
+
+listen              19350;
+max_connections     1000;
+daemon              on;
+srs_log_tank        file;
+srs_log_file        ./objs/srs.demo.19350.log;
+pid                 ./objs/srs.demo.19350.pid;
+
+vhost __defaultVhost__ {
+    enabled         on;
+    gop_cache       on;
+    hls {
+        enabled         on;
+        hls_path        ./objs/nginx/html/forward;
+        hls_fragment    5;
+        hls_window      30;
+    }
+}
+
diff --git b/conf/demo.conf a/conf/demo.conf
new file mode 100644
index 0000000..b6fb87a
--- /dev/null
+++ a/conf/demo.conf
@@ -0,0 +1,220 @@
+# the config for srs demo
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleDemo
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              on;
+srs_log_tank        file;
+srs_log_file        ./objs/srs.demo.log;
+pid                 ./objs/srs.demo.pid;
+
+chunk_size          60000;
+max_connections     2000;
+
+http_api {
+    enabled         on;
+    listen          1985;
+}
+
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+
+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 {
+                i               ./doc/srs-logo.png;
+                filter_complex      'overlay=10:10';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        1;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+            }
+            acodec          libfdk_aac;
+            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          libfdk_aac;
+            abitrate        40;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+    ingest {
+        enabled      on;
+        input {
+            type    file;
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine {
+            enabled          off;
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
+        }
+    }
+}
+
+vhost players {
+    enabled         on;
+    gop_cache       on;
+    transcode {
+        enabled         on;
+        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
+        engine hls {
+            enabled         on;
+            vfilter {
+                i               ./doc/srs-logo.png;
+                filter_complex      'overlay=10:10';
+            }
+            vcodec          libx264;
+            vbitrate        300;
+            vfps            20;
+            vwidth          768;
+            vheight         320;
+            vthreads        1;
+            vprofile        baseline;
+            vpreset         superfast;
+            vparams {
+                g           100;
+            }
+            acodec          libfdk_aac;
+            abitrate        30;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=players_pub/[stream];
+        }
+    }
+    ingest {
+        enabled      on;
+        input {
+            type    file;
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine {
+            enabled          off;
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/demo;
+        }
+    }
+}
+vhost players_pub {
+    hls {
+        enabled         on;
+        hls_path        ./objs/nginx/html;
+        hls_fragment    5;
+        hls_window      30;
+    }
+}
+
+vhost players_chat {
+    gop_cache       off;
+    hls {
+        enabled         off;
+    }
+    transcode {
+        enabled         on;
+        ffmpeg          ./objs/ffmpeg/bin/ffmpeg;
+        engine chat_hls {
+            enabled         on;
+            vfilter {
+            }
+            vcodec          libx264;
+            vbitrate        150;
+            vfps            15;
+            vwidth          576;
+            vheight         240;
+            vthreads        1;
+            vprofile        baseline;
+            vpreset         ultrafast;
+            vparams {
+                g           30;
+            }
+            acodec          an;
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=chat_hls/[stream];
+        }
+    }
+}
+vhost chat_hls {
+    hls {
+        enabled         on;
+        hls_path        ./objs/nginx/html;
+        hls_fragment    2;
+        hls_window      10;
+    }
+}
diff --git b/conf/dvr.path.conf a/conf/dvr.path.conf
new file mode 100644
index 0000000..c5951f0
--- /dev/null
+++ a/conf/dvr.path.conf
@@ -0,0 +1,18 @@
+# the config for srs to dvr in custom path.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DVR#custom-path
+# @see https://github.com/ossrs/srs/wiki/v2_EN_DVR#custom-path
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    dvr {
+        enabled             on;
+        dvr_path            ./objs/nginx/html/[app]/[stream]/[2006]/[01]/[02]/[15].[04].[05].[999].flv;
+        dvr_plan            segment;
+        dvr_duration        30;
+        dvr_wait_keyframe   on;
+    }
+}
diff --git b/conf/dvr.segment.conf a/conf/dvr.segment.conf
new file mode 100644
index 0000000..2265ad0
--- /dev/null
+++ a/conf/dvr.segment.conf
@@ -0,0 +1,17 @@
+# the config for srs to dvr in segment mode
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DVR
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    dvr {
+        enabled      on;
+        dvr_path     ./objs/nginx/html/[app]/[stream].[timestamp].flv;
+        dvr_plan     segment;
+        dvr_duration    30;
+        dvr_wait_keyframe       on;
+    }
+}
diff --git b/conf/dvr.session.conf a/conf/dvr.session.conf
new file mode 100644
index 0000000..8e8d893
--- /dev/null
+++ a/conf/dvr.session.conf
@@ -0,0 +1,15 @@
+# the config for srs to dvr in session mode
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DVR
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    dvr {
+        enabled      on;
+        dvr_path     ./objs/nginx/html/[app]/[stream].[timestamp].flv;
+        dvr_plan     session;
+    }
+}
diff --git b/conf/edge.conf a/conf/edge.conf
new file mode 100644
index 0000000..2a8662f
--- /dev/null
+++ a/conf/edge.conf
@@ -0,0 +1,13 @@
+# the config for srs origin-edge cluster
+# @see https://github.com/ossrs/srs/wiki/v1_CN_Edge
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+pid                 objs/edge.pid;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    mode            remote;
+    origin          127.0.0.1:19350;
+}
diff --git b/conf/edge.token.traverse.conf a/conf/edge.token.traverse.conf
new file mode 100644
index 0000000..bad2412
--- /dev/null
+++ a/conf/edge.token.traverse.conf
@@ -0,0 +1,13 @@
+# the config for srs for token traverse authentication
+# @see https://github.com/ossrs/srs/wiki/v1_CN_DRM
+# @see full.conf for detail config.
+
+listen              1935
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    mode            remote;
+    origin          127.0.0.1:19350;
+    token_traverse  on;
+}
diff --git b/conf/ffmpeg.transcode.conf a/conf/ffmpeg.transcode.conf
new file mode 100644
index 0000000..d785a44
--- /dev/null
+++ a/conf/ffmpeg.transcode.conf
@@ -0,0 +1,29 @@
+# the config for srs use ffmpeg to transcode
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleFFMPEG
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine ff {
+            enabled         on;
+            vfilter {
+            }
+            vcodec          libx264;
+            vthreads        4;
+            vprofile        main;
+            vpreset         medium;
+            vparams {
+            }
+            acodec          libfdk_aac;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
diff --git b/conf/forward.master.conf a/conf/forward.master.conf
new file mode 100644
index 0000000..5566caa
--- /dev/null
+++ a/conf/forward.master.conf
@@ -0,0 +1,14 @@
+# the config for srs to forward
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleForward
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+pid                 ./objs/srs.master.pid;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    forward         127.0.0.1:19350;
+#the forward destination server type,default true. if the server is not srs server,connect app maybe fail,try config as false 
+    forward_server_srs  true;
+}
diff --git b/conf/forward.slave.conf a/conf/forward.slave.conf
new file mode 100644
index 0000000..98286e3
--- /dev/null
+++ a/conf/forward.slave.conf
@@ -0,0 +1,11 @@
+# the config for srs to forward
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleForward
+# @see full.conf for detail config.
+
+listen              19350;
+max_connections     1000;
+pid                 ./objs/srs.slave.pid;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+}
diff --git b/conf/full.conf a/conf/full.conf
new file mode 100644
index 0000000..4edac7d
--- /dev/null
+++ a/conf/full.conf
@@ -0,0 +1,1467 @@
+# all config for srs
+
+#############################################################################################
+# RTMP sections
+#############################################################################################
+# the rtmp listen ports, split by space, each listen entry is <[ip:]port>
+# for example, 192.168.1.100:1935 10.10.10.100:1935
+# where the ip is optional, default to 0.0.0.0, that is 1935 equals to 0.0.0.0:1935
+listen              1935;
+# the pid file
+# to ensure only one process can use a pid file
+# and provides the current running process id, for script, 
+# for example, init.d script to manage the server.
+# default: ./objs/srs.pid
+pid                 ./objs/srs.pid;
+# 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.
+# /dev/null to disable the log.
+# default: ./objs
+ff_log_dir          ./objs;
+# the log tank, console or file.
+# if console, print log to console.
+# if file, write log to file. requires srs_log_file if log to file.
+# default: file.
+srs_log_tank        file;
+# the log level, for all log tanks.
+# can be: verbose, info, trace, warn, error
+# default: trace
+srs_log_level       trace;
+# when srs_log_tank is file, specifies the log file.
+# default: ./objs/srs.log
+srs_log_file        ./objs/srs.log;
+# the max connections.
+# if exceed the max connections, server will drop the new connection.
+# default: 1000
+max_connections     1000;
+# whether start as daemon
+# @remark: donot support reload.
+# default: on
+daemon              on;
+# whether use utc_time to generate the time struct,
+# if off, use localtime() to generate it,
+# if on, use gmtime() instead, which use UTC time.
+# default: off
+utc_time            off;
+
+# the work dir for server, to chdir(work_dir) when not empty or "./"
+# user can config this directory to change the dir.
+# @reamrk do not support reload.
+# default: ./
+work_dir ./;
+# whether quit when parent process changed,
+# used for supervisor mode(not daemon), srs should always quit when 
+# supervisor process exited.
+# @remark conflict with daemon, error when both daemon and asprocess are on.
+# @reamrk do not support reload.
+# default: off
+asprocess off;
+
+#############################################################################################
+# heartbeat/stats sections
+#############################################################################################
+# heartbeat to api server
+# @remark, the ip report to server, is retrieve from system stat,
+#       which need the config item stats.network.
+heartbeat {
+    # whether heartbeat is enalbed.
+    # default: off
+    enabled         off;
+    # the interval seconds for heartbeat,
+    # recommend 0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3,...,6,9,12,....
+    # default: 9.9
+    interval        9.3;
+    # when startup, srs will heartbeat to this api.
+    # @remark: must be a restful http api url, where SRS will POST with following data:
+    #   {
+    #       "device_id": "my-srs-device",
+    #       "ip": "192.168.1.100"
+    #   }
+    # default: http://127.0.0.1:8085/api/v1/servers
+    url             http://127.0.0.1:8085/api/v1/servers;
+    # the id of devide.
+    device_id       "my-srs-device";
+    # whether report with summaries
+    # if on, put /api/v1/summaries to the request data:
+    #   {
+    #       "summaries": summaries object.
+    #   }
+    # @remark: optional config.
+    # default: off
+    summaries       off;
+}
+
+# system statistics section.
+# the main cycle will retrieve the system stat,
+# for example, the cpu/mem/network/disk-io data,
+# the http api, for instance, /api/v1/summaries will show these data.
+# @remark the heartbeat depends on the network,
+#       for example, the eth0 maybe the device which index is 0.
+stats {
+    # the index of device ip.
+    # we may retrieve more than one network device.
+    # default: 0
+    network         0;
+    # the device name to stat the disk iops.
+    # ignore the device of /proc/diskstats if not configed.
+    disk            sda sdb xvda xvdb;
+}
+
+#############################################################################################
+# HTTP sections
+#############################################################################################
+# api of srs.
+# the http api config, export for external program to manage srs.
+# user can access http api of srs in browser directly, for instance, to access by:
+#       curl http://192.168.1.170:1985/api/v1/reload
+# which will reload srs, like cmd killall -1 srs, but the js can also invoke the http api,
+# where the cli can only be used in shell/terminate.
+http_api {
+    # whether http api is enabled.
+    # default: off
+    enabled         on;
+    # the http api listen entry is <[ip:]port>
+    # for example, 192.168.1.100:1985
+    # where the ip is optional, default to 0.0.0.0, that is 1985 equals to 0.0.0.0:1985
+    # default: 1985
+    listen          1985;
+    # whether enable crossdomain request.
+    # default: on
+    crossdomain     on;
+}
+# embeded http server in srs.
+# the http streaming config, for HLS/HDS/DASH/HTTPProgressive
+# global config for http streaming, user must config the http section for each vhost.
+# the embed http server used to substitute nginx in ./objs/nginx,
+# for example, srs runing in arm, can provides RTMP and HTTP service, only with srs installed.
+# user can access the http server pages, generally:
+#       curl http://192.168.1.170:80/srs.html
+# which will show srs version and welcome to srs.
+# @remark, the http embeded stream need to config the vhost, for instance, the __defaultVhost__
+# need to open the feature http of vhost.
+http_server {
+    # whether http streaming service is enabled.
+    # default: off
+    enabled         on;
+    # the http streaming listen entry is <[ip:]port>
+    # for example, 192.168.1.100:8080
+    # where the ip is optional, default to 0.0.0.0, that is 8080 equals to 0.0.0.0:8080
+    # @remark, if use lower port, for instance 80, user must start srs by root.
+    # default: 8080
+    listen          8080;
+    # the default dir for http root.
+    # default: ./objs/nginx/html
+    dir             ./objs/nginx/html;
+}
+
+#############################################################################################
+# Streamer sections
+#############################################################################################
+# the streamer cast stream from other protocol to SRS over RTMP.
+# @see https://github.com/ossrs/srs/tree/develop#stream-architecture
+stream_caster {
+    # whether stream caster is enabled.
+    # default: off
+    enabled         off;
+    # the caster type of stream, the casters:
+    #       mpegts_over_udp, MPEG-TS over UDP caster.
+    #       rtsp, Real Time Streaming Protocol (RTSP).
+    #       flv, FLV over HTTP POST.
+    caster          mpegts_over_udp;
+    # the output rtmp url.
+    # for mpegts_over_udp caster, the typically output url:
+    #       rtmp://127.0.0.1/live/livestream
+    # for rtsp caster, the typically output url:
+    #       rtmp://127.0.0.1/[app]/[stream]
+    #       for example, the rtsp url:
+    #           rtsp://192.168.1.173:8544/live/livestream.sdp
+    #           where the [app] is "live" and [stream] is "livestream", output is:
+    #           rtmp://127.0.0.1/live/livestream
+    output          rtmp://127.0.0.1/live/livestream;
+    # the listen port for stream caster.
+    #       for mpegts_over_udp caster, listen at udp port. for example, 8935.
+    #       for rtsp caster, listen at tcp port. for example, 554.
+    #       for flv caster, listen at tcp port. for example, 8936.
+    # TODO: support listen at <[ip:]port>
+    listen          8935;
+    # for the rtsp caster, the rtp server local port over udp,
+    # which reply the rtsp setup request message, the port will be used:
+    #       [rtp_port_min, rtp_port_max)
+    rtp_port_min    57200;
+    rtp_port_max    57300;
+}
+stream_caster {
+    enabled         off;
+    caster          mpegts_over_udp;
+    output          rtmp://127.0.0.1/live/livestream;
+    listen          8935;
+}
+stream_caster {
+    enabled         off;
+    caster          rtsp;
+    output          rtmp://127.0.0.1/[app]/[stream];
+    listen          554;
+    rtp_port_min    57200;
+    rtp_port_max    57300;
+}
+stream_caster {
+    enabled         off;
+    caster          flv;
+    output          rtmp://127.0.0.1/[app]/[stream];
+    listen          8936;
+}
+
+#############################################################################################
+# RTMP/HTTP VHOST sections
+#############################################################################################
+# 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__ {
+}
+
+# the security to allow or deny clients.
+vhost security.srs.com {
+    # security for host to allow or deny clients.
+    # @see https://github.com/ossrs/srs/issues/211   
+    security {
+        # whether enable the security for vhost.
+        # default: off
+        enabled         on;
+        # the security list, each item format as:
+        #       allow|deny    publish|play    all|<ip>
+        # for example:
+        #       allow           publish     all;
+        #       deny            publish     all;
+        #       allow           publish     127.0.0.1;
+        #       deny            publish     127.0.0.1;
+        #       allow           play        all;
+        #       deny            play        all;
+        #       allow           play        127.0.0.1;
+        #       deny            play        127.0.0.1;
+        # SRS apply the following simple strategies one by one:
+        #       1. allow all if security disabled.
+        #       2. default to deny all when security enabled.
+        #       3. allow if matches allow strategy.
+        #       4. deny if matches deny strategy.
+        allow           play        all;
+        allow           publish     all;
+    }
+}
+
+# the MR(merged-read) setting for publisher.
+# the MW(merged-write) settings for player.
+vhost mrw.srs.com {
+    # whether enable min delay mode for vhost.
+    # for min latence mode:
+    # 1. disable the mr for vhost.
+    # 2. use timeout for cond wait for consumer queue.
+    # @see https://github.com/ossrs/srs/issues/257
+    # default: off
+    min_latency     off;
+    # about MR, read https://github.com/ossrs/srs/issues/241
+    mr {
+        # whether enable the MR(merged-read)
+        # default: off
+        enabled     on;
+        # the latency in ms for MR(merged-read),
+        # the performance+ when latency+, and memory+,
+        #       memory(buffer) = latency * kbps / 8
+        # for example, latency=500ms, kbps=3000kbps, each publish connection will consume
+        #       memory = 500 * 3000 / 8 = 187500B = 183KB
+        # when there are 2500 publisher, the total memory of SRS atleast:
+        #       183KB * 2500 = 446MB
+        # the value recomment is [300, 2000]
+        # default: 350
+        latency     350;
+    }
+    # set the MW(merged-write) latency in ms. 
+    # SRS always set mw on, so we just set the latency value.
+    # the latency of stream >= mw_latency + mr_latency
+    # the value recomment is [300, 1800]
+    # default: 350
+    mw_latency      350;
+}
+
+# vhost for edge, edge and origin is the same vhost
+vhost same.edge.srs.com {
+    # the mode of vhost, local or remote.
+    #       local: vhost is origin vhost, which provides stream source.
+    #       remote: vhost is edge vhost, which pull/push to origin.
+    # default: local
+    mode            remote;
+    # for edge(remote mode), user must specifies the origin server
+    # format as: <server_name|ip>[:port]
+    # @remark user can specifies multiple origin for error backup, by space,
+    # for example, 192.168.1.100:1935 192.168.1.101:1935 192.168.1.102:1935
+    origin          127.0.0.1:1935 localhost:1935;
+    # for edge, whether open the token traverse mode,
+    # if token traverse on, all connections of edge will forward to origin to check(auth),
+    # it's very important for the edge to do the token auth.
+    # the better way is use http callback to do the token auth by the edge,
+    # but if user prefer origin check(auth), the token_traverse if better solution.
+    # default: off
+    token_traverse  off;
+}
+
+# vhost for edge, edge transform vhost to fetch from another vhost.
+vhost transform.edge.srs.com {
+    mode            remote;
+    origin          127.0.0.1:1935;
+    # the vhost to transform for edge,
+    # to fetch from the specified vhost at origin,
+    # if not specified, use the current vhost of edge in origin, the variable [vhost].
+    # default: [vhost]
+    vhost           same.edge.srs.com;
+}
+
+# vhost for dvr
+vhost dvr.srs.com {
+    # dvr RTMP stream to file,
+    # start to record to file when encoder publish,
+    # reap flv according by specified dvr_plan.
+    dvr {
+        # whether enabled dvr features
+        # default: off
+        enabled         on;
+        # the dvr plan. canbe:
+        #       session reap flv when session end(unpublish).
+        #       segment reap flv when flv duration exceed the specified dvr_duration.
+        #       append always append to flv file, never reap it.
+        # default: session
+        dvr_plan        session;
+        # the dvr output path.
+        # we supports some variables to generate the filename.
+        #       [vhost], the vhost of stream.
+        #       [app], the app of stream.
+        #       [stream], the stream name of stream.
+        #       [2006], replace this const to current year.
+        #       [01], replace this const to current month.
+        #       [02], replace this const to current date.
+        #       [15], replace this const to current hour.
+        #       [04], repleace this const to current minute.
+        #       [05], repleace this const to current second.
+        #       [999], repleace this const to current millisecond.
+        #       [timestamp],replace this const to current UNIX timestamp in ms.
+        # @remark we use golang time format "2006-01-02 15:04:05.999" as "[2006]-[01]-[02]_[15].[04].[05]_[999]"
+        # for example, for url rtmp://ossrs.net/live/livestream and time 2015-01-03 10:57:30.776
+        # 1. No variables, the rule of SRS1.0(auto add [stream].[timestamp].flv as filename):
+        #       dvr_path ./objs/nginx/html;
+        #       =>
+        #       dvr_path ./objs/nginx/html/live/livestream.1420254068776.flv;
+        # 2. Use stream and date as dir name, time as filename:
+        #       dvr_path /data/[vhost]/[app]/[stream]/[2006]/[01]/[02]/[15].[04].[05].[999].flv;
+        #       =>
+        #       dvr_path /data/ossrs.net/live/livestream/2015/01/03/10.57.30.776.flv;
+        # 3. Use stream and year/month as dir name, date and time as filename:
+        #       dvr_path /data/[vhost]/[app]/[stream]/[2006]/[01]/[02]-[15].[04].[05].[999].flv;
+        #       =>
+        #       dvr_path /data/ossrs.net/live/livestream/2015/01/03-10.57.30.776.flv;
+        # 4. Use vhost/app and year/month as dir name, stream/date/time as filename:
+        #       dvr_path /data/[vhost]/[app]/[2006]/[01]/[stream]-[02]-[15].[04].[05].[999].flv;
+        #       =>
+        #       dvr_path /data/ossrs.net/live/2015/01/livestream-03-10.57.30.776.flv;
+        # @see https://github.com/ossrs/srs/wiki/v2_CN_DVR#custom-path
+        # @see https://github.com/ossrs/srs/wiki/v2_EN_DVR#custom-path
+        #       segment,session apply it.
+        # default: ./objs/nginx/html/[app]/[stream].[timestamp].flv
+        dvr_path        ./objs/nginx/html/[app]/[stream].[timestamp].flv;
+        # the duration for dvr file, reap if exeed, in seconds.
+        #       segment apply it.
+        #       session,append ignore.
+        # default: 30
+        dvr_duration    30;
+        # whether wait keyframe to reap segment,
+        # if off, reap segment when duration exceed the dvr_duration,
+        # if on, reap segment when duration exceed and got keyframe.
+        #       segment apply it.
+        #       session,append ignore.
+        # default: on
+        dvr_wait_keyframe       on;
+        # about the stream monotonically increasing:
+        #   1. video timestamp is monotonically increasing, 
+        #   2. audio timestamp is monotonically increasing,
+        #   3. video and audio timestamp is interleaved monotonically increasing.
+        # it's specified by RTMP specification, @see 3. Byte Order, Alignment, and Time Format
+        # however, some encoder cannot provides this feature, please set this to off to ignore time jitter.
+        # the time jitter algorithm:
+        #   1. full, to ensure stream start at zero, and ensure stream monotonically increasing.
+        #   2. zero, only ensure sttream start at zero, ignore timestamp jitter.
+        #   3. off, disable the time jitter algorithm, like atc.
+        # apply for all dvr plan.
+        # default: full
+        time_jitter             full;
+        
+        # on_dvr, never config in here, should config in http_hooks.
+        # for the dvr http callback, @see http_hooks.on_dvr of vhost hooks.callback.srs.com
+        # @read https://github.com/ossrs/srs/wiki/v2_CN_DVR#http-callback
+        # @read https://github.com/ossrs/srs/wiki/v2_EN_DVR#http-callback
+    }
+}
+
+# vhost for ingest
+vhost ingest.srs.com {
+    # ingest file/stream/device then push to SRS over RTMP.
+    # the name/id used to identify the ingest, must be unique in global.
+    # ingest id is used in reload or http api management.
+    ingest livestream {
+        # whether enabled ingest features
+        # default: off
+        enabled      on;
+        # input file/stream/device
+        # @remark only support one input.
+        input {
+            # the type of input.
+            # can be file/stream/device, that is,
+            #   file: ingest file specifies by url.
+            #   stream: ingest stream specifeis by url.
+            #   device: not support yet.
+            # default: file
+            type    file;
+            # the url of file/stream.
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        # the ffmpeg 
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        # the transcode engine, @see all.transcode.srs.com
+        # @remark, the output is specified following.
+        engine {
+            # @see enabled of transcode engine.
+            # if disabled or vcodec/acodec not specified, use copy.
+            # default: off.
+            enabled          off;
+            # output stream. variables:
+            #       [vhost] current vhost which start the ingest.
+            #       [port] system RTMP stream port.
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
+        }
+    }
+}
+
+# vhost for http static and flv vod stream for each vhost.
+vhost http.static.srs.com {
+    # http static vhost specified config
+    http_static {
+        # whether enabled the http static service for vhost.
+        # default: off
+        enabled     on;
+        # the url to mount to, 
+        # typical mount to [vhost]/
+        # the variables:
+        #       [vhost] current vhost for http server.
+        # @remark the [vhost] is optional, used to mount at specified vhost.
+        # @remark the http of __defaultVhost__ will override the http_server section.
+        # for example:
+        #       mount to [vhost]/
+        #           access by http://ossrs.net:8080/xxx.html
+        #       mount to [vhost]/hls
+        #           access by http://ossrs.net:8080/hls/xxx.html
+        #       mount to /
+        #           access by http://ossrs.net:8080/xxx.html
+        #           or by http://192.168.1.173:8080/xxx.html
+        #       mount to /hls
+        #           access by http://ossrs.net:8080/hls/xxx.html
+        #           or by http://192.168.1.173:8080/hls/xxx.html
+        # @remark the port of http is specified by http_server section.
+        # default: [vhost]/
+        mount       [vhost]/hls;
+        # main dir of vhost,
+        # to delivery HTTP stream of this vhost.
+        # default: ./objs/nginx/html
+        dir         ./objs/nginx/html/hls;
+    }
+}
+
+# vhost for http flv/aac/mp3 live stream for each vhost.
+vhost http.remux.srs.com {
+    # http flv/mp3/aac/ts stream vhost specified config
+    http_remux {
+        # whether enable the http live streaming service for vhost.
+        # default: off
+        enabled     on;
+        # the fast cache for audio stream(mp3/aac),
+        # to cache more audio and send to client in a time to make android(weixin) happy.
+        # @remark the flv/ts stream ignore it
+        # @remark 0 to disable fast cache for http audio stream.
+        # default: 0
+        fast_cache  30;
+        # the stream mout for rtmp to remux to live streaming.
+        # typical mount to [vhost]/[app]/[stream].flv
+        # the variables:
+        #       [vhost] current vhost for http live stream.
+        #       [app] current app for http live stream.
+        #       [stream] current stream for http live stream.
+        # @remark the [vhost] is optional, used to mount at specified vhost.
+        # the extension:
+        #       .flv mount http live flv stream, use default gop cache.
+        #       .ts mount http live ts stream, use default gop cache.
+        #       .mp3 mount http live mp3 stream, ignore video and audio mp3 codec required.
+        #       .aac mount http live aac stream, ignore video and audio aac codec required.
+        # for example:
+        #       mount to [vhost]/[app]/[stream].flv
+        #           access by http://ossrs.net:8080/live/livestream.flv
+        #       mount to /[app]/[stream].flv
+        #           access by http://ossrs.net:8080/live/livestream.flv
+        #           or by http://192.168.1.173:8080/live/livestream.flv
+        #       mount to [vhost]/[app]/[stream].mp3
+        #           access by http://ossrs.net:8080/live/livestream.mp3
+        #       mount to [vhost]/[app]/[stream].aac
+        #           access by http://ossrs.net:8080/live/livestream.aac
+        #       mount to [vhost]/[app]/[stream].ts
+        #           access by http://ossrs.net:8080/live/livestream.ts
+        # @remark the port of http is specified by http_server section.
+        # default: [vhost]/[app]/[stream].flv
+        mount       [vhost]/[app]/[stream].flv;
+        # whether http stream trigger rtmp stream source when no stream available,
+        # for example, when encoder has not publish stream yet,
+        # user can play the http flv stream and wait for stream.
+        # default: on
+        hstrs       on;
+    }
+}
+
+# the vhost with hls specified.
+vhost with-hls.srs.com {
+    hls {
+        # whether the hls is enabled.
+        # if off, donot write hls(ts and m3u8) when publish.
+        # default: off
+        enabled         on;
+        # the hls fragment in seconds, the duration of a piece of ts.
+        # default: 10
+        hls_fragment    10;
+        # the hls m3u8 target duration ratio,
+        #   EXT-X-TARGETDURATION = hls_td_ratio * hls_fragment // init
+        #   EXT-X-TARGETDURATION = max(ts_duration, EXT-X-TARGETDURATION) // for each ts
+        # @see https://github.com/ossrs/srs/issues/304#issuecomment-74000081
+        # default: 1.5
+        hls_td_ratio    1.5;
+        # the audio overflow ratio.
+        # for pure audio, the duration to reap the segment.
+        # for example, the hls_fragment is 10s, hsl_aof_ratio is 2.0,
+        # the segemnt will reap to 20s for pure audio.
+        # default: 2.0
+        hls_aof_ratio   2.0;
+        # the hls window in seconds, the number of ts in m3u8.
+        # default: 60
+        hls_window      60;
+        # the error strategy. canbe:
+        #       ignore, disable the hls.
+        #       disconnect, require encoder republish.
+        #       continue, ignore failed try to continue output hls.
+        # @see https://github.com/ossrs/srs/issues/264
+        # default: continue
+        hls_on_error    continue;
+        # the hls output path.
+        # the m3u8 file is configed by hls_path/hls_m3u8_file, the default is:
+        #       ./objs/nginx/html/[app]/[stream].m3u8
+        # the ts file is configed by hls_path/hls_ts_file, the default is:
+        #       ./objs/nginx/html/[app]/[stream]-[seq].ts
+        # @remark the hls_path is compatible with srs v1 config.
+        # default: ./objs/nginx/html
+        hls_path        ./objs/nginx/html;
+        # the hls m3u8 file name.
+        # we supports some variables to generate the filename.
+        #       [vhost], the vhost of stream.
+        #       [app], the app of stream.
+        #       [stream], the stream name of stream.
+        # default: [app]/[stream].m3u8
+        hls_m3u8_file   [app]/[stream].m3u8;
+        # the hls ts file name.
+        # we supports some variables to generate the filename.
+        #       [vhost], the vhost of stream.
+        #       [app], the app of stream.
+        #       [stream], the stream name of stream.
+        #       [2006], replace this const to current year.
+        #       [01], replace this const to current month.
+        #       [02], replace this const to current date.
+        #       [15], replace this const to current hour.
+        #       [04], repleace this const to current minute.
+        #       [05], repleace this const to current second.
+        #       [999], repleace this const to current millisecond.
+        #       [timestamp],replace this const to current UNIX timestamp in ms.
+        #       [seq], the sequence number of ts.
+        # @see https://github.com/ossrs/srs/wiki/v2_CN_DVR#custom-path
+        # @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS#hls-config
+        # default: [app]/[stream]-[seq].ts
+        hls_ts_file     [app]/[stream]-[seq].ts;
+        # whether use floor for the hls_ts_file path generation.
+        # if on, use floor(timestamp/hls_fragment) as the variable [timestamp],
+        #       and use enahanced algorithm to calc deviation for segment.
+        # @remark when floor on, recommend the hls_segment>=2*gop.
+        # default: off
+        hls_ts_floor    off;
+        # the hls entry prefix, which is base url of ts url.
+        # if specified, the ts path in m3u8 will be like:
+        #         http://your-server/live/livestream-0.ts
+        #         http://your-server/live/livestream-1.ts
+        #         ...
+        # optional, default to empty string.
+        hls_entry_prefix http://your-server;
+        # the default audio codec of hls.
+        # when codec changed, write the PAT/PMT table, but maybe ok util next ts.
+        # so user can set the default codec for mp3.
+        # the available audio codec: 
+        #       aac, mp3, an
+        # default: aac
+        hls_acodec      aac;
+        # the default video codec of hls.
+        # when codec changed, write the PAT/PMT table, but maybe ok util next ts.
+        # so user can set the default codec for pure audio(without video) to vn.
+        # the available video codec:
+        #       h264, vn
+        # default: h264
+        hls_vcodec      h264;
+        # whether cleanup the old expired ts files.
+        # default: on
+        hls_cleanup     on;
+        # the timeout in seconds to dispose the hls,
+        # dispose is to remove all hls files, m3u8 and ts files.
+        # when publisher timeout dispose hls.
+        # @remark 0 to disable dispose for publisher.
+        # @remark apply for publisher timeout only, while "etc/init.d/srs stop" always dispose hls.
+        # default: 0
+        hls_dispose     0;
+        # the max size to notify hls,
+        # to read max bytes from ts of specified cdn network,
+        # @remark only used when on_hls_notify is config.
+        # default: 64
+        hls_nb_notify   64;
+        # whether wait keyframe to reap segment,
+        # if off, reap segment when duration exceed the fragment,
+        # if on, reap segment when duration exceed and got keyframe.
+        # default: on
+        hls_wait_keyframe       on;
+
+        # on_hls, never config in here, should config in http_hooks.
+        # for the hls http callback, @see http_hooks.on_hls of vhost hooks.callback.srs.com
+        # @read https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS#http-callback
+        # @read https://github.com/ossrs/srs/wiki/v2_EN_DeliveryHLS#http-callback
+        
+        # on_hls_notify, never config in here, should config in http_hooks.
+        # we support the variables to generate the notify url:
+        #       [app], replace with the app.
+        #       [stream], replace with the stream.
+        #       [ts_url], replace with the ts url.
+        # for the hls http callback, @see http_hooks.on_hls_notify of vhost hooks.callback.srs.com
+        # @read https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS#on-hls-notify
+        # @read https://github.com/ossrs/srs/wiki/v2_EN_DeliveryHLS#on-hls-notify
+    }
+}
+# the vhost with hls disabled.
+vhost no-hls.srs.com {
+    hls {
+        # whether the hls is enabled.
+        # if off, donot write hls(ts and m3u8) when publish.
+        # default: off
+        enabled         off;
+    }
+}
+
+# the vhost with adobe hds
+vhost hds.srs.com {
+    hds {
+        # whether hds enabled
+        # default: off
+        enabled         on;
+        # the hds fragment in seconds.
+        # default: 10
+        hds_fragment    10;
+        # the hds window in seconds, erase the segment when exceed the window.
+        # default: 60
+        hds_window      60;
+        # the path to store the hds files.
+        # default: ./objs/nginx/html
+        hds_path        ./objs/nginx/html;
+    }
+}
+
+# the http hook callback vhost, srs will invoke the hooks for specified events.
+vhost hooks.callback.srs.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",
+        #           "tcUrl": "rtmp://video.test.com/live?key=d2fa801d08e3f90ed1e1670e6e52651a",
+        #           "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",
+        #           "send_bytes": 10240, "recv_bytes": 10240
+        #       }
+        # 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",
+        #           "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_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;
+        # when srs reap a dvr file, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_dvr",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream",
+        #           "cwd": "/usr/local/srs",
+        #           "file": "./objs/nginx/html/live/livestream.1420254068776.flv"
+        #       }
+        # 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
+        on_dvr          http://127.0.0.1:8085/api/v1/dvrs http://localhost:8085/api/v1/dvrs;
+        # when srs reap a ts file of hls, call the hook,
+        # the request in the POST data string is a object encode by json:
+        #       {
+        #           "action": "on_hls",
+        #           "client_id": 1985,
+        #           "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
+        #           "stream": "livestream",
+        #           "duration": 9.36, // in seconds
+        #           "cwd": "/usr/local/srs",
+        #           "file": "./objs/nginx/html/live/livestream/2015-04-23/01/476584165.ts",
+        #           "url": "live/livestream/2015-04-23/01/476584165.ts",
+        #           "m3u8": "./objs/nginx/html/live/livestream/live.m3u8",
+        #           "m3u8_url": "live/livestream/live.m3u8",
+        #           "seq_no": 100
+        #       }
+        # 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
+        on_hls          http://127.0.0.1:8085/api/v1/hls http://localhost:8085/api/v1/hls;
+        # when srs reap a ts file of hls, call this hook,
+        # used to push file to cdn network, by get the ts file from cdn network.
+        # so we use HTTP GET and use the variable following:
+        #       [app], replace with the app.
+        #       [stream], replace with the stream.
+        #       [ts_url], replace with the ts url.
+        # ignore any return data of server.
+        # @remark random select a url to report, not report all.
+        on_hls_notify   http://127.0.0.1:8085/api/v1/hls/[app]/[stream][ts_url];
+    }
+}
+
+# the vhost for srs debug info, whether send args in connect(tcUrl).
+vhost debug.srs.com {
+    # when upnode(forward to, edge push to, edge pull from) is srs,
+    # it's strongly recommend to open the debug_srs_upnode,
+    # when connect to upnode, it will take the debug info, 
+    # for example, the id, source id, pid.
+    # please see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLog
+    # default: on
+    debug_srs_upnode    on;
+}
+
+# the vhost for min delay, donot cache any stream.
+vhost min.delay.com {
+    # @see vhost mrw.srs.com for detail.
+    min_latency     on;
+    mr {
+        enabled     off;
+    }
+    mw_latency      100;
+    # whether cache the last gop.
+    # if on, cache the last gop and dispatch to client,
+    #   to enabled 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;
+    # whether enable the TCP_NODELAY
+    # if on, set the nodelay of fd by setsockopt
+    # default: off
+    tcp_nodelay     on;
+}
+
+# whether disable the sps parse, for the resolution of video.
+vhost no.parse.sps.com {
+    publish {
+        # whether parse the sps when publish stream.
+        # we can got the resolution of video for stat api.
+        # but we may failed to cause publish failed.
+        # default: on
+        parse_sps   on;
+    }
+}
+
+# the vhost to control the stream delivery feature
+vhost stream.control.com {
+    # @see vhost mrw.srs.com for detail.
+    min_latency     on;
+    mr {
+    enabled     off;
+    }
+    mw_latency      100;
+    # @see vhost min.delay.com
+    queue_length    10;
+    tcp_nodelay     on;
+    # the minimal packets send interval in ms,
+    # used to control the ndiff of stream by srs_rtmp_dump,
+    # for example, some device can only accept some stream which
+    # delivery packets in constant interval(not cbr).
+    # @remark 0 to disable the minimal interval.
+    # @remark >0 to make the srs to send message one by one.
+    # @remark user can get the right packets interval in ms by srs_rtmp_dump.
+    # default: 0
+    send_min_interval       10.0;
+    # whether reduce the sequence header,
+    # for some client which cannot got duplicated sequence header,
+    # while the sequence header is not changed yet.
+    # default: off
+    reduce_sequence_header  on;
+    # the 1st packet timeout in ms for encoder.
+    # default: 20000
+    publish_1stpkt_timeout  20000;
+    # the normal packet timeout in ms for encoder.
+    # default: 5000
+    publish_normal_timeout  7000;
+}
+
+# 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;
+}
+
+# the vhost which forward publish streams.
+vhost same.vhost.forward.srs.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 main comments for transcode
+vhost example.transcode.srs.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 example {
+            # whether the engine is enabled
+            # default: off.
+            enabled         on;
+            # input format, can be:
+            # off, do not specifies the format, ffmpeg will guess it.
+            # flv, for flv or RTMP stream.
+            # other format, for example, mp4/aac whatever.
+            # default: flv
+            iformat         flv;
+            # 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.
+            #       vn: disable video output.
+            vcodec          libx264;
+            # video bitrate, in kbps
+            # @remark 0 to use source video bitrate.
+            # default: 0
+            vbitrate        1500;
+            # video framerate.
+            # @remark 0 to use source video fps.
+            # default: 0
+            vfps            25;
+            # video width, must be even numbers.
+            # @remark 0 to use source video width.
+            # default: 0
+            vwidth          768;
+            # video height, must be even numbers.
+            # @remark 0 to use source video height.
+            # default: 0
+            vheight         320;
+            # the max threads for ffmpeg to used.
+            # default: 1
+            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:
+            #       libfdk_aac: use aac(libfdk_aac) audio encoder.
+            #       copy: donot encoder the audio stream, copy it.
+            #       an: disable audio output.
+            acodec          libfdk_aac;
+            # audio bitrate, in kbps. [16, 72] for libfdk_aac.
+            # @remark 0 to use source audio bitrate.
+            # default: 0
+            abitrate        70;
+            # audio sample rate. for flv/rtmp, it must be:
+            #       44100,22050,11025,5512
+            # @remark 0 to use source audio sample rate.
+            # default: 0
+            asample_rate    44100;
+            # audio channel, 1 for mono, 2 for stereo.
+            # @remark 0 to use source audio channels.
+            # default: 0
+            achannels       2;
+            # other ffmpeg audio params
+            aparams {
+                # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders
+                # @remark SRS supported aac profile for HLS is: aac_low, aac_he, aac_he_v2
+                profile:a   aac_low;
+                bsf:a       aac_adtstoasc;
+            }
+            # output format, can be:
+            #       off, do not specifies the format, ffmpeg will guess it.
+            #       flv, for flv or RTMP stream.
+            #       other format, for example, mp4/aac whatever.
+            # default: flv
+            oformat         flv;
+            # 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];
+        }
+    }
+}
+# the mirror filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction
+vhost mirror.transcode.srs.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          libfdk_aac;
+            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
+# remark: we remove the libfreetype which always cause build failed, you must add it manual if needed.
+#######################################################################################################
+# the crop filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#crop
+vhost crop.transcode.srs.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          libfdk_aac;
+            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.srs.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          libfdk_aac;
+            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.srs.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine acodec {
+            enabled         on;
+            vcodec          copy;
+            acodec          libfdk_aac;
+            abitrate        45;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
+# disable video, transcode/copy audio.
+# for example, publish pure audio stream.
+vhost vn.transcode.srs.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine vn {
+            enabled         on;
+            vcodec          vn;
+            acodec          libfdk_aac;
+            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.srs.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
+# the comments, read example.transcode.srs.com
+vhost all.transcode.srs.com {
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine ffsuper {
+            enabled         on;
+            iformat         flv;
+            vfilter {
+                i               ./doc/ffmpeg-logo.png;
+                filter_complex  'overlay=10:10';
+            }
+            vcodec          libx264;
+            vbitrate        1500;
+            vfps            25;
+            vwidth          768;
+            vheight         320;
+            vthreads        12;
+            vprofile        main;
+            vpreset         medium;
+            vparams {
+                t               100;
+                coder           1;
+                b_strategy      2;
+                bf              3;
+                refs            10;
+            }
+            acodec          libfdk_aac;
+            abitrate        70;
+            asample_rate    44100;
+            achannels       2;
+            aparams {
+                profile:a   aac_low;
+            }
+            oformat         flv;
+            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          libfdk_aac;
+            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          libfdk_aac;
+            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          libfdk_aac;
+            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          libfdk_aac;
+            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.srs.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          libfdk_aac;
+            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.srs.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.srs.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;
+        }
+    }
+}
+
+# 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.srs.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;
+}
+
+# vhost for time jitter
+vhost jitter.srs.com {
+    # about the stream monotonically increasing:
+    #   1. video timestamp is monotonically increasing, 
+    #   2. audio timestamp is monotonically increasing,
+    #   3. video and audio timestamp is interleaved/mixed monotonically increasing.
+    # it's specified by RTMP specification, @see 3. Byte Order, Alignment, and Time Format
+    # however, some encoder cannot provides this feature, please set this to off to ignore time jitter.
+    # the time jitter algorithm:
+    #   1. full, to ensure stream start at zero, and ensure stream monotonically increasing.
+    #   2. zero, only ensure sttream start at zero, ignore timestamp jitter.
+    #   3. off, disable the time jitter algorithm, like atc.
+    # default: full
+    time_jitter             full;
+    # whether use the interleaved/mixed algorithm to correct the timestamp.
+    # if on, always ensure the timestamp of audio+video is interleaved/mixed monotonically increase.
+    # if off, use time_jitter to correct the timestamp if required.
+    # default: off
+    mix_correct             off;
+}
+
+# vhost for atc.
+vhost atc.srs.com {
+    # vhost for atc for hls/hds/rtmp backup.
+    # generally, atc default to off, server delivery rtmp stream to client(flash) timestamp from 0.
+    # when atc is on, server delivery rtmp stream by absolute time.
+    # atc is used, for instance, encoder will copy stream to master and slave server,
+    # server use atc to delivery stream to edge/client, where stream time from master/slave server
+    # is always the same, client/tools can slice RTMP stream to HLS according to the same time,
+    # if the time not the same, the HLS stream cannot slice to support system backup.
+    # 
+    # @see http://www.adobe.com/cn/devnet/adobe-media-server/articles/varnish-sample-for-failover.html
+    # @see http://www.baidu.com/#wd=hds%20hls%20atc
+    #
+    # default: off
+    atc             on;
+    # whether enable the auto atc,
+    # if enabled, detect the bravo_atc="true" in onMetaData packet,
+    # set atc to on if matched.
+    # always ignore the onMetaData if atc_auto is off.
+    # default: on
+    atc_auto        on;
+}
+
+# the vhost disabled.
+vhost removed.srs.com {
+    # whether the vhost is enabled.
+    # if off, all request access denied.
+    # default: on
+    enabled         off;
+}
+
+# config for the pithy print,
+# which always print constant message specified by interval,
+# whatever the clients in concurrency.
+# default: 10000
+pithy_print_ms      10000;
diff --git b/conf/hds.conf a/conf/hds.conf
new file mode 100644
index 0000000..c2a7d43
--- /dev/null
+++ a/conf/hds.conf
@@ -0,0 +1,17 @@
+# the config for srs to delivery hds
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHDS
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+
+vhost __defaultVhost__ {
+    hds {
+        enabled         on;
+        hds_fragment    10;
+        hds_window      60;
+        hds_path        ./objs/nginx/html;
+    }
+}
diff --git b/conf/hls.conf a/conf/hls.conf
new file mode 100644
index 0000000..d0fa423
--- /dev/null
+++ a/conf/hls.conf
@@ -0,0 +1,18 @@
+# the config for srs to delivery hls
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+        hls_m3u8_file   [app]/[stream].m3u8;
+        hls_ts_file     [app]/[stream]-[seq].ts;
+    }
+}
diff --git b/conf/hls_total.conf a/conf/hls_total.conf
new file mode 100644
index 0000000..4dad424
--- /dev/null
+++ a/conf/hls_total.conf
@@ -0,0 +1,20 @@
+# the config for srs to delivery hls
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+        hls_m3u8_file   [app]/[stream]/index.m3u8;
+        hls_ts_file     [app]/[stream]/[seq].ts;
+#if not configured,don't save total m3u8 file,and keep the ts cleaned
+        hls_total_m3u8_file  [app]/[stream]/total.m3u8;
+#if not configured,don't save total duration file
+        hls_total_file  [app]/[stream]/total;
+    }
+}
diff --git b/conf/http.aac.live.conf a/conf/http.aac.live.conf
new file mode 100644
index 0000000..22aa1bd
--- /dev/null
+++ a/conf/http.aac.live.conf
@@ -0,0 +1,22 @@
+# the config for srs to remux rtmp to aac live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    http_remux {
+        enabled     on;
+        fast_cache  30;
+        mount       [vhost]/[app]/[stream].aac;
+        hstrs       on;
+
+    }
+}
diff --git b/conf/http.flv.live.conf a/conf/http.flv.live.conf
new file mode 100644
index 0000000..944889f
--- /dev/null
+++ a/conf/http.flv.live.conf
@@ -0,0 +1,20 @@
+# the config for srs to remux rtmp to flv live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    http_remux {
+        enabled     on;
+        mount       [vhost]/[app]/[stream].flv;
+        hstrs       on;
+    }
+}
diff --git b/conf/http.flv.live.edge1.conf a/conf/http.flv.live.edge1.conf
new file mode 100644
index 0000000..e827c22
--- /dev/null
+++ a/conf/http.flv.live.edge1.conf
@@ -0,0 +1,23 @@
+# the config for srs to remux rtmp to flv live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              19351;
+max_connections     1000;
+pid                 objs/srs.flv.19351.pid;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8081;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    mode remote;
+    origin 127.0.0.1;
+    http_remux {
+        enabled     on;
+        mount       [vhost]/[app]/[stream].flv;
+        hstrs       on;
+    }
+}
diff --git b/conf/http.flv.live.edge2.conf a/conf/http.flv.live.edge2.conf
new file mode 100644
index 0000000..669c380
--- /dev/null
+++ a/conf/http.flv.live.edge2.conf
@@ -0,0 +1,23 @@
+# the config for srs to remux rtmp to flv live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              19352;
+max_connections     1000;
+pid                 objs/srs.flv.19352.pid;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8082;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    mode remote;
+    origin 127.0.0.1;
+    http_remux {
+        enabled     on;
+        mount       [vhost]/[app]/[stream].flv;
+        hstrs       on;
+    }
+}
diff --git b/conf/http.heartbeat.conf a/conf/http.heartbeat.conf
new file mode 100644
index 0000000..d15ff6a
--- /dev/null
+++ a/conf/http.heartbeat.conf
@@ -0,0 +1,25 @@
+# the config for srs http heartbeat, report its info to api-server
+# @see full.conf for detail config.
+
+listen              1935
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+heartbeat {
+    enabled         on;
+    interval        9.3;
+    # for python api-server
+    url             http://127.0.0.1:8085/api/v1/servers;
+    device_id       "my-srs-device";
+    # for ossrs.net monitor, device_id is the key genereated by bsm.
+    #url             http://www.ossrs.net:1977/api/v1/robots/servers;
+    #device_id       "35c9b402c12a7246868752e2878f7e0e";
+    # with detail summaries
+    summaries       on;
+}
+stats {
+    network         0;
+    disk            sda sdb xvda xvdb;
+}
+vhost __defaultVhost__ {
+}
diff --git b/conf/http.hls.conf a/conf/http.hls.conf
new file mode 100644
index 0000000..17416a2
--- /dev/null
+++ a/conf/http.hls.conf
@@ -0,0 +1,23 @@
+# the config for srs to delivery hls
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+        hls_m3u8_file   [app]/[stream].m3u8;
+        hls_ts_file     [app]/[stream]-[seq].ts;
+    }
+}
diff --git b/conf/http.hooks.callback.conf a/conf/http.hooks.callback.conf
new file mode 100644
index 0000000..d5374d9
--- /dev/null
+++ a/conf/http.hooks.callback.conf
@@ -0,0 +1,18 @@
+# http-hooks or http-callbacks config for srs.
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    http_hooks {
+        enabled         on;
+        on_connect      http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
+        on_close        http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
+        on_publish      http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
+        on_unpublish    http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
+        on_play         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
+        on_stop         http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
+    }
+}
diff --git b/conf/http.mp3.live.conf a/conf/http.mp3.live.conf
new file mode 100644
index 0000000..690a453
--- /dev/null
+++ a/conf/http.mp3.live.conf
@@ -0,0 +1,22 @@
+# the config for srs to remux rtmp to mp3 live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    http_remux {
+        enabled     on;
+        fast_cache  30;
+        mount       [vhost]/[app]/[stream].mp3;
+        hstrs       on;
+
+    }
+}
diff --git b/conf/http.server.conf a/conf/http.server.conf
new file mode 100644
index 0000000..0c84089
--- /dev/null
+++ a/conf/http.server.conf
@@ -0,0 +1,19 @@
+# the config for srs to serve as http server
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost ossrs.net {
+    http {
+        enabled     on;
+        mount       [vhost]/;
+        dir         ./objs/nginx/html;
+    }
+}
diff --git b/conf/http.ts.live.conf a/conf/http.ts.live.conf
new file mode 100644
index 0000000..d445672
--- /dev/null
+++ a/conf/http.ts.live.conf
@@ -0,0 +1,20 @@
+# the config for srs to remux rtmp to ts live stream.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+vhost __defaultVhost__ {
+    http_remux {
+        enabled     on;
+        mount       [vhost]/[app]/[stream].ts;
+        hstrs       on;
+    }
+}
diff --git b/conf/ingest.conf a/conf/ingest.conf
new file mode 100644
index 0000000..d77a2f9
--- /dev/null
+++ a/conf/ingest.conf
@@ -0,0 +1,22 @@
+# use ffmpeg to ingest file/stream/device to SRS
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleIngest
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    ingest livestream {
+        enabled      on;
+        input {
+            type    file;
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine {
+            enabled          off;
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
+        }
+    }
+}
diff --git b/conf/mac.dev.conf a/conf/mac.dev.conf
new file mode 100644
index 0000000..e624e16
--- /dev/null
+++ a/conf/mac.dev.conf
@@ -0,0 +1,36 @@
+# no-daemon and write log to console config for srs.
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_api {
+    enabled         on;
+    listen          1985;
+}
+http_server {
+    enabled         on;
+    listen          8080;
+}
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+    }
+    ingest livestream {
+        enabled      on;
+        input {
+            type    file;
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        #ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        ffmpeg      ./objs/research/librtmp/srs_ingest_flv;
+        engine {
+            enabled          off;
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
+        }
+    }
+}
diff --git b/conf/origin.conf a/conf/origin.conf
new file mode 100644
index 0000000..f27abb0
--- /dev/null
+++ a/conf/origin.conf
@@ -0,0 +1,11 @@
+# the config for srs origin-edge cluster
+# @see https://github.com/ossrs/srs/wiki/v1_CN_Edge
+# @see full.conf for detail config.
+
+listen              19350;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+pid                 ./objs/origin.pid;
+vhost __defaultVhost__ {
+}
diff --git b/conf/push.flv.conf a/conf/push.flv.conf
new file mode 100644
index 0000000..9e871f9
--- /dev/null
+++ a/conf/push.flv.conf
@@ -0,0 +1,29 @@
+# push HTTP FLV to SRS.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_Streamer#push-http-flv-to-srs
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+stream_caster {
+    enabled         on;
+    caster          flv;
+    output          rtmp://127.0.0.1/[app]/[stream];
+    listen          8936;
+}
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+        hls_m3u8_file   [app]/[stream].m3u8;
+        hls_ts_file     [app]/[stream]-[seq].ts;
+    }
+}
diff --git b/conf/push.mpegts.over.udp.conf a/conf/push.mpegts.over.udp.conf
new file mode 100644
index 0000000..82f2f04
--- /dev/null
+++ a/conf/push.mpegts.over.udp.conf
@@ -0,0 +1,17 @@
+# push MPEG-TS over UDP to SRS.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_Streamer#push-mpeg-ts-over-udp
+# @see https://github.com/ossrs/srs/issues/250#issuecomment-72321769
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+stream_caster {
+    enabled         on;
+    caster          mpegts_over_udp;
+    output          rtmp://127.0.0.1/live/livestream;
+    listen          1935;
+}
+vhost __defaultVhost__ {
+}
diff --git b/conf/push.rtsp.conf a/conf/push.rtsp.conf
new file mode 100644
index 0000000..016a067
--- /dev/null
+++ a/conf/push.rtsp.conf
@@ -0,0 +1,19 @@
+# push MPEG-TS over UDP to SRS.
+# @see https://github.com/ossrs/srs/wiki/v2_CN_Streamer#push-mpeg-ts-over-udp
+# @see https://github.com/ossrs/srs/issues/250#issuecomment-72321769
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+stream_caster {
+    enabled         on;
+    caster          rtsp;
+    output          rtmp://127.0.0.1/[app]/[stream];
+    listen          554;
+    rtp_port_min    57200;
+    rtp_port_max    57300;
+}
+vhost __defaultVhost__ {
+}
diff --git b/conf/realtime.conf a/conf/realtime.conf
new file mode 100644
index 0000000..249c750
--- /dev/null
+++ a/conf/realtime.conf
@@ -0,0 +1,18 @@
+# the config for srs to delivery realtime RTMP stream
+# @see https://github.com/ossrs/srs/wiki/v2_CN_SampleRealtime
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    gop_cache       off;
+    queue_length    10;
+    min_latency     on;
+    mr {
+        enabled     off;
+    }
+    mw_latency      100;
+    tcp_nodelay     on;
+}
diff --git b/conf/rtmp.conf a/conf/rtmp.conf
new file mode 100644
index 0000000..e05f154
--- /dev/null
+++ a/conf/rtmp.conf
@@ -0,0 +1,10 @@
+# the config for srs to delivery RTMP
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+}
diff --git b/conf/security.deny.publish.conf a/conf/security.deny.publish.conf
new file mode 100644
index 0000000..fc2a2e8
--- /dev/null
+++ a/conf/security.deny.publish.conf
@@ -0,0 +1,15 @@
+# security config for srs, allow play and deny publish.
+# @see https://github.com/ossrs/srs/issues/211#issuecomment-68507035
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    security {
+        enabled         on;
+        deny            publish     all;
+        allow           play        all;
+    }
+}
diff --git b/conf/srs.conf a/conf/srs.conf
new file mode 100644
index 0000000..da06284
--- /dev/null
+++ a/conf/srs.conf
@@ -0,0 +1,22 @@
+# main config for srs.
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+srs_log_tank        file;
+srs_log_file        ./objs/srs.log;
+http_api {
+    enabled         on;
+    listen          1985;
+}
+http_server {
+    enabled         on;
+    listen          8080;
+    dir             ./objs/nginx/html;
+}
+stats {
+    network         0;
+    disk            sda sdb xvda xvdb;
+}
+vhost __defaultVhost__ {
+}
diff --git b/conf/transcode2hls.audio.only.conf a/conf/transcode2hls.audio.only.conf
new file mode 100644
index 0000000..f4361bf
--- /dev/null
+++ a/conf/transcode2hls.audio.only.conf
@@ -0,0 +1,30 @@
+# the config for srs to delivery hls
+# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+    hls {
+        enabled         on;
+        hls_fragment    10;
+        hls_window      60;
+        hls_path        ./objs/nginx/html;
+        hls_m3u8_file   [app]/[stream].m3u8;
+        hls_ts_file     [app]/[stream]-[seq].ts;
+    }
+    transcode {
+        enabled     on;
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine ff {
+            enabled         on;
+            vcodec          copy;
+            acodec          libfdk_aac;
+            aparams {
+            }
+            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
+        }
+    }
+}
diff --git b/conf/transform.edge.conf a/conf/transform.edge.conf
new file mode 100644
index 0000000..5b3a04f
--- /dev/null
+++ a/conf/transform.edge.conf
@@ -0,0 +1,29 @@
+# the config for srs origin-edge cluster
+# @see https://github.com/ossrs/srs/wiki/v2_CN_Edge#transform-vhost
+# @see full.conf for detail config.
+
+listen              1935;
+max_connections     1000;
+daemon              off;
+srs_log_tank        console;
+vhost __defaultVhost__ {
+}
+vhost source.srs.com {
+    ingest livestream {
+        enabled      on;
+        input {
+            type    file;
+            url     ./doc/source.200kbps.768x320.flv;
+        }
+        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
+        engine {
+            enabled          off;
+            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
+        }
+    }
+}
+vhost transform.srs.edge.com {
+    mode            remote;
+    origin          127.0.0.1:1935;
+    vhost           source.srs.com;
+}
diff --git b/etc/init.d/srs a/etc/init.d/srs
new file mode 100755
index 0000000..f04a432
--- /dev/null
+++ a/etc/init.d/srs
@@ -0,0 +1,197 @@
+#!/bin/bash
+
+### BEGIN INIT INFO
+# Provides:          ossrs(srs)
+# RequiRED-Start:    $all
+# RequiRED-Stop:     $all
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: ossrs(srs)
+# Description:       https://github.com/ossrs/srs
+### END INIT INFO
+
+# the config of ROOT, user must modify it when start srs from other directory,
+# it's ok to use the script by command ./etc/init.d/ossrs
+ROOT="/usr/local/srs"
+APP="./objs/srs"
+CONFIG="./conf/srs.conf"
+DEFAULT_PID_FILE='./objs/srs.pid'
+DEFAULT_LOG_FILE='./objs/srs.log'
+
+########################################################################
+# utility functions
+########################################################################
+RED="\\033[31m"
+GREEN="\\033[32m"
+YELLOW="\\033[33m"
+BLACK="\\033[0m"
+POS="\\033[60G"
+
+ok_msg() {
+    echo -e "${1}${POS}${BLACK}[${GREEN}  OK  ${BLACK}]"
+}
+
+failed_msg() {
+    echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]"
+}
+
+# load process info of srs
+# @set variable $srs_pid to the process id in srs.pid file.
+# @return 0, if process exists; otherwise:
+#       1, for pid file not exists.
+#       2, for get proecess info by pid failed.
+# @set variable $error_msg if error.
+# @set variable $pid_file to pid file.
+load_process_info() {
+    # get pid file
+    pid_file=`cd ${ROOT} && cat ${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'`
+    if [[ -z $pid_file ]]; then pid_file=${DEFAULT_PID_FILE}; fi
+    # get abs path
+    pid_dir=`dirname $pid_file`
+    pid_file=`(cd ${ROOT}; cd $pid_dir; pwd)`/`basename $pid_file`
+    
+    srs_pid=`cat $pid_file 2>/dev/null`
+    ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $pid_file does not exists"; return 1; fi
+    
+    ps -p ${srs_pid} >/dev/null 2>/dev/null
+    ret=$?; if [[ 0 -ne $ret ]]; then error_msg="process $srs_pid does not exists"; return 2; fi
+    
+    return 0;
+}
+
+start() {
+    # if exists, exit.
+    load_process_info
+    if [[ 0 -eq $? ]]; then failed_msg "SRS started(pid ${srs_pid}), should not start it again."; return 0; fi
+    
+    # not exists, start server
+    ok_msg "Starting SRS..."
+    
+    # get log file
+    log_file=`cd ${ROOT} && cat ${CONFIG} |grep '^log_file'| awk '{print $2}'| awk -F ';' '{print $1}'`
+    if [[ -z $log_file ]]; then log_file=${DEFAULT_LOG_FILE}; fi
+    # get abs path
+    log_dir=`dirname $log_file`
+    log_file=`(cd ${ROOT} && cd $log_dir && pwd)`/`basename $log_file`
+    
+    # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000"
+    if [[ -z $log_file ]]; then
+        (ulimit -c unlimited && cd ${ROOT}; ${APP} -c ${CONFIG} >/dev/null 2>&1)
+    else
+        (ulimit -c unlimited && cd ${ROOT}; ${APP} -c ${CONFIG} >> $log_file 2>&1)
+    fi
+    
+    # check again after start server
+    for ((i = 0; i < 5; i++)); do
+        # sleep a little while, for srs may start then crash.
+        sleep 0.1
+        load_process_info
+        ret=$?; if [[ 0 -ne $ret ]]; then 
+            failed_msg "SRS start failed"; 
+            failed_msg "see $log_file"; 
+            return $ret; 
+        fi
+    done
+    
+    # check whether started.
+    load_process_info
+    ret=$?; if [[ 0 -eq $? ]]; then ok_msg "SRS started(pid ${srs_pid})"; return 0; fi
+    
+    failed_msg "SRS not started"
+    return $ret
+}
+
+stop() {
+    # not start, exit
+    load_process_info
+    if [[ 0 -ne $? ]]; then failed_msg "SRS not start."; return 0; fi
+    
+    ok_msg "Stopping SRS(pid ${srs_pid})..."
+    
+    # process exists, try to kill to stop normally
+    for((i=0;i<100;i++)); do
+        load_process_info
+        if [[ 0 -eq $? ]]; then
+            kill -s SIGTERM ${srs_pid} 2>/dev/null
+            ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi
+            sleep 0.3
+        else
+            ok_msg "SRS stopped by SIGTERM"
+            # delete the pid file when stop success.
+            rm -f ${pid_file}
+            break;
+        fi
+    done
+    
+    # process exists, use kill -9 to force to exit
+    load_process_info
+    if [[ 0 -eq $? ]]; then
+        kill -s SIGKILL ${srs_pid} 2>/dev/null
+        ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGKILL failed ret=$ret"; return $ret; fi
+        ok_msg "SRS stopped by SIGKILL"
+    else
+        # delete the pid file when stop success.
+        rm -f ${pid_file}
+    fi
+    
+    sleep 0.1
+    return 0
+}
+
+# get the status of srs process
+# @return 0 if srs is running; otherwise, 1 for stopped.
+status() {
+    load_process_info
+    ret=$?; if [[ 0 -eq $ret ]]; then echo "SRS(pid ${srs_pid}) is running."; return 0; fi
+    
+    echo "SRS is stopped, $error_msg"
+    return 1
+}
+
+reload() {
+    # not start, exit
+    load_process_info
+    if [[ 0 -ne $? ]]; then failed_msg "SRS not start."; return 0; fi
+    
+    ok_msg "Reload SRS(pid ${srs_pid})..."
+    
+    # process exists, reload it
+    kill -s SIGHUP ${srs_pid} 2>/dev/null
+    ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "Reload SRS failed ret=$ret"; return $ret; fi
+    
+    load_process_info
+    if [[ 0 -ne $? ]]; then failed_msg "SRS reload failed."; return $ret; fi
+    
+    ok_msg "SRS reloaded"
+    return 0
+}
+
+menu() {
+    case "$1" in
+        start)
+            start
+            ;;
+        stop)
+            stop
+            ;;
+        restart)
+            stop
+            start
+            ;;
+        status)
+            status
+            ;;
+        reload)
+            reload
+            ;;
+        *)
+            echo "Usage: $0 {start|stop|status|restart|reload}"
+            return 1
+            ;;
+    esac
+}
+
+menu $1
+
+code=$?
+exit ${code}
diff --git b/objs/ffmpeg/bin/ffmpeg a/objs/ffmpeg/bin/ffmpeg
new file mode 100755
index 0000000..ae01263
Binary files /dev/null and a/objs/ffmpeg/bin/ffmpeg differ
diff --git b/objs/nginx/html/crossdomain.xml a/objs/nginx/html/crossdomain.xml
new file mode 100644
index 0000000..ae91084
--- /dev/null
+++ a/objs/nginx/html/crossdomain.xml
@@ -0,0 +1,3 @@
+<cross-domain-policy>
+  <allow-access-from domain="*"/>
+</cross-domain-policy>
diff --git b/objs/srs a/objs/srs
new file mode 100755
index 0000000..f2ac7ce
Binary files /dev/null and a/objs/srs differ