From d6948d613f528aefaa6c1dbeffbd424e2293c107 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 25 Apr 2014 15:27:50 +0800 Subject: [PATCH] add author byteman for h264 to flv. --- AUTHORS.txt | 1 + trunk/conf/full.conf | 24 ++++++++++++++++++++++++ trunk/src/app/srs_app_config.cpp | 16 ++++++++++++++++ trunk/src/app/srs_app_config.hpp | 5 ++++- trunk/src/app/srs_app_rtmp_conn.cpp | 4 +++- 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index b5db85c51..2f9444f3e 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -5,3 +5,4 @@ Authors ordered by first contribution. * xiangcheng.liu * naijia.liu * alcoholyi +* byteman diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index 5a5b5ea54..5faf13b05 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -91,6 +91,30 @@ http_stream { vhost __defaultVhost__ { } +# 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: [: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; +} +# vhost for edge, chnage vhost. +vhost change.edge.srs.com { + mode remote; + origin 127.0.0.1:1935 localhost:1935 { + # specify the vhost to override the vhost in client request. + vhost edge2.srs.com; + # specify the refer(pageUrl) to override the refer in client request. + refer http://srs/index.html; + } +} + # vhost for dvr vhost dvr.srs.com { # dvr RTMP stream to file, diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index bba0d4322..236df8984 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -1805,6 +1805,22 @@ int SrsConfig::get_bw_check_limit_kbps(const string &vhost) return ::atoi(conf->arg0().c_str()); } +bool SrsConfig::get_vhost_is_edge(std::string vhost) +{ + SrsConfDirective* conf = get_vhost(vhost); + + if (!conf) { + return false; + } + + conf = conf->get("mode"); + if (!conf || conf->arg0() != "remote") { + return false; + } + + return true; +} + SrsConfDirective* SrsConfig::get_transcode(string vhost, string scope) { SrsConfDirective* conf = get_vhost(vhost); diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index 1042e2a2b..70ec317f6 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -163,7 +163,7 @@ public: virtual int get_pithy_print_ingester(); virtual int get_pithy_print_hls(); virtual int get_pithy_print_play(); -// vhost section +// vhost specified section public: virtual SrsConfDirective* get_vhost(std::string vhost); virtual void get_vhosts(std::vector& vhosts); @@ -190,6 +190,9 @@ public: virtual std::string get_bw_check_key(const std::string& vhost); virtual int get_bw_check_interval_ms(const std::string& vhost); virtual int get_bw_check_limit_kbps(const std::string& vhost); +// vhost edge section +public: + virtual bool get_vhost_is_edge(std::string vhost); // vhost transcode section public: virtual SrsConfDirective* get_transcode(std::string vhost, std::string scope); diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 7c03aeffe..1bcfeae26 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -286,8 +286,10 @@ int SrsRtmpConn::stream_service_cycle() return ret; } + bool vhost_is_edge = _srs_config->get_vhost_is_edge(req->vhost); bool enabled_cache = _srs_config->get_gop_cache(req->vhost); - srs_trace("source found, url=%s, enabled_cache=%d", req->get_stream_url().c_str(), enabled_cache); + srs_trace("source found, url=%s, enabled_cache=%d, edge=%d", + req->get_stream_url().c_str(), enabled_cache, vhost_is_edge); source->set_cache(enabled_cache); switch (type) {