winlin

add author byteman for h264 to flv.

@@ -5,3 +5,4 @@ Authors ordered by first contribution. @@ -5,3 +5,4 @@ Authors ordered by first contribution.
5 * xiangcheng.liu<liuxc0116@foxmail.com> 5 * xiangcheng.liu<liuxc0116@foxmail.com>
6 * naijia.liu<youngcow@youngcow.net> 6 * naijia.liu<youngcow@youngcow.net>
7 * alcoholyi<alcoholyi@qq.com> 7 * alcoholyi<alcoholyi@qq.com>
  8 +* byteman<wangchen2011@gmail.com>
@@ -91,6 +91,30 @@ http_stream { @@ -91,6 +91,30 @@ http_stream {
91 vhost __defaultVhost__ { 91 vhost __defaultVhost__ {
92 } 92 }
93 93
  94 +# vhost for edge, edge and origin is the same vhost
  95 +vhost same.edge.srs.com {
  96 + # the mode of vhost, local or remote.
  97 + # local: vhost is origin vhost, which provides stream source.
  98 + # remote: vhost is edge vhost, which pull/push to origin.
  99 + # default: local
  100 + mode remote;
  101 + # for edge(remote mode), user must specifies the origin server
  102 + # format as: <server_name|ip>[:port]
  103 + # @remark user can specifies multiple origin for error backup, by space,
  104 + # for example, 192.168.1.100:1935 192.168.1.101:1935 192.168.1.102:1935
  105 + origin 127.0.0.1:1935 localhost:1935;
  106 +}
  107 +# vhost for edge, chnage vhost.
  108 +vhost change.edge.srs.com {
  109 + mode remote;
  110 + origin 127.0.0.1:1935 localhost:1935 {
  111 + # specify the vhost to override the vhost in client request.
  112 + vhost edge2.srs.com;
  113 + # specify the refer(pageUrl) to override the refer in client request.
  114 + refer http://srs/index.html;
  115 + }
  116 +}
  117 +
94 # vhost for dvr 118 # vhost for dvr
95 vhost dvr.srs.com { 119 vhost dvr.srs.com {
96 # dvr RTMP stream to file, 120 # dvr RTMP stream to file,
@@ -1805,6 +1805,22 @@ int SrsConfig::get_bw_check_limit_kbps(const string &vhost) @@ -1805,6 +1805,22 @@ int SrsConfig::get_bw_check_limit_kbps(const string &vhost)
1805 return ::atoi(conf->arg0().c_str()); 1805 return ::atoi(conf->arg0().c_str());
1806 } 1806 }
1807 1807
  1808 +bool SrsConfig::get_vhost_is_edge(std::string vhost)
  1809 +{
  1810 + SrsConfDirective* conf = get_vhost(vhost);
  1811 +
  1812 + if (!conf) {
  1813 + return false;
  1814 + }
  1815 +
  1816 + conf = conf->get("mode");
  1817 + if (!conf || conf->arg0() != "remote") {
  1818 + return false;
  1819 + }
  1820 +
  1821 + return true;
  1822 +}
  1823 +
1808 SrsConfDirective* SrsConfig::get_transcode(string vhost, string scope) 1824 SrsConfDirective* SrsConfig::get_transcode(string vhost, string scope)
1809 { 1825 {
1810 SrsConfDirective* conf = get_vhost(vhost); 1826 SrsConfDirective* conf = get_vhost(vhost);
@@ -163,7 +163,7 @@ public: @@ -163,7 +163,7 @@ public:
163 virtual int get_pithy_print_ingester(); 163 virtual int get_pithy_print_ingester();
164 virtual int get_pithy_print_hls(); 164 virtual int get_pithy_print_hls();
165 virtual int get_pithy_print_play(); 165 virtual int get_pithy_print_play();
166 -// vhost section 166 +// vhost specified section
167 public: 167 public:
168 virtual SrsConfDirective* get_vhost(std::string vhost); 168 virtual SrsConfDirective* get_vhost(std::string vhost);
169 virtual void get_vhosts(std::vector<SrsConfDirective*>& vhosts); 169 virtual void get_vhosts(std::vector<SrsConfDirective*>& vhosts);
@@ -190,6 +190,9 @@ public: @@ -190,6 +190,9 @@ public:
190 virtual std::string get_bw_check_key(const std::string& vhost); 190 virtual std::string get_bw_check_key(const std::string& vhost);
191 virtual int get_bw_check_interval_ms(const std::string& vhost); 191 virtual int get_bw_check_interval_ms(const std::string& vhost);
192 virtual int get_bw_check_limit_kbps(const std::string& vhost); 192 virtual int get_bw_check_limit_kbps(const std::string& vhost);
  193 +// vhost edge section
  194 +public:
  195 + virtual bool get_vhost_is_edge(std::string vhost);
193 // vhost transcode section 196 // vhost transcode section
194 public: 197 public:
195 virtual SrsConfDirective* get_transcode(std::string vhost, std::string scope); 198 virtual SrsConfDirective* get_transcode(std::string vhost, std::string scope);
@@ -286,8 +286,10 @@ int SrsRtmpConn::stream_service_cycle() @@ -286,8 +286,10 @@ int SrsRtmpConn::stream_service_cycle()
286 return ret; 286 return ret;
287 } 287 }
288 288
  289 + bool vhost_is_edge = _srs_config->get_vhost_is_edge(req->vhost);
289 bool enabled_cache = _srs_config->get_gop_cache(req->vhost); 290 bool enabled_cache = _srs_config->get_gop_cache(req->vhost);
290 - srs_trace("source found, url=%s, enabled_cache=%d", req->get_stream_url().c_str(), enabled_cache); 291 + srs_trace("source found, url=%s, enabled_cache=%d, edge=%d",
  292 + req->get_stream_url().c_str(), enabled_cache, vhost_is_edge);
291 source->set_cache(enabled_cache); 293 source->set_cache(enabled_cache);
292 294
293 switch (type) { 295 switch (type) {