diff --git a/trunk/conf/srs.conf b/trunk/conf/srs.conf index 8230d7e00..5aa39bdab 100755 --- a/trunk/conf/srs.conf +++ b/trunk/conf/srs.conf @@ -15,7 +15,129 @@ vhost __defaultVhost__ { hls_path ./objs/nginx/html; hls_fragment 5; hls_window 30; - forward 127.0.0.1:1936; + #forward 127.0.0.1:1936; + transcode { + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + engine fd{ + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 480; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams {} + acodec libaacplus; + abitrate 30; + asample_rate 22050; + achannels 2; + aparams {} + output rtmp://[vhost]:[port]/[app]/[stream]_fast; + } + } +} +# transcode all app and stream of vhost +vhost all.transcode.vhost.com { + transcode { + # the ffmpeg + ffmpeg ./objs/ffmpeg/bin/ffmpeg; + # all matched stream will transcoded to the following stream. + # the transcode set name(ie. hd) is optional and not used. + engine super{ + # video encoder name + vcodec libx264; + # video bitrate, in kbps + vbitrate 1500; + # video framerate. + vfps 25; + # video width, must be even numbers. + vwidth 1280; + # video height, must be even numbers. + vheight 720; + # the max threads for ffmpeg to used. + vthreads 12; + # x264 profile, @see x264 -help, can be: + # high,main,baseline + vprofile main; + # x264 preset, @see x264 -help, can be: + # ultrafast,superfast,veryfast,faster,fast + # medium,slow,slower,veryslow,placebo + vpreset medium; + # other x264 or ffmpeg video params + vparams { + } + # audio encoder name + acodec libaacplus; + # audio bitrate, in kbps. [16, 72] for libaacplus. + abitrate 70; + # audio sample rate. for flv/rtmp, it must be: + # 44100,22050,11025,5512 + asample_rate 44100; + # audio channel, 1 for mono, 2 for stereo. + achannels 2; + # other ffmpeg audio params + aparams { + } + # output stream. variables: + # [vhost] the input stream vhost. + # [port] the intput stream port. + # [app] the input stream app. + # [stream] the input stream name. + output rtmp://[vhost]:[port]/[app]/[stream]_super; + } + engine hd{ + vcodec libx264; + vbitrate 1200; + vfps 25; + vwidth 1024; + vheight 576; + vthreads 6; + vprofile main; + vpreset medium; + vparams {} + acodec libaacplus; + abitrate 70; + asample_rate 44100; + achannels 2; + aparams {} + output rtmp://[vhost]:[port]/[app]/[stream]_hd; + } + engine sd{ + vcodec libx264; + vbitrate 800; + vfps 25; + vwidth 720; + vheight 480; + vthreads 4; + vprofile main; + vpreset fast; + vparams {} + acodec libaacplus; + abitrate 60; + asample_rate 44100; + achannels 2; + aparams {} + output rtmp://[vhost]:[port]/[app]/[stream]_sd; + } + engine fast{ + vcodec libx264; + vbitrate 300; + vfps 20; + vwidth 480; + vheight 320; + vthreads 2; + vprofile baseline; + vpreset superfast; + vparams {} + acodec libaacplus; + abitrate 30; + asample_rate 22050; + achannels 2; + aparams {} + output rtmp://[vhost]:[port]/[app]/[stream]_fast; + } + } } # the vhost which forward publish streams. vhost forward.vhost.com { @@ -109,3 +231,4 @@ pithy_print { forwarder 3000; } + diff --git a/trunk/src/core/srs_core_config.cpp b/trunk/src/core/srs_core_config.cpp index df188c233..812bf0172 100644 --- a/trunk/src/core/srs_core_config.cpp +++ b/trunk/src/core/srs_core_config.cpp @@ -58,7 +58,7 @@ bool is_common_space(char ch) return (ch == ' ' || ch == '\t' || ch == CR || ch == LF); } -#define CONF_BUFFER_SIZE 4096 +#define CONF_BUFFER_SIZE 1024 * 1024 SrsFileBuffer::SrsFileBuffer() { @@ -369,6 +369,12 @@ int SrsConfDirective::refill_buffer(SrsFileBuffer* buffer, bool d_quoted, bool s } int size = FILE_SIZE(buffer->fd) - FILE_OFFSET(buffer->fd); + if (size > CONF_BUFFER_SIZE) { + ret = ERROR_SYSTEM_CONFIG_TOO_LARGE; + srs_error("config file too large, max=%d, actual=%d, ret=%d", + CONF_BUFFER_SIZE, size, ret); + return ret; + } if (size <= 0) { return ERROR_SYSTEM_CONFIG_EOF; diff --git a/trunk/src/core/srs_core_error.hpp b/trunk/src/core/srs_core_error.hpp index 24a5292c1..738e7f26e 100644 --- a/trunk/src/core/srs_core_error.hpp +++ b/trunk/src/core/srs_core_error.hpp @@ -84,6 +84,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define ERROR_SYSTEM_CONFIG_EOF 409 #define ERROR_SYSTEM_STREAM_BUSY 410 #define ERROR_SYSTEM_IP_INVALID 411 +#define ERROR_SYSTEM_CONFIG_TOO_LARGE 412 // see librtmp. // failed when open ssl create the dh