diff --git a/README.md b/README.md
index 672702379..e469d455a 100755
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@ cd simple-rtmp-server/trunk
Step 2: build SRS,
Requires Centos6.x/Ubuntu12 32/64bits, others see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/Build)
-./configure --with-ssl --without-hls --without-ffmpeg --without-http && make +./configure --with-ssl --without-hls --without-ffmpeg --without-http-callback && makeStep 3: start SRS
diff --git a/trunk/conf/srs.19350.conf b/trunk/conf/demo.19350.conf similarity index 100% rename from trunk/conf/srs.19350.conf rename to trunk/conf/demo.19350.conf diff --git a/trunk/conf/demo.conf b/trunk/conf/demo.conf new file mode 100644 index 000000000..d02491ae3 --- /dev/null +++ b/trunk/conf/demo.conf @@ -0,0 +1,145 @@ +listen 1935; +chunk_size 60000; +log_dir ./objs/logs; +max_connections 2000; + +vhost __defaultVhost__ { + enabled on; + gop_cache on; +} + +vhost bandcheck.srs.com { + enabled on; + chunk_size 65000; + bandcheck { + enabled on; + key "35c9b402c12a7246868752e2878f7e0e"; + interval 30; + limit_kbps 4000; + } +} + +vhost demo.srs.com { + chunk_size 60000; + enabled on; + gop_cache on; + queue_length 30; + forward 127.0.0.1:19350; + bandcheck { + enabled off; + } + hls { + enabled on; + hls_path ./objs/nginx/html; + hls_fragment 5; + hls_window 30; + } + http_hooks { + enabled on; + on_connect http://127.0.0.1:8085/api/v1/clients; + on_close http://127.0.0.1:8085/api/v1/clients; + on_publish http://127.0.0.1:8085/api/v1/streams; + on_unpublish http://127.0.0.1:8085/api/v1/streams; + on_play http://127.0.0.1:8085/api/v1/sessions; + on_stop http://127.0.0.1:8085/api/v1/sessions; + } + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine ld { + enabled on; + vfilter { + vf 'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontsize=30:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 1; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine sd { + enabled on; + vfilter { + vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'; + } + vcodec libx264; + vbitrate 500; + vfps 20; + vwidth 768; + vheight 320; + vthreads 1; + vprofile main; + vpreset fast; + vparams { + } + acodec libaacplus; + abitrate 40; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} + +vhost players { + enabled on; + gop_cache on; + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine hls { + enabled on; + vfilter { + vf 'drawtext=text=SRS(SimpleRtmpServer):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 1; + vprofile baseline; + vpreset superfast; + vparams { + g 100; + } + acodec libaacplus; + abitrate 30; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=players_pub/[stream]; + } + } +} + +vhost players_pub { + hls { + enabled on; + hls_path ./objs/nginx/html; + hls_fragment 5; + hls_window 30; + } +} + +vhost players_pub_rtmp { + gop_cache off; + hls { + enabled off; + } +} diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf new file mode 100644 index 000000000..daf2d2fe6 --- /dev/null +++ b/trunk/conf/full.conf @@ -0,0 +1,657 @@ +# the listen ports, split by space. +listen 1935; +# the default chunk size is 128, max is 65536, +# some client does not support chunk size change, +# however, most clients supports it and it can improve +# performance about 10%. +# default: 60000 +chunk_size 60000; +# the logs dir. +# if enabled ffmpeg, each stracoding stream will create a log file. +# default: ./objs/logs +log_dir ./objs/logs; +# the max connections. +# if exceed the max connections, server will drop the new connection. +# default: 2000 +max_connections 2000; +# vhost list, the __defaultVhost__ is the default vhost +# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream. +# for which cannot identify the required vhost. +vhost __defaultVhost__ { + enabled on; + gop_cache on; +} + +# vhost for bandwidth check +# generally, the bandcheck vhost must be: bandcheck.srs.com, +# or need to modify the vhost of client. +vhost bandcheck.srs.com { + enabled on; + chunk_size 65000; + # bandwidth check config. + bandcheck { + # whether support bandwidth check, + # default: off. + enabled on; + # the key for server to valid, + # if invalid key, server disconnect and abort the bandwidth check. + key "35c9b402c12a7246868752e2878f7e0e"; + # the interval in seconds for bandwidth check, + # server donot allow new test request. + # default: 30 + interval 30; + # the max available check bandwidth in kbps. + # to avoid attack of bandwidth check. + # default: 1000 + limit_kbps 4000; + } +} + +# set the chunk size of vhost. +vhost chunksize.vhost.com { + # the default chunk size is 128, max is 65536, + # some client does not support chunk size change, + # vhost chunk size will override the global value. + # default: global chunk size. + chunk_size 128; +} + +# the http hook callback vhost, srs will invoke the hooks for specified events. +vhost hooks.callback.vhost.com { + http_hooks { + # whether the http hooks enalbe. + # default off. + enabled on; + # when client connect to vhost/app, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_connect", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + # "pageUrl": "http://www.test.com/live.html" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_connect http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_connect http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients; + # when client close/disconnect to vhost/app/stream, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_close", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_close http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_close http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients; + # when client(encoder) publish to vhost/app/stream, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_publish", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + # "stream": "livestream" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_publish http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_publish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams; + # when client(encoder) stop publish to vhost/app/stream, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_unpublish", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + # "stream": "livestream" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_unpublish http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_unpublish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams; + # when client start to play vhost/app/stream, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_play", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + # "stream": "livestream" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_play http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_play http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions; + # when client stop to play vhost/app/stream, call the hook, + # the request in the POST data string is a object encode by json: + # { + # "action": "on_stop", + # "client_id": 1985, + # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", + # "stream": "livestream" + # } + # if valid, the hook must return HTTP code 200(Stauts OK) and response + # an int value specifies the error code(0 corresponding to success): + # 0 + # support multiple api hooks, format: + # on_stop http://xxx/api0 http://xxx/api1 http://xxx/apiN + on_stop http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions; + } +} + +# the mirror filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction +vhost mirror.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine mirror { + enabled on; + vfilter { + vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# the drawtext filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#drawtext-1 +vhost drawtext.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine drawtext { + enabled on; + vfilter { + vf 'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# the crop filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#crop +vhost crop.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine crop { + enabled on; + vfilter { + vf 'crop=in_w-20:in_h-160:10:80'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# the logo filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#overlay +vhost logo.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine logo { + enabled on; + vfilter { + i ./doc/ffmpeg-logo.png; + filter_complex 'overlay=10:10'; + } + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# audio transcode only. +# for example, FMLE publish audio codec in mp3, and donot support HLS output, +# we can transcode the audio to aac and copy video to the new stream with HLS. +vhost audio.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine acodec { + enabled on; + vcodec copy; + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# ffmpeg-copy(forward implements by ffmpeg). +# copy the video and audio to a new stream. +vhost copy.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine copy { + enabled on; + vcodec copy; + acodec copy; + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# transcode all app and stream of vhost +vhost all.transcode.vhost.com { + # the streaming transcode configs. + transcode { + # whether the transcode enabled. + # if off, donot transcode. + # default: off. + enabled on; + # the ffmpeg + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + # the transcode engine for matched stream. + # all matched stream will transcoded to the following stream. + # the transcode set name(ie. hd) is optional and not used. + engine ffsuper { + # whether the engine is enabled + # default: off. + enabled on; + # ffmpeg filters, follows the main input. + vfilter { + # the logo input file. + i ./doc/ffmpeg-logo.png; + # the ffmpeg complex filter. + # for filters, @see: http://ffmpeg.org/ffmpeg-filters.html + filter_complex 'overlay=10:10'; + } + # video encoder name. can be: + # libx264: use h.264(libx264) video encoder. + # copy: donot encoder the video stream, copy it. + vcodec libx264; + # video bitrate, in kbps + vbitrate 1500; + # video framerate. + vfps 25; + # video width, must be even numbers. + vwidth 768; + # video height, must be even numbers. + vheight 320; + # the max threads for ffmpeg to used. + vthreads 12; + # x264 profile, @see x264 -help, can be: + # high,main,baseline + vprofile main; + # x264 preset, @see x264 -help, can be: + # ultrafast,superfast,veryfast,faster,fast + # medium,slow,slower,veryslow,placebo + vpreset medium; + # other x264 or ffmpeg video params + vparams { + # ffmpeg options, @see: http://ffmpeg.org/ffmpeg.html + t 100; + # 264 params, @see: http://ffmpeg.org/ffmpeg-codecs.html#libx264 + coder 1; + b_strategy 2; + bf 3; + refs 10; + } + # audio encoder name. can be: + # libaacplus: use aac(libaacplus) audio encoder. + # copy: donot encoder the audio stream, copy it. + acodec libaacplus; + # audio bitrate, in kbps. [16, 72] for libaacplus. + abitrate 70; + # audio sample rate. for flv/rtmp, it must be: + # 44100,22050,11025,5512 + asample_rate 44100; + # audio channel, 1 for mono, 2 for stereo. + achannels 2; + # other ffmpeg audio params + aparams { + # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders + profile:a aac_low; + } + # output stream. variables: + # [vhost] the input stream vhost. + # [port] the intput stream port. + # [app] the input stream app. + # [stream] the input stream name. + # [engine] the tanscode engine name. + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine ffhd { + enabled on; + vcodec libx264; + vbitrate 1200; + vfps 25; + vwidth 1382; + vheight 576; + vthreads 6; + vprofile main; + vpreset medium; + vparams { + } + acodec libaacplus; + abitrate 70; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine ffsd { + enabled on; + vcodec libx264; + vbitrate 800; + vfps 25; + vwidth 1152; + vheight 480; + vthreads 4; + vprofile main; + vpreset fast; + vparams { + } + acodec libaacplus; + abitrate 60; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine fffast { + enabled on; + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine vcopy { + enabled on; + vcodec copy; + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine acopy { + enabled on; + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec copy; + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + engine copy { + enabled on; + vcodec copy; + acodec copy; + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# transcode all stream using the empty ffmpeg demo, donothing. +vhost ffempty.transcode.vhost.com { + transcode { + enabled on; + ffmpeg ./objs/research/ffempty; + engine empty { + enabled on; + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 768; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams { + } + acodec libaacplus; + abitrate 45; + asample_rate 44100; + achannels 2; + aparams { + } + output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; + } + } +} +# transcode all app and stream of app +vhost app.transcode.vhost.com { + # the streaming transcode configs. + # if app specified, transcode all streams of app. + transcode live { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine { + enabled off; + } + } +} +# transcode specified stream. +vhost stream.transcode.vhost.com { + # the streaming transcode configs. + # if stream specified, transcode the matched stream. + transcode live/livestream { + enabled on; + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine { + enabled off; + } + } +} + +# the vhost which forward publish streams. +vhost same.vhost.forward.vhost.com { + # forward all publish stream to the specified server. + # this used to split/forward the current stream for cluster active-standby, + # active-active for cdn to build high available fault tolerance system. + # format: {ip}:{port} {ip_N}:{port_N} + # or specify the vhost by params, @see: change.vhost.forward.vhost.com + # if vhost not specified, use the request vhost instead. + forward 127.0.0.1:1936 127.0.0.1:1937; +} +# TODO: FIXME: change the forward schema with vhost. +# [plan] the vhost which forward publish streams to other vhosts. +vhost change.vhost.forward.vhost.com { + forward 127.0.0.1:1936 127.0.0.1:1937 { + # specify the vhost to override the vhost in client request. + vhost forward2.vhost.com; + # specify the refer(pageUrl) to override the refer in client request. + refer http://srs/index.html; + } + forward 127.0.0.1:1938 { + vhost forward3.vhost.com; + } +} + +# the vhost disabled. +vhost removed.vhost.com { + # whether the vhost is enabled. + # if off, all request access denied. + # default: on + enabled off; +} + +# the vhost with hls specified. +vhost with-hls.vhost.com { + hls { + # whether the hls is enabled. + # if off, donot write hls(ts and m3u8) when publish. + # default: off + enabled on; + # the hls output path. + # the app dir is auto created under the hls_path. + # for example, for rtmp stream: + # rtmp://127.0.0.1/live/livestream + # http://127.0.0.1/live/livestream.m3u8 + # where hls_path is /hls, srs will create the following files: + # /hls/live the app dir for all streams. + # /hls/live/livestream.m3u8 the HLS m3u8 file. + # /hls/live/livestream-1.ts the HLS media/ts file. + # in a word, the hls_path is for vhost. + # default: ./objs/nginx/html + hls_path /data/nginx/html; + # the hls fragment in seconds, the duration of a piece of ts. + # default: 10 + hls_fragment 10; + # the hls window in seconds, the number of ts in m3u8. + # default: 60 + hls_window 60; + } +} +# the vhost with hls disabled. +vhost no-hls.vhost.com { + hls { + # whether the hls is enabled. + # if off, donot write hls(ts and m3u8) when publish. + # default: off + enabled off; + } +} + +# the vhost for min delay, donot cache any stream. +vhost min.delay.com { + # whether cache the last gop. + # if on, cache the last gop and dispatch to client, + # to enable fast startup for client, client play immediately. + # if off, send the latest media data to client, + # client need to wait for the next Iframe to decode and show the video. + # set to off if requires min delay; + # set to on if requires client fast startup. + # default: on + gop_cache off; + # the max live queue length in seconds. + # if the messages in the queue exceed the max length, + # drop the old whole gop. + # default: 30 + queue_length 10; +} + +# the vhost for antisuck. +vhost refer.anti_suck.com { + # the common refer for play and publish. + # if the page url of client not in the refer, access denied. + # if not specified this field, allow all. + # default: not specified. + refer github.com github.io; + # refer for publish clients specified. + # the common refer is not overrided by this. + # if not specified this field, allow all. + # default: not specified. + refer_publish github.com github.io; + # refer for play clients specified. + # the common refer is not overrided by this. + # if not specified this field, allow all. + # default: not specified. + refer_play github.com github.io; +} + +# config for the pithy print, +# which always print constant message specified by interval, +# whatever the clients in concurrency. +pithy_print { + # shared print interval for all publish clients, in milliseconds. + # if not specified, set to 1100. + publish 2000; + # shared print interval for all play clients, in milliseconds. + # if not specified, set to 1300. + play 3000; + # shared print interval for all forwarders, in milliseconds. + # if not specified, set to 2000. + forwarder 3000; + # shared print interval for all encoders, in milliseconds. + # if not specified, set to 2000. + encoder 3000; + # shared print interval for all hls, in milliseconds. + # if not specified, set to 2000. + hls 3000; +} diff --git a/trunk/conf/srs.conf b/trunk/conf/srs.conf index eaeb4712d..7d97f914c 100644 --- a/trunk/conf/srs.conf +++ b/trunk/conf/srs.conf @@ -1,848 +1,3 @@ -# the listen ports, split by space. listen 1935; -# the default chunk size is 128, max is 65536, -# some client does not support chunk size change, -# however, most clients supports it and it can improve -# performance about 10%. -# default: 60000 -chunk_size 60000; -# the logs dir. -# if enabled ffmpeg, each stracoding stream will create a log file. -# default: ./objs/logs -log_dir ./objs/logs; -# the max connections. -# if exceed the max connections, server will drop the new connection. -# default: 2000 -max_connections 2000; -# vhost list, the __defaultVhost__ is the default vhost -# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream. -# for which cannot identify the required vhost. vhost __defaultVhost__ { - enabled on; - gop_cache on; } - -# vhost for bandwidth check -# generally, the bandcheck vhost must be: bandcheck.srs.com, -# or need to modify the vhost of client. -vhost bandcheck.srs.com { - enabled on; - chunk_size 65000; - # bandwidth check config. - bandcheck { - # whether support bandwidth check, - # default: off. - enabled on; - # the key for server to valid, - # if invalid key, server disconnect and abort the bandwidth check. - key "35c9b402c12a7246868752e2878f7e0e"; - # the interval in seconds for bandwidth check, - # server donot allow new test request. - # default: 30 - interval 30; - # the max available check bandwidth in kbps. - # to avoid attack of bandwidth check. - # default: 1000 - limit_kbps 4000; - } -} - -# set the chunk size of vhost. -vhost chunksize.vhost.com { - # the default chunk size is 128, max is 65536, - # some client does not support chunk size change, - # vhost chunk size will override the global value. - # default: global chunk size. - chunk_size 128; -} - -# the http hook callback vhost, srs will invoke the hooks for specified events. -vhost hooks.callback.vhost.com { - http_hooks { - # whether the http hooks enalbe. - # default off. - enabled on; - # when client connect to vhost/app, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_connect", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", - # "pageUrl": "http://www.test.com/live.html" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_connect http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_connect http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients; - # when client close/disconnect to vhost/app/stream, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_close", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_close http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_close http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients; - # when client(encoder) publish to vhost/app/stream, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_publish", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", - # "stream": "livestream" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_publish http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_publish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams; - # when client(encoder) stop publish to vhost/app/stream, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_unpublish", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", - # "stream": "livestream" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_unpublish http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_unpublish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams; - # when client start to play vhost/app/stream, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_play", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", - # "stream": "livestream" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_play http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_play http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions; - # when client stop to play vhost/app/stream, call the hook, - # the request in the POST data string is a object encode by json: - # { - # "action": "on_stop", - # "client_id": 1985, - # "ip": "192.168.1.10", "vhost": "video.test.com", "app": "live", - # "stream": "livestream" - # } - # if valid, the hook must return HTTP code 200(Stauts OK) and response - # an int value specifies the error code(0 corresponding to success): - # 0 - # support multiple api hooks, format: - # on_stop http://xxx/api0 http://xxx/api1 http://xxx/apiN - on_stop http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions; - } -} - -# the mirror filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction -vhost mirror.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine mirror { - enabled on; - vfilter { - vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# the drawtext filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#drawtext-1 -vhost drawtext.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine drawtext { - enabled on; - vfilter { - vf 'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# the crop filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#crop -vhost crop.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine crop { - enabled on; - vfilter { - vf 'crop=in_w-20:in_h-160:10:80'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# the logo filter of ffmpeg, @see: http://ffmpeg.org/ffmpeg-filters.html#overlay -vhost logo.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine logo { - enabled on; - vfilter { - i ./doc/ffmpeg-logo.png; - filter_complex 'overlay=10:10'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# audio transcode only. -# for example, FMLE publish audio codec in mp3, and donot support HLS output, -# we can transcode the audio to aac and copy video to the new stream with HLS. -vhost audio.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine acodec { - enabled on; - vcodec copy; - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# ffmpeg-copy(forward implements by ffmpeg). -# copy the video and audio to a new stream. -vhost copy.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine copy { - enabled on; - vcodec copy; - acodec copy; - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# transcode all app and stream of vhost -vhost all.transcode.vhost.com { - # the streaming transcode configs. - transcode { - # whether the transcode enabled. - # if off, donot transcode. - # default: off. - enabled on; - # the ffmpeg - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - # the transcode engine for matched stream. - # all matched stream will transcoded to the following stream. - # the transcode set name(ie. hd) is optional and not used. - engine ffsuper { - # whether the engine is enabled - # default: off. - enabled on; - # ffmpeg filters, follows the main input. - vfilter { - # the logo input file. - i ./doc/ffmpeg-logo.png; - # the ffmpeg complex filter. - # for filters, @see: http://ffmpeg.org/ffmpeg-filters.html - filter_complex 'overlay=10:10'; - } - # video encoder name. can be: - # libx264: use h.264(libx264) video encoder. - # copy: donot encoder the video stream, copy it. - vcodec libx264; - # video bitrate, in kbps - vbitrate 1500; - # video framerate. - vfps 25; - # video width, must be even numbers. - vwidth 768; - # video height, must be even numbers. - vheight 320; - # the max threads for ffmpeg to used. - vthreads 12; - # x264 profile, @see x264 -help, can be: - # high,main,baseline - vprofile main; - # x264 preset, @see x264 -help, can be: - # ultrafast,superfast,veryfast,faster,fast - # medium,slow,slower,veryslow,placebo - vpreset medium; - # other x264 or ffmpeg video params - vparams { - # ffmpeg options, @see: http://ffmpeg.org/ffmpeg.html - t 100; - # 264 params, @see: http://ffmpeg.org/ffmpeg-codecs.html#libx264 - coder 1; - b_strategy 2; - bf 3; - refs 10; - } - # audio encoder name. can be: - # libaacplus: use aac(libaacplus) audio encoder. - # copy: donot encoder the audio stream, copy it. - acodec libaacplus; - # audio bitrate, in kbps. [16, 72] for libaacplus. - abitrate 70; - # audio sample rate. for flv/rtmp, it must be: - # 44100,22050,11025,5512 - asample_rate 44100; - # audio channel, 1 for mono, 2 for stereo. - achannels 2; - # other ffmpeg audio params - aparams { - # audio params, @see: http://ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders - profile:a aac_low; - } - # output stream. variables: - # [vhost] the input stream vhost. - # [port] the intput stream port. - # [app] the input stream app. - # [stream] the input stream name. - # [engine] the tanscode engine name. - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine ffhd { - enabled on; - vcodec libx264; - vbitrate 1200; - vfps 25; - vwidth 1382; - vheight 576; - vthreads 6; - vprofile main; - vpreset medium; - vparams { - } - acodec libaacplus; - abitrate 70; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine ffsd { - enabled on; - vcodec libx264; - vbitrate 800; - vfps 25; - vwidth 1152; - vheight 480; - vthreads 4; - vprofile main; - vpreset fast; - vparams { - } - acodec libaacplus; - abitrate 60; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine fffast { - enabled on; - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine vcopy { - enabled on; - vcodec copy; - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine acopy { - enabled on; - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec copy; - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine copy { - enabled on; - vcodec copy; - acodec copy; - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# transcode all stream using the empty ffmpeg demo, donothing. -vhost ffempty.transcode.vhost.com { - transcode { - enabled on; - ffmpeg ./objs/research/ffempty; - engine empty { - enabled on; - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 2; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# transcode all app and stream of app -vhost app.transcode.vhost.com { - # the streaming transcode configs. - # if app specified, transcode all streams of app. - transcode live { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine { - enabled off; - } - } -} -# transcode specified stream. -vhost stream.transcode.vhost.com { - # the streaming transcode configs. - # if stream specified, transcode the matched stream. - transcode live/livestream { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine { - enabled off; - } - } -} - -# the vhost which forward publish streams. -vhost same.vhost.forward.vhost.com { - # forward all publish stream to the specified server. - # this used to split/forward the current stream for cluster active-standby, - # active-active for cdn to build high available fault tolerance system. - # format: {ip}:{port} {ip_N}:{port_N} - # or specify the vhost by params, @see: change.vhost.forward.vhost.com - # if vhost not specified, use the request vhost instead. - forward 127.0.0.1:1936 127.0.0.1:1937; -} -# TODO: FIXME: change the forward schema with vhost. -# [plan] the vhost which forward publish streams to other vhosts. -vhost change.vhost.forward.vhost.com { - forward 127.0.0.1:1936 127.0.0.1:1937 { - # specify the vhost to override the vhost in client request. - vhost forward2.vhost.com; - # specify the refer(pageUrl) to override the refer in client request. - refer http://srs/index.html; - } - forward 127.0.0.1:1938 { - vhost forward3.vhost.com; - } -} - -# the vhost disabled. -vhost removed.vhost.com { - # whether the vhost is enabled. - # if off, all request access denied. - # default: on - enabled off; -} - -# the vhost with hls specified. -vhost with-hls.vhost.com { - hls { - # whether the hls is enabled. - # if off, donot write hls(ts and m3u8) when publish. - # default: off - enabled on; - # the hls output path. - # the app dir is auto created under the hls_path. - # for example, for rtmp stream: - # rtmp://127.0.0.1/live/livestream - # http://127.0.0.1/live/livestream.m3u8 - # where hls_path is /hls, srs will create the following files: - # /hls/live the app dir for all streams. - # /hls/live/livestream.m3u8 the HLS m3u8 file. - # /hls/live/livestream-1.ts the HLS media/ts file. - # in a word, the hls_path is for vhost. - # default: ./objs/nginx/html - hls_path /data/nginx/html; - # the hls fragment in seconds, the duration of a piece of ts. - # default: 10 - hls_fragment 10; - # the hls window in seconds, the number of ts in m3u8. - # default: 60 - hls_window 60; - } -} -# the vhost with hls disabled. -vhost no-hls.vhost.com { - hls { - # whether the hls is enabled. - # if off, donot write hls(ts and m3u8) when publish. - # default: off - enabled off; - } -} - -# the vhost for min delay, donot cache any stream. -vhost min.delay.com { - # whether cache the last gop. - # if on, cache the last gop and dispatch to client, - # to enable fast startup for client, client play immediately. - # if off, send the latest media data to client, - # client need to wait for the next Iframe to decode and show the video. - # set to off if requires min delay; - # set to on if requires client fast startup. - # default: on - gop_cache off; - # the max live queue length in seconds. - # if the messages in the queue exceed the max length, - # drop the old whole gop. - # default: 30 - queue_length 10; -} - -# the vhost for antisuck. -vhost refer.anti_suck.com { - # the common refer for play and publish. - # if the page url of client not in the refer, access denied. - # if not specified this field, allow all. - # default: not specified. - refer github.com github.io; - # refer for publish clients specified. - # the common refer is not overrided by this. - # if not specified this field, allow all. - # default: not specified. - refer_publish github.com github.io; - # refer for play clients specified. - # the common refer is not overrided by this. - # if not specified this field, allow all. - # default: not specified. - refer_play github.com github.io; -} - -# config for the pithy print, -# which always print constant message specified by interval, -# whatever the clients in concurrency. -pithy_print { - # shared print interval for all publish clients, in milliseconds. - # if not specified, set to 1100. - publish 2000; - # shared print interval for all play clients, in milliseconds. - # if not specified, set to 1300. - play 3000; - # shared print interval for all forwarders, in milliseconds. - # if not specified, set to 2000. - forwarder 3000; - # shared print interval for all encoders, in milliseconds. - # if not specified, set to 2000. - encoder 3000; - # shared print interval for all hls, in milliseconds. - # if not specified, set to 2000. - hls 3000; -} -# vhost list, the __defaultVhost__ is the default vhost -# for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream. -# for which cannot identify the required vhost. -# for default demo. -vhost demo.srs.com { - chunk_size 60000; - enabled on; - gop_cache on; - queue_length 30; - forward 127.0.0.1:19350; - bandcheck { - enabled off; - } - hls { - enabled on; - hls_path ./objs/nginx/html; - hls_fragment 5; - hls_window 30; - } - http_hooks { - enabled on; - on_connect http://127.0.0.1:8085/api/v1/clients; - on_close http://127.0.0.1:8085/api/v1/clients; - on_publish http://127.0.0.1:8085/api/v1/streams; - on_unpublish http://127.0.0.1:8085/api/v1/streams; - on_play http://127.0.0.1:8085/api/v1/sessions; - on_stop http://127.0.0.1:8085/api/v1/sessions; - } - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine ld { - enabled on; - vfilter { - vf 'drawtext=text=SimpleRtmpServer(SRS):x=10:y=10:fontsize=30:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 1; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine sd { - enabled on; - vfilter { - vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'; - } - vcodec libx264; - vbitrate 500; - vfps 20; - vwidth 768; - vheight 320; - vthreads 1; - vprofile main; - vpreset fast; - vparams { - } - acodec libaacplus; - abitrate 40; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} -# for the players site, to play or publish. -# the flash player publisher need to transcode to support hls, -# we add players_hls vhost to support it. -vhost players { - enabled on; - gop_cache on; - transcode { - enabled on; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine hls { - enabled on; - vfilter { - vf 'drawtext=text=SRS(SimpleRtmpServer):x=10:y=10:fontcolor=#cccccc:fontfile=./doc/FreeSerifBold.ttf'; - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 1; - vprofile baseline; - vpreset superfast; - vparams { - g 100; - } - acodec libaacplus; - abitrate 30; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=players_pub/[stream]; - } - } -} -vhost players_pub { - hls { - enabled on; - hls_path ./objs/nginx/html; - hls_fragment 5; - hls_window 30; - } -} -# rtmp only, no hls, for chat(low latecy) -vhost players_pub_rtmp { - gop_cache off; - hls { - enabled off; - } -} - -# for development -vhost dev { - enabled on; - gop_cache on; - queue_length 10; - #forward 127.0.0.1:19350; - hls { - enabled off; - hls_path ./objs/nginx/html; - hls_fragment 5; - hls_window 30; - } - http_hooks { - enabled off; - on_connect http://127.0.0.1:8085/api/v1/clients; - on_close http://127.0.0.1:8085/api/v1/clients; - on_publish http://127.0.0.1:8085/api/v1/streams; - on_unpublish http://127.0.0.1:8085/api/v1/streams; - on_play http://127.0.0.1:8085/api/v1/sessions; - on_stop http://127.0.0.1:8085/api/v1/sessions; - } - transcode { - enabled off; - ffmpeg ./objs/ffmpeg/bin/ffmpeg; - engine dev { - enabled on; - vfilter { - } - vcodec libx264; - vbitrate 300; - vfps 20; - vwidth 768; - vheight 320; - vthreads 1; - vprofile baseline; - vpreset superfast; - vparams { - } - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - engine dev_acodec { - enabled on; - vcodec copy; - acodec libaacplus; - abitrate 45; - asample_rate 44100; - achannels 2; - aparams { - } - output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine]; - } - } -} - - diff --git a/trunk/scripts/_step.start.srs.19350.sh b/trunk/scripts/_step.start.srs.19350.sh index 352506bb2..08edb591b 100755 --- a/trunk/scripts/_step.start.srs.19350.sh +++ b/trunk/scripts/_step.start.srs.19350.sh @@ -2,10 +2,10 @@ src_dir='src' if [[ ! -d $src_dir ]]; then echo "错误:必须在src同目录执行脚本"; exit 1; fi -cmd="nohup ./objs/srs -c conf/srs.19350.conf > ./objs/logs/srs.19350.log 2>&1 &" +cmd="nohup ./objs/srs -c conf/demo.19350.conf > ./objs/logs/demo.19350.log 2>&1 &" echo "启动SRS转发服务器:$cmd" -pids=`ps aux|grep srs|grep "./objs"|grep "srs.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done -nohup ./objs/srs -c conf/srs.19350.conf > ./objs/logs/srs.19350.log 2>&1 & +pids=`ps aux|grep srs|grep "./objs"|grep "demo.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done +nohup ./objs/srs -c conf/demo.19350.conf > ./objs/logs/demo.19350.log 2>&1 & ret=$?; if [[ 0 -ne $ret ]]; then echo "错误:启动SRS转发服务器失败"; exit $ret; fi echo "启动SRS转发服务器成功" diff --git a/trunk/scripts/_step.start.srs.sh b/trunk/scripts/_step.start.srs.sh index de49a2064..bab8ceaf9 100755 --- a/trunk/scripts/_step.start.srs.sh +++ b/trunk/scripts/_step.start.srs.sh @@ -2,10 +2,10 @@ src_dir='src' if [[ ! -d $src_dir ]]; then echo "错误:必须在src同目录执行脚本"; exit 1; fi -cmd="nohup ./objs/srs -c conf/srs.conf >./objs/logs/srs.log 2>&1 &" +cmd="nohup ./objs/srs -c conf/demo.conf >./objs/logs/demo.log 2>&1 &" echo "启动SRS服务器:$cmd" -pids=`ps aux|grep srs|grep "./objs"|grep "srs.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done -nohup ./objs/srs -c conf/srs.conf >./objs/logs/srs.log 2>&1 & +pids=`ps aux|grep srs|grep "./objs"|grep "demo.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done +nohup ./objs/srs -c conf/demo.conf >./objs/logs/demo.log 2>&1 & ret=$?; if [[ 0 -ne $ret ]]; then echo "错误:启动SRS失败"; exit $ret; fi echo "启动SRS服务器成功" diff --git a/trunk/scripts/stop.sh b/trunk/scripts/stop.sh index 2c456471f..83ffe832f 100755 --- a/trunk/scripts/stop.sh +++ b/trunk/scripts/stop.sh @@ -1,12 +1,12 @@ #!/bin/bash echo "停止SRS服务器" -ps aux|grep srs|grep "./objs"|grep "srs.conf" -pids=`ps aux|grep srs|grep "./objs"|grep "srs.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done +ps aux|grep srs|grep "./objs"|grep "demo.conf" +pids=`ps aux|grep srs|grep "./objs"|grep "demo.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done echo "停止SRS转发服务器" -ps aux|grep srs|grep "./objs"|grep "srs.19350.conf" -pids=`ps aux|grep srs|grep "./objs"|grep "srs.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done +ps aux|grep srs|grep "./objs"|grep "demo.19350.conf" +pids=`ps aux|grep srs|grep "./objs"|grep "demo.19350.conf"|awk '{print $2}'`; for pid in $pids; do echo "结束现有进程:$pid"; kill -s SIGKILL $pid; done # step 4(optinal): start nginx for HLS echo "停止NGINX(HLS服务)"