在工作中,常常接觸音視訊流的傳輸,是以,整理一下關于音視訊傳輸的一些常用協定。首先最簡單的要數應用層的sip協定了。
SIP(Session Initiation Protocol)
會話初始協定,它是一個基于文本的應用層控制協定,用于建立、修改和釋放一個或多個參與者的會話。其應用特别廣泛,可以說有有IP網絡的地方就有SIP協定的存在。我們公司主要是應用在音視訊資料傳輸方面。
sip主要由四部分組成:
-
SIP 使用者代理
user agent, 終端使用者裝置,簡單說就是使用者使用的裝置,該裝置與使用者代理伺服器互動。
-
SIP 注冊伺服器
SIP 注冊伺服器是包含域中所有使用者代理的位置的資料庫。在 SIP 通信中,這些伺服器會檢索出對方的 IP 位址和其他相關資訊,并将其發送到 SIP 代理伺服器。
-
SIP 代理伺服器
SIP 代理伺服器接受 SIP UA 的會話請求并查詢 SIP 注冊伺服器,擷取收件方 UA 的位址資訊。然後,它将會話邀請資訊直接轉發給收件方 UA(如果它位于同一域中)或代理伺服器(如果 UA 位于另一域中)。
-
SIP 重定向伺服器
SIP 重定向伺服器允許 SIP 代理伺服器将 SIP 會話邀請資訊定向到外部域。SIP 重定向伺服器可以與 SIP 注冊伺服器和 SIP 代理伺服器同在一個硬體上。
下圖中是兩個使用者通過sip服務進行呼叫對話的過程。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cXTxUERPdXW61EM4wmYwhGWhxGZzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuMzMyAjMykTM5ITNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 使用者1向代理伺服器發送會話消息,說明想要尋找使用者2
- 代理伺服器沒有使用者2的資訊,即找不到使用者2,向注冊伺服器請求幫助,尋找使用者2
- 注冊伺服器中由所用的使用者的注冊消息,找到2的資訊後,傳回給代理伺服器,此時代理伺服器有了使用者1 和使用者2的資訊
- 代理伺服器向使用者2發送消息,
- 使用者2響應代理伺服器請求
- 代理伺服器響應使用者1的呼叫請求,
- 因為使用者1和使用者2不能夠直接對話,隻能通過代理伺服器對話,是以步驟1到步驟6即是二者在互動的過程。當步驟1-6走完之後,使用者1和使用者2就可以知道對方的所在,就能夠單獨對話,而不再靠代理伺服器傳話了。
SIP協定是一個Client/Sever協定,是以SIP消息分兩種:請求消息和響應消息。請求消息是SIP用戶端為了激活特定操作而發給伺服器端的消息。
常用的SIP請求消息如下:
- INVITE:表示主叫使用者發起會話請求,邀請其他使用者加入一個會話。也可以用在呼叫建立後用于更新會話(此時該INVITE又稱為Re-invite)。
- ACK:用戶端向伺服器端證明它已經收到了對INVITE請求的最終響應。
- PRACK:表示對1xx響應消息的确認請求消息。
- BYE:表示終止一個已經建立的呼叫。
- CANCEL:表示在收到對請求的最終響應之前取消該請求,對于已完成的請求則無影響。
- REGISTER:表示用戶端向SIP伺服器端注冊列在To字段中的位址資訊。
- OPTIONS:表示查詢被叫的相關資訊和功能。
在使用sip伺服器的過程中,互相發消息的過程中經常會碰見一些代碼,下面是一些常用的互動結果碼,我們可以熟悉一下:
100試呼叫(Trying)
180振鈴(Ringing)
181呼叫正在前轉(Call is Being Forwarded)
200成功響應(OK)
302臨時遷移(Moved Temporarily)
400錯誤請求(Bad Request)
401未授權(Unauthorized)
403禁止(Forbidden)
404使用者不存在(Not Found)
408請求逾時(Request Timeout)
480暫時無人接聽(Temporarily Unavailable)
486線路忙(Busy Here)
504伺服器逾時(Server Time-out)
600全忙(Busy Everywhere)
對于sip服務,我公司隻是應用于音視訊的資料互動傳輸過程,實際應用為,nvr向伺服器發送視訊流,視訊流的建立過程就首先使用到了sip服務。而後進行adp協定互動,最終發送視訊流。達到視訊流傳輸到指定位址的目的。