├── LICENSE ├── README.md ├── conf ├── default-panel.conf ├── hls.conf ├── mime.types ├── nginx.conf └── slimstat.conf ├── logs ├── access.log └── error.log ├── nginx.exe ├── option.txt ├── stat-option.txt ├── temp └── temp.txt ├── www ├── GrindPlayer.swf ├── Main.swf ├── ParsedQueryString.js ├── crossdomain.xml ├── flashlsOSMF.swf ├── index.html ├── stat.xsl ├── swfobject.js └── vod.html ├── 啟動 nginx 服務.bat └── 結束 nginx 服務.bat /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2014, Roman Arutyunyan 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 2. Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 14 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 17 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | nginx-rtmp-win32 2 | ================ 3 | 4 | Nginx: 1.12.1 5 | Nginx-Rtmp-Module: 1.2.0 6 | openssl-1.1.0f 7 | pcre-8.41 8 | zlib-1.2.11 9 | 10 | 11 | Edit option.txt to add your ingest. 12 | -------------------------------------------------------------------------------- /conf/default-panel.conf: -------------------------------------------------------------------------------- 1 | listen $httpport; 2 | 3 | location / { 4 | root www; 5 | } 6 | 7 | location /stat { 8 | rtmp_stat all; 9 | rtmp_stat_stylesheet stat.xsl; 10 | } 11 | 12 | location /stat.xsl { 13 | root www; 14 | } 15 | 16 | location /hls { 17 | #server hls fragments 18 | types{ 19 | application/vnd.apple.mpegurl m3u8; 20 | video/mp2t ts; 21 | } 22 | alias temp/hls; 23 | expires -1; 24 | } -------------------------------------------------------------------------------- /conf/hls.conf: -------------------------------------------------------------------------------- 1 | application hls { 2 | live on; 3 | hls on; 4 | hls_path temp/hls; 5 | hls_fragment 8s; 6 | } -------------------------------------------------------------------------------- /conf/mime.types: -------------------------------------------------------------------------------- 1 | 2 | types { 3 | text/html html htm shtml; 4 | text/css css; 5 | text/xml xml; 6 | image/gif gif; 7 | image/jpeg jpeg jpg; 8 | application/x-javascript js; 9 | application/atom+xml atom; 10 | application/rss+xml rss; 11 | 12 | text/mathml mml; 13 | text/plain txt; 14 | text/vnd.sun.j2me.app-descriptor jad; 15 | text/vnd.wap.wml wml; 16 | text/x-component htc; 17 | 18 | image/png png; 19 | image/tiff tif tiff; 20 | image/vnd.wap.wbmp wbmp; 21 | image/x-icon ico; 22 | image/x-jng jng; 23 | image/x-ms-bmp bmp; 24 | image/svg+xml svg svgz; 25 | image/webp webp; 26 | 27 | application/java-archive jar war ear; 28 | application/mac-binhex40 hqx; 29 | application/msword doc; 30 | application/pdf pdf; 31 | application/postscript ps eps ai; 32 | application/rtf rtf; 33 | application/vnd.ms-excel xls; 34 | application/vnd.ms-powerpoint ppt; 35 | application/vnd.wap.wmlc wmlc; 36 | application/vnd.google-earth.kml+xml kml; 37 | application/vnd.google-earth.kmz kmz; 38 | application/x-7z-compressed 7z; 39 | application/x-cocoa cco; 40 | application/x-java-archive-diff jardiff; 41 | application/x-java-jnlp-file jnlp; 42 | application/x-makeself run; 43 | application/x-perl pl pm; 44 | application/x-pilot prc pdb; 45 | application/x-rar-compressed rar; 46 | application/x-redhat-package-manager rpm; 47 | application/x-sea sea; 48 | application/x-shockwave-flash swf; 49 | application/x-stuffit sit; 50 | application/x-tcl tcl tk; 51 | application/x-x509-ca-cert der pem crt; 52 | application/x-xpinstall xpi; 53 | application/xhtml+xml xhtml; 54 | application/zip zip; 55 | 56 | application/octet-stream bin exe dll; 57 | application/octet-stream deb; 58 | application/octet-stream dmg; 59 | application/octet-stream eot; 60 | application/octet-stream iso img; 61 | application/octet-stream msi msp msm; 62 | 63 | audio/midi mid midi kar; 64 | audio/mpeg mp3; 65 | audio/ogg ogg; 66 | audio/x-m4a m4a; 67 | audio/x-realaudio ra; 68 | 69 | video/3gpp 3gpp 3gp; 70 | video/mp4 mp4; 71 | video/mpeg mpeg mpg; 72 | video/quicktime mov; 73 | video/webm webm; 74 | video/x-flv flv; 75 | video/x-m4v m4v; 76 | video/x-mng mng; 77 | video/x-ms-asf asx asf; 78 | video/x-ms-wmv wmv; 79 | video/x-msvideo avi; 80 | video/mp2t ts; 81 | application/vnd.apple.mpegurl m3u8; 82 | 83 | } 84 | -------------------------------------------------------------------------------- /conf/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | 3 | error_log logs/error.log debug; 4 | 5 | events { 6 | worker_connections 1024; 7 | } 8 | 9 | rtmp { 10 | server { 11 | listen 1935; 12 | chunk_size 8192; 13 | 14 | application live { 15 | live on; 16 | record off; 17 | meta copy; 18 | include ../option.txt; 19 | } 20 | # include hls.conf; 21 | } 22 | } 23 | 24 | ### 啟用流量統計功能,詳細設定請更改 stat-option.txt 的內容 25 | #include ../stat-option.txt; 26 | -------------------------------------------------------------------------------- /conf/slimstat.conf: -------------------------------------------------------------------------------- 1 | listen $httpport; 2 | 3 | location / { 4 | rtmp_stat all; 5 | rtmp_stat_stylesheet stat.xsl; 6 | } -------------------------------------------------------------------------------- /logs/access.log: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /logs/error.log: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nginx.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miaulightouch/nginx-rtmp-win32/790f2d71351306f7ee37d145715e674fc3a50884/nginx.exe -------------------------------------------------------------------------------- /option.txt: -------------------------------------------------------------------------------- 1 | push rtmp://live-ams.twitch.tv/app/live_XYZ_ZXY; 2 | push rtmp://live.hitbox.tv/push/username?key=XYZ; -------------------------------------------------------------------------------- /stat-option.txt: -------------------------------------------------------------------------------- 1 | http { 2 | server { 3 | 4 | ### 網頁使用 port 5 | set $httpport 8080; 6 | 7 | ##### 8 | # 9 | # 以下請擇一啟用 10 | 11 | ### 流量統計網頁 (基礎),去除#號啟用(須重新啟動程式) 12 | include slimstat.conf; 13 | 14 | ### 流量統計網頁 (進階),去除#號啟用(須重新啟動程式) 15 | # include default-panel.conf; 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /temp/temp.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /www/GrindPlayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miaulightouch/nginx-rtmp-win32/790f2d71351306f7ee37d145715e674fc3a50884/www/GrindPlayer.swf -------------------------------------------------------------------------------- /www/Main.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miaulightouch/nginx-rtmp-win32/790f2d71351306f7ee37d145715e674fc3a50884/www/Main.swf -------------------------------------------------------------------------------- /www/ParsedQueryString.js: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * 3 | * ParsedQueryString version 1.0 4 | * Copyright 2007, Jeff Mott . All rights reserved. 5 | * 6 | * Redistribution and use in source and binary forms with or without 7 | * modification are permitted provided that the above copyright notice, 8 | * this condition, and the following disclaimer are retained. 9 | * 10 | * THIS SOFTWARE IS PROVIDED AS IS, AND ANY EXPRESS OR IMPLIED WARRANTIES, 11 | * INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 12 | * FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT 15 | * LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 16 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 17 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 18 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 19 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 | * 21 | ******************************************************************************/ 22 | 23 | function ParsedQueryString() { 24 | this._init(); 25 | } 26 | 27 | ParsedQueryString.version = '1.0'; 28 | 29 | ParsedQueryString.prototype = 30 | { 31 | _init: 32 | function () 33 | { 34 | this._parameters = {}; 35 | 36 | if (location.search.length <= 1) 37 | return; 38 | var pairs = location.search.substr(1).split(/[&;]/); 39 | for (var i = 0; i < pairs.length; i++) 40 | { 41 | var pair = pairs[i].split(/=/); 42 | var name = this._decodeURL(pair[0]); 43 | if (Boolean(pair[1])) 44 | { 45 | var value = this._decodeURL(pair[1]); 46 | if (Boolean(this._parameters[name])) 47 | this._parameters[name].push(value); 48 | else 49 | this._parameters[name] = [value]; 50 | } 51 | } 52 | }, 53 | 54 | _decodeURL: 55 | function (url) { 56 | return decodeURIComponent(url.replace(/\+/g, " ")); 57 | }, 58 | 59 | param: 60 | function (name) 61 | { 62 | if (Boolean(this._parameters[name])) 63 | return this._parameters[name][0]; 64 | else 65 | return ""; 66 | }, 67 | 68 | params: 69 | function (name) 70 | { 71 | if (Boolean(name)) 72 | { 73 | if (Boolean(this._parameters[name])) 74 | { 75 | var values = []; 76 | for (var i = 0; i < this._parameters[name].length; i++) 77 | values.push(this._parameters[name][i]); 78 | return values; 79 | } 80 | else 81 | return []; 82 | } 83 | else 84 | { 85 | var names = []; 86 | for (var name in this._parameters) 87 | names.push(name); 88 | return names; 89 | } 90 | } 91 | }; 92 | -------------------------------------------------------------------------------- /www/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /www/flashlsOSMF.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miaulightouch/nginx-rtmp-win32/790f2d71351306f7ee37d145715e674fc3a50884/www/flashlsOSMF.swf -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | NodeMedia Rtmp 直播测试器 15 | 16 | 17 | 23 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 61 | 62 | 63 | 67 |
68 | RTMP 点播测试器 RTMP 流监控 获取Android & iOS RTMP 开发SDK 69 |
70 |
71 |

72 | To view this page ensure that Adobe Flash Player version 73 | 11.1.0 or greater is installed. 74 |

75 | 80 |
81 | 82 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /www/stat.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | RTMP statistics 16 | 17 | 18 | 19 |
20 | Generated by 21 | nginx-rtmp-module , 22 | nginx , 23 | pid , 24 | built   25 | 26 | 27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 58 | 63 | 70 | 77 | 83 | 84 | 85 |
RTMP#clientsVideoAudioIn bytesOut bytesIn bits/sOut bits/sStateTime
Accepted: codecbits/ssizefpscodecbits/sfreqchan 54 | 55 | 56 | 57 | 59 | 60 | 61 | 62 | 64 | 65 | 66 | 67 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 76 | 78 | 79 | 80 | 81 | 82 |
86 |
87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | live streams 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | vod streams 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | #cccccc 131 | #dddddd 132 | 133 | 134 | 135 | 136 | 137 | var d=document.getElementById('-'); 138 | d.style.display=d.style.display=='none'?'':'none'; 139 | return false 140 | 141 | 142 | 143 | [EMPTY] 144 | 145 | 146 | 147 | 148 | 149 |    150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 |   166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | - 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 |
IdStateAddressFlash versionPage URLSWF URLDroppedTimestampA-VTime
231 | 232 | 233 |
234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | d 245 | 246 | 247 | 248 | h 249 | 250 | 251 | 252 | m 253 | 254 | 255 | s 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | T 269 | 270 | 271 | G 272 | 273 | 274 | M 275 | 276 | K 277 | 278 | 279 | 280 | b 281 | B 282 | 283 | /s 284 | 285 | 286 | 287 | 288 | 289 | active 290 | idle 291 | 292 | 293 | 294 | 295 | 296 | 297 | publishing 298 | playing 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | #cccccc 308 | #eeeeee 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | http://apps.db.ripe.net/search/query.html?searchtext= 317 | 318 | whois 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | publishing 345 | 346 | 347 | 348 | active 349 | 350 | 351 | 352 | x 353 | 354 | 355 |
356 | -------------------------------------------------------------------------------- /www/swfobject.js: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 4 | 5 | 6 | Rtmp|HLS 点播测试器 7 | 8 | 9 | 10 | 11 | 12 | 108 |

Nginx-Rtmp-Server

109 |

110 | RTMP 直播测试器 RTMP 流监控 获取Android & iOS RTMP 开发SDK 111 |

112 |
113 |

114 | Alternative content 115 |

116 |
117 |
118 |
119 |

120 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /啟動 nginx 服務.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miaulightouch/nginx-rtmp-win32/790f2d71351306f7ee37d145715e674fc3a50884/啟動 nginx 服務.bat -------------------------------------------------------------------------------- /結束 nginx 服務.bat: -------------------------------------------------------------------------------- 1 | @nginx -s stop --------------------------------------------------------------------------------