轉自http://www.cnblogs.com/zhchongyao/archive/2010/01/22/1653803.html
先1111是管理端口,就是fms2_console文件連接到server遠程管理的時候需要用到的。
首先明確關系:
- RTMP (默認端口:1935)
- RTMPT ( http 隧道 - 默認端口: 80)
- RTMPS ( https 隧道- 默認端口: 443)
nc.connect( "rtmp://127.0.0.1:1935/myapp");
nc.connect( "rtmpt://
127.0.0.1
:80/myapp");
nc.connect( "rtmps://
127.0.0.1
:443/myapp");
rtmps用得很少。。。
連接為難題:
fms_nc.connect("rtmp://127.0.0.1/test");
這行代碼會自動嘗試RTMP:1935 以及 RTMPT:80 兩種連接方式。
如果你想提高效率,指定端口來連接,那么就這樣寫:
fms_nc.connect("rtmp://127.0.0.1:1935/test"); 這樣他不會再嘗試其他端口。說明:127.0.0.1是本地網關地址
當然你會問如果要改成其他端口,在哪里可以更改:
X(c/d..):\Program Files\Macromedia\Flash Media Server 2\conf\_defaultRoot_\Adaptor.xml
第42行:
修改為:<HostPort>:1935,443,8080</HostPort>或者你想要的:<HostPort>:8080,80</HostPort>
如果你的server有多個ip:
<HostPort>XXX.XXX.XXX.XXX:1935, 443, 80</HostPort>
然后重啟FMS(先stop,再start),如果你的iis或者web站點占用了80,那么會報錯,更改端口為空閑的端口。
協議:
rtmp 全名為:real time message protocol
如果rtmp的連接方式失敗(通常是防火牆阻止了該協議),那么flash可以使用rtmpt協議來建立HTTP tunneling.
fms_nc.connect("rtmpt://ip/test")
就可以連接成功了。
若防火牆關閉了1935,只允許80端口。那么此時你需要這么寫:fms_nc.connect("rtmpt://ip:80/test")
防火牆允許1935、80端口。
服務器端我們如果可以控制,當然會盡可能的打開常用端口,當然也會允許rtmp協議。如果問題出現在客戶端呢?看下圖:
客戶端只允許80端口,那么此時只有80端口可以連接成功。
總結:
鑒於客戶端端口以及協議的不確定性,你需要准備好處理各種情況:
思路如下:
1、<HostPort>:1935,8080,80</HostPort>
2、默認使用rtmp協議以及1935、8080、80來連接,嘗試2次。如果仍然failed,那么:
3、使用rtmpt協議(HTTP tunneling)來連接。
//開始
fms_nc.connect("rtmp://127.0.0.1/test"); //會自動嘗試可以使用的端口
//在onStatus函數里面監測狀態 如果連續兩次failed,
fms_nc.connect("rtmpt://127.0.0.1:8080/test")
//結束
通過HTTP tunneling建立的連接在傳輸視頻的時候會不穩定,所以你要時刻監測nc的狀況,如果斷開要自動重連,簡單的辦法就是通過js刷新頁面。