winlin

release 1.0r2

1 #Simple-RTMP-Server 1 #Simple-RTMP-Server
2 2
  3 +SRS/1.0,开发代号:[HuKaiqun](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Product#release10)
  4 +
3 SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。 5 SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。
4 6
5 下载发布版(github): 7 下载发布版(github):
6 -[Centos6-x86_64](http://winlinvip.github.io/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.21.zip) 8 +[Centos6-x86_64](http://winlinvip.github.io/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.27.zip)
7 其他[more...](http://winlinvip.github.io/srs.release/releases/) <br/> 9 其他[more...](http://winlinvip.github.io/srs.release/releases/) <br/>
8 下载发布版(国内阿里云镜像): 10 下载发布版(国内阿里云镜像):
9 -[Centos6-x86_64](http://www.ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.21.zip) 11 +[Centos6-x86_64](http://www.ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.27.zip)
10 其他[more...](http://www.ossrs.net/srs.release/releases/)<br/> 12 其他[more...](http://www.ossrs.net/srs.release/releases/)<br/>
11 QQ群: 365936885, by wenjie <br/> 13 QQ群: 365936885, by wenjie <br/>
12 同类产品:[BLS](https://github.com/wenjiegit/Bull-Live-Server)/[BLE](https://github.com/wenjiegit/Bull-Live-Encoder), [NGINX-RTMP](https://github.com/arut/nginx-rtmp-module), [CRTMPD](http://www.rtmpd.com/), [RED5](http://www.red5.org/), [WOWZA](http://www.wowza.com/), [FMS/AMS](http://www.adobe.com/products/adobe-media-server-standard.html) 14 同类产品:[BLS](https://github.com/wenjiegit/Bull-Live-Server)/[BLE](https://github.com/wenjiegit/Bull-Live-Encoder), [NGINX-RTMP](https://github.com/arut/nginx-rtmp-module), [CRTMPD](http://www.rtmpd.com/), [RED5](http://www.red5.org/), [WOWZA](http://www.wowza.com/), [FMS/AMS](http://www.adobe.com/products/adobe-media-server-standard.html)
@@ -362,6 +364,7 @@ Supported operating systems and hardware: @@ -362,6 +364,7 @@ Supported operating systems and hardware:
362 [2.0dev branch](https://github.com/winlinvip/simple-rtmp-server/tree/master). 364 [2.0dev branch](https://github.com/winlinvip/simple-rtmp-server/tree/master).
363 365
364 ## Releases 366 ## Releases
  367 +* 2015-02-12, [Release v1.0r2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r2), bug fixed, 1.0.27, 59507 lines.<br/>
365 * 2015-01-15, [Release v1.0r1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r1), bug fixed, 1.0.21, 59472 lines.<br/> 368 * 2015-01-15, [Release v1.0r1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r1), bug fixed, 1.0.21, 59472 lines.<br/>
366 * 2014-12-05, [Release v1.0](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0), all bug fixed, 1.0.10, 59391 lines.<br/> 369 * 2014-12-05, [Release v1.0](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0), all bug fixed, 1.0.10, 59391 lines.<br/>
367 * 2014-10-09, [Release v1.0-beta](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta), all bug fixed, 1.0.0, 59316 lines.<br/> 370 * 2014-10-09, [Release v1.0-beta](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta), all bug fixed, 1.0.0, 59316 lines.<br/>
@@ -384,6 +387,14 @@ Supported operating systems and hardware: @@ -384,6 +387,14 @@ Supported operating systems and hardware:
384 * 2013-10-17, Created.<br/> 387 * 2013-10-17, Created.<br/>
385 388
386 ## History 389 ## History
  390 +
  391 +* <strong>v1.0, 2015-02-12, [1.0r2 release(1.0.27)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r2) released. 59507 lines.</strong>
  392 +* v1.0, 2015-02-11, dev code HuKaiqun for 1.0.27.
  393 +* v1.0, 2015-02-10, for [#310](https://github.com/winlinvip/simple-rtmp-server/issues/310), the aac profile must be object plus one. 1.0.26
  394 +* v1.0, 2015-01-25, hotfix [#268](https://github.com/winlinvip/simple-rtmp-server/issues/268), refine the pcr start at 0, dts/pts plus delay. 1.0.25
  395 +* v1.0, 2015-01-25, hotfix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), refine pcr=dts-800ms and use dts/pts directly. 1.0.24
  396 +* v1.0, 2015-01-23, hotfix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), use absolutely overflow to make jwplayer happy. 1.0.23
  397 +* v1.0, 2015-01-17, hotfix [#290](https://github.com/winlinvip/simple-rtmp-server/issues/290), use iformat only for rtmp input. 1.0.22
387 * <strong>v1.0, 2015-01-15, [1.0r1 release(1.0.21)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r1) released. 59472 lines.</strong> 398 * <strong>v1.0, 2015-01-15, [1.0r1 release(1.0.21)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0r1) released. 59472 lines.</strong>
388 * v1.0, 2015-01-08, hotfix [#281](https://github.com/winlinvip/simple-rtmp-server/issues/281), fix hls bug ignore type-9 send aud. 1.0.20 399 * v1.0, 2015-01-08, hotfix [#281](https://github.com/winlinvip/simple-rtmp-server/issues/281), fix hls bug ignore type-9 send aud. 1.0.20
389 * v1.0, 2015-01-03, hotfix to remove the pageUrl for http callback. 1.0.19 400 * v1.0, 2015-01-03, hotfix to remove the pageUrl for http callback. 1.0.19
@@ -247,6 +247,13 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample @@ -247,6 +247,13 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
247 return ret; 247 return ret;
248 } 248 }
249 249
  250 + // the profile = object_id + 1
  251 + // @see aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 78,
  252 + // Table 1. A.9 ¨C MPEG-2 Audio profiles and MPEG-4 Audio object types
  253 + // so the aac_profile should plus 1, not minus 1, and nginx-rtmp used it to
  254 + // downcast aac SSR to LC.
  255 + // @see https://github.com/winlinvip/simple-rtmp-server/issues/310
  256 + // TODO: FIXME: fix the following in future version.
250 // aac_profile = audioObjectType - 1 257 // aac_profile = audioObjectType - 1
251 aac_profile--; 258 aac_profile--;
252 259
@@ -222,7 +222,7 @@ int SrsEdgeIngester::connect_app(string ep_server, string ep_port) @@ -222,7 +222,7 @@ int SrsEdgeIngester::connect_app(string ep_server, string ep_port)
222 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147 222 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147
223 SrsAmf0Object* data = req->args; 223 SrsAmf0Object* data = req->args;
224 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY)); 224 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
225 - data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 225 + data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
226 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE)); 226 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE));
227 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE)); 227 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE));
228 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL)); 228 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL));
@@ -654,7 +654,7 @@ int SrsEdgeForwarder::connect_app(string ep_server, string ep_port) @@ -654,7 +654,7 @@ int SrsEdgeForwarder::connect_app(string ep_server, string ep_port)
654 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147 654 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147
655 SrsAmf0Object* data = req->args; 655 SrsAmf0Object* data = req->args;
656 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY)); 656 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
657 - data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 657 + data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
658 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE)); 658 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE));
659 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE)); 659 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE));
660 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL)); 660 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL));
@@ -209,6 +209,13 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine) @@ -209,6 +209,13 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine)
209 return ret; 209 return ret;
210 } 210 }
211 211
  212 + // for not rtmp input, donot append the iformat,
  213 + // for example, "-f flv" before "-i udp://192.168.1.252:2222"
  214 + // @see https://github.com/winlinvip/simple-rtmp-server/issues/290
  215 + if (input.find("rtmp://") != 0) {
  216 + iformat = "";
  217 + }
  218 +
212 return ret; 219 return ret;
213 } 220 }
214 221
@@ -336,7 +336,7 @@ int SrsForwarder::connect_app(string ep_server, string ep_port) @@ -336,7 +336,7 @@ int SrsForwarder::connect_app(string ep_server, string ep_port)
336 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147 336 // @see https://github.com/winlinvip/simple-rtmp-server/issues/147
337 SrsAmf0Object* data = req->args; 337 SrsAmf0Object* data = req->args;
338 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY)); 338 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
339 - data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 339 + data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
340 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE)); 340 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE));
341 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE)); 341 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE));
342 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL)); 342 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL));
@@ -78,7 +78,9 @@ using namespace std; @@ -78,7 +78,9 @@ using namespace std;
78 78
79 // @see: NGX_RTMP_HLS_DELAY, 79 // @see: NGX_RTMP_HLS_DELAY,
80 // 63000: 700ms, ts_tbn=90000 80 // 63000: 700ms, ts_tbn=90000
81 -#define SRS_AUTO_HLS_DELAY 63000 81 +// 72000: 800ms, ts_tbn=90000
  82 +// @see https://github.com/winlinvip/simple-rtmp-server/issues/151#issuecomment-71352511
  83 +#define SRS_AUTO_HLS_DELAY 72000
82 84
83 // the mpegts header specifed the video/audio pid. 85 // the mpegts header specifed the video/audio pid.
84 #define TS_VIDEO_PID 256 86 #define TS_VIDEO_PID 256
@@ -237,7 +239,8 @@ public: @@ -237,7 +239,8 @@ public:
237 p[-1] |= 0x20; // Both Adaption and Payload 239 p[-1] |= 0x20; // Both Adaption and Payload
238 *p++ = 7; // size 240 *p++ = 7; // size
239 *p++ = 0x50; // random access + PCR 241 *p++ = 0x50; // random access + PCR
240 - p = write_pcr(p, frame->dts - SRS_AUTO_HLS_DELAY); 242 + // about the pcr, read https://github.com/winlinvip/simple-rtmp-server/issues/151#issuecomment-71352511
  243 + p = write_pcr(p, frame->dts);
241 } 244 }
242 245
243 // PES header 246 // PES header
@@ -368,10 +371,12 @@ private: @@ -368,10 +371,12 @@ private:
368 } 371 }
369 static char* write_pcr(char* p, int64_t pcr) 372 static char* write_pcr(char* p, int64_t pcr)
370 { 373 {
371 - // the pcr=dts-delay  
372 - // and the pcr maybe negative 374 + // the pcr=dts-delay, where dts = frame->dts + delay
  375 + // and the pcr should never be negative
373 // @see https://github.com/winlinvip/simple-rtmp-server/issues/268 376 // @see https://github.com/winlinvip/simple-rtmp-server/issues/268
374 - int64_t v = srs_max(0, pcr); 377 + srs_assert(pcr >= 0);
  378 +
  379 + int64_t v = pcr;
375 380
376 *p++ = (char) (v >> 25); 381 *p++ = (char) (v >> 25);
377 *p++ = (char) (v >> 17); 382 *p++ = (char) (v >> 17);
@@ -655,10 +660,15 @@ int SrsHlsMuxer::on_sequence_header() @@ -655,10 +660,15 @@ int SrsHlsMuxer::on_sequence_header()
655 bool SrsHlsMuxer::is_segment_overflow() 660 bool SrsHlsMuxer::is_segment_overflow()
656 { 661 {
657 srs_assert(current); 662 srs_assert(current);
658 -  
659 return current->duration >= hls_fragment; 663 return current->duration >= hls_fragment;
660 } 664 }
661 665
  666 +bool SrsHlsMuxer::is_segment_absolutely_overflow()
  667 +{
  668 + srs_assert(current);
  669 + return current->duration >= 2 * hls_fragment;
  670 +}
  671 +
662 int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab) 672 int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab)
663 { 673 {
664 int ret = ERROR_SUCCESS; 674 int ret = ERROR_SUCCESS;
@@ -1090,7 +1100,9 @@ int SrsHlsCache::write_audio(SrsAvcAacCodec* codec, SrsHlsMuxer* muxer, int64_t @@ -1090,7 +1100,9 @@ int SrsHlsCache::write_audio(SrsAvcAacCodec* codec, SrsHlsMuxer* muxer, int64_t
1090 // pure audio again for audio disabled. 1100 // pure audio again for audio disabled.
1091 // so we reap event when the audio incoming when segment overflow. 1101 // so we reap event when the audio incoming when segment overflow.
1092 // @see https://github.com/winlinvip/simple-rtmp-server/issues/151 1102 // @see https://github.com/winlinvip/simple-rtmp-server/issues/151
1093 - if (muxer->is_segment_overflow()) { 1103 + // we use absolutely overflow of segment to make jwplayer/ffplay happy
  1104 + // @see https://github.com/winlinvip/simple-rtmp-server/issues/151#issuecomment-71155184
  1105 + if (muxer->is_segment_absolutely_overflow()) {
1094 if ((ret = reap_segment("audio", muxer, af->pts)) != ERROR_SUCCESS) { 1106 if ((ret = reap_segment("audio", muxer, af->pts)) != ERROR_SUCCESS) {
1095 return ret; 1107 return ret;
1096 } 1108 }
@@ -192,10 +192,16 @@ public: @@ -192,10 +192,16 @@ public:
192 virtual int segment_open(int64_t segment_start_dts); 192 virtual int segment_open(int64_t segment_start_dts);
193 virtual int on_sequence_header(); 193 virtual int on_sequence_header();
194 /** 194 /**
195 - * whether video overflow,  
196 - * that is whether the current segment duration >= the segment in config 195 + * whether segment overflow,
  196 + * that is whether the current segment duration>=(the segment in config)
197 */ 197 */
198 virtual bool is_segment_overflow(); 198 virtual bool is_segment_overflow();
  199 + /**
  200 + * whether segment absolutely overflow, for pure audio to reap segment,
  201 + * that is whether the current segment duration>=2*(the segment in config)
  202 + * @see https://github.com/winlinvip/simple-rtmp-server/issues/151#issuecomment-71155184
  203 + */
  204 + virtual bool is_segment_absolutely_overflow();
199 virtual int flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab); 205 virtual int flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab);
200 virtual int flush_video(SrsMpegtsFrame* af, SrsBuffer* ab, SrsMpegtsFrame* vf, SrsBuffer* vb); 206 virtual int flush_video(SrsMpegtsFrame* af, SrsBuffer* ab, SrsMpegtsFrame* vf, SrsBuffer* vb);
201 /** 207 /**
@@ -956,7 +956,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) @@ -956,7 +956,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata)
956 } 956 }
957 957
958 // add server info to metadata 958 // add server info to metadata
959 - metadata->metadata->set("server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 959 + metadata->metadata->set("server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
960 metadata->metadata->set("primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); 960 metadata->metadata->set("primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY));
961 metadata->metadata->set("authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); 961 metadata->metadata->set("authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS));
962 962
@@ -31,9 +31,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,9 +31,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR 1 32 #define VERSION_MAJOR 1
33 #define VERSION_MINOR 0 33 #define VERSION_MINOR 0
34 -#define VERSION_REVISION 21 34 +#define VERSION_REVISION 27
  35 +
35 // server info. 36 // server info.
36 #define RTMP_SIG_SRS_KEY "SRS" 37 #define RTMP_SIG_SRS_KEY "SRS"
  38 +#define RTMP_SIG_SRS_CODE "HuKaiqun"
37 #define RTMP_SIG_SRS_ROLE "origin/edge server" 39 #define RTMP_SIG_SRS_ROLE "origin/edge server"
38 #define RTMP_SIG_SRS_NAME RTMP_SIG_SRS_KEY"(Simple RTMP Server)" 40 #define RTMP_SIG_SRS_NAME RTMP_SIG_SRS_KEY"(Simple RTMP Server)"
39 #define RTMP_SIG_SRS_URL_SHORT "github.com/winlinvip/simple-rtmp-server" 41 #define RTMP_SIG_SRS_URL_SHORT "github.com/winlinvip/simple-rtmp-server"
@@ -49,6 +51,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -49,6 +51,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 #define RTMP_SIG_SRS_RELEASE "https://github.com/winlinvip/simple-rtmp-server/tree/1.0release" 51 #define RTMP_SIG_SRS_RELEASE "https://github.com/winlinvip/simple-rtmp-server/tree/1.0release"
50 #define RTMP_SIG_SRS_HTTP_SERVER "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer#feature" 52 #define RTMP_SIG_SRS_HTTP_SERVER "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer#feature"
51 #define RTMP_SIG_SRS_VERSION __SRS_XSTR(VERSION_MAJOR)"."__SRS_XSTR(VERSION_MINOR)"."__SRS_XSTR(VERSION_REVISION) 53 #define RTMP_SIG_SRS_VERSION __SRS_XSTR(VERSION_MAJOR)"."__SRS_XSTR(VERSION_MINOR)"."__SRS_XSTR(VERSION_REVISION)
  54 +#define RTMP_SIG_SRS_SERVER RTMP_SIG_SRS_KEY"/"RTMP_SIG_SRS_VERSION"("RTMP_SIG_SRS_CODE")"
52 55
53 // internal macros, covert macro values to str, 56 // internal macros, covert macro values to str,
54 // see: read https://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification 57 // see: read https://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification
@@ -905,7 +905,7 @@ int SrsRtmpServer::response_connect_app(SrsRequest *req, const char* server_ip) @@ -905,7 +905,7 @@ int SrsRtmpServer::response_connect_app(SrsRequest *req, const char* server_ip)
905 905
906 data->set("version", SrsAmf0Any::str(RTMP_SIG_FMS_VER)); 906 data->set("version", SrsAmf0Any::str(RTMP_SIG_FMS_VER));
907 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY)); 907 data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
908 - data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 908 + data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
909 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE)); 909 data->set("srs_license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE));
910 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE)); 910 data->set("srs_role", SrsAmf0Any::str(RTMP_SIG_SRS_ROLE));
911 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL)); 911 data->set("srs_url", SrsAmf0Any::str(RTMP_SIG_SRS_URL));