關於RTSP-Over-HTTP
一、概述
RTSP-Over-HTTP的關鍵(同時也是全部內容)在於:讓RTSP報文通過HTTP端口(即80端口)通信。
我們知道RTSP的標準端口是554,但是由於各種不同的防火墻等安全策略配置的原因,客戶端在訪問554端口時可能存在限制,從而無法正常傳輸RTSP報文。
但是HTTP端口(80端口)是普遍開放的,於是就有了讓RTSP報文通過80端口透傳的想法,即RTSP-Over-HTTP。
二、暫無標準
目前RTSP-Over-HTTP沒有標準做法,蘋果公司出了一份非正式文檔公開在外,並且也被LIVE555等支持。
三、LIVE555的RTSP-Over-HTTP
對照著蘋果公司的“Tunneling QuickTime RTSP and RTP over HTTP”文檔,LIVE555的具體做法如下:
首先客戶端開啟2個socket鏈接服務器HTTP端口,我們稱這2個socket分別為“數據socket”和“命令socket”。
Step 1、客戶端通過“數據socket”發送HTTP GET命令,請求RTSP鏈接。
Step 2、服務器通過“數據socket”響應HTTP GET命令,並回復成功/失敗。
Step 3、客戶端創建“命令socket”,並通過“命令socket”發送HTTP POST命令,建立RTSP會話。
至此,HTTP的輔助功能完成,服務器不返回客戶端的HTTP POST命令。接下來是RTSP在HTTP端口上的標準流程,但是需要通過2個socket協同完成,“命令socket
Step 4、客戶端通過“命令socket”發送RTSP命令(BASE64編碼加密)。
Step 5、服務器通過“數據socket”響應RTSP命令(明文)。
Step 6、重復Step4-Step5,直到客戶端發送RTSP PLAY命令,服務器響應RTSP PLAY命令。
Step 7、服務器通過“數據socket”向客戶端傳輸音視頻數據
數據交互完畢後。。。
Step 8、客戶端通過“命令socket”發送RTSP TEARDOWN命令(BASE64編碼加密)
Step 9、服務器通過“數據socket”響應RTSP TEARDOWN命令(明文)。
Step 10、關閉2個socket。
四、HTTP透傳現狀
各個廠家的音視頻服務器客戶端之所以兼容RTSP協議,為的就是RTSP協議的標準通用,不同廠家的設備可以相互兼容。
如果套了一層非標準非通用的透傳協議,那麽各個廠家就失去了做RTSP-Over-HTTP的理由,而且他們大都有自己的私有音視頻傳輸協議,這時候,他們往往會問這麽一個問題:為什麽不用自己的私有協議做HTTP透傳呢?
所有,市場上另有一種透傳做法就是利用私有協議通過HTTP透傳,而不是RTSP,反正也解決了防火墻問題。
myRtspClient暫不支持RTSP-Over-HTTP
五、相關鏈接
LIVE555 RTSP-Over-HTTP透傳示例:http://www.rosoo.net/a/201509/17373.html
LIVE555 RTSP-Over-HTTP透傳wireshark抓包(透傳端口8000):https://pan.baidu.com/s/1hrNWyna
關於RTSP-Over-HTTP