天天看點

SIP (會話初始協定)初了解

在工作中,常常接觸音視訊流的傳輸,是以,整理一下關于音視訊傳輸的一些常用協定。首先最簡單的要數應用層的sip協定了。

SIP(Session Initiation Protocol)

會話初始協定,它是一個基于文本的應用層控制協定,用于建立、修改和釋放一個或多個參與者的會話。其應用特别廣泛,可以說有有IP網絡的地方就有SIP協定的存在。我們公司主要是應用在音視訊資料傳輸方面。

sip主要由四部分組成:

  1. SIP 使用者代理

    user agent, 終端使用者裝置,簡單說就是使用者使用的裝置,該裝置與使用者代理伺服器互動。

  2. SIP 注冊伺服器

    SIP 注冊伺服器是包含域中所有使用者代理的位置的資料庫。在 SIP 通信中,這些伺服器會檢索出對方的 IP 位址和其他相關資訊,并将其發送到 SIP 代理伺服器。

  3. SIP 代理伺服器

    SIP 代理伺服器接受 SIP UA 的會話請求并查詢 SIP 注冊伺服器,擷取收件方 UA 的位址資訊。然後,它将會話邀請資訊直接轉發給收件方 UA(如果它位于同一域中)或代理伺服器(如果 UA 位于另一域中)。

  4. SIP 重定向伺服器

    SIP 重定向伺服器允許 SIP 代理伺服器将 SIP 會話邀請資訊定向到外部域。SIP 重定向伺服器可以與 SIP 注冊伺服器和 SIP 代理伺服器同在一個硬體上。

下圖中是兩個使用者通過sip服務進行呼叫對話的過程。

SIP (會話初始協定)初了解
  1. 使用者1向代理伺服器發送會話消息,說明想要尋找使用者2
  2. 代理伺服器沒有使用者2的資訊,即找不到使用者2,向注冊伺服器請求幫助,尋找使用者2
  3. 注冊伺服器中由所用的使用者的注冊消息,找到2的資訊後,傳回給代理伺服器,此時代理伺服器有了使用者1 和使用者2的資訊
  4. 代理伺服器向使用者2發送消息,
  5. 使用者2響應代理伺服器請求
  6. 代理伺服器響應使用者1的呼叫請求,
  7. 因為使用者1和使用者2不能夠直接對話,隻能通過代理伺服器對話,是以步驟1到步驟6即是二者在互動的過程。當步驟1-6走完之後,使用者1和使用者2就可以知道對方的所在,就能夠單獨對話,而不再靠代理伺服器傳話了。

SIP協定是一個Client/Sever協定,是以SIP消息分兩種:請求消息和響應消息。請求消息是SIP用戶端為了激活特定操作而發給伺服器端的消息。

常用的SIP請求消息如下:

  1. INVITE:表示主叫使用者發起會話請求,邀請其他使用者加入一個會話。也可以用在呼叫建立後用于更新會話(此時該INVITE又稱為Re-invite)。
  2. ACK:用戶端向伺服器端證明它已經收到了對INVITE請求的最終響應。
  3. PRACK:表示對1xx響應消息的确認請求消息。
  4. BYE:表示終止一個已經建立的呼叫。
  5. CANCEL:表示在收到對請求的最終響應之前取消該請求,對于已完成的請求則無影響。
  6. REGISTER:表示用戶端向SIP伺服器端注冊列在To字段中的位址資訊。
  7. 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協定互動,最終發送視訊流。達到視訊流傳輸到指定位址的目的。

繼續閱讀