FMS (端口問題)如何穿透防火牆


 

轉自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刷新頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM