翻譯 pjsip開發者指南(十一)SDP協商框架

2021-09-25 18:09:49 字數 3798 閱讀 2274

chapter 11:sdp offer/answer framework

sdp offer/answer

框架是基於

rfc 3264 「an offer/answer model with the session descriptor protocol (sdp)」

。主要的作用是加速本地和遠端的**協商,並且在一方的邀請會話中協商一組**。

注意儘管這個通常用於邀請會話,這個框架本省是基於通用的

sdp協商框架(pjmedia_sdp_neg),所以這個框架也可以用於其他型別的應用。對話邀請會話提供了

sdp offer/answer

和sip

協議的整合;它能正確地解釋了相關訊息中的訊息體(例如invite、ack、prack、update),並將它們轉換為sdp offer/answer協商。

本章描述了低階別的sdp協商框架,它在標頭檔案中宣告。

11.1 sdp negotiator structure

pjmedia_sdp_neg結構體表示一般的sdp offer/answer會話,用於協商本地和遠端的sdp。

pjmedia_sdp_neg結構體存有三個sdp結構體:

initial_sdp:

初始化本地

endpoint

的能力。這個

sdp是在建立的時候傳遞給協商者的,在整個會話期間內容都不會改變(即使是在協商後)。當收到遠端新的請求(而不是從遠端收到更新的

sdp),協商者使用該

sdp去協商。

active_local_sdp:

和遠端協商後包含本地的

sdp。對話必須使用這個

sdp來啟動本地**而不是初始的

sdp。

active_remote_sdp:

包含遠端的當前

sdp。

協商者有另外兩個

sdp變數,僅用於協商處理期間,叫做neg_local_sdp和neg_remote_sdp。這些都是臨時的sdp描述,應用不能引用這些變數。

11.2 sdp negotiator session

下面的圖表展示了一版的

sdp offer/answer

會話的狀態流轉。

協商會話從pjmedia_sdp_neg_state_null開始。如果對話本地的**描述已經準備好了,並且希望傳送到遠端(通常對話是作為uac的情形下),通過傳遞本地sdp到函式pjmedia_sdp_neg_create_w_local_offer()來建立sdp協商者。該函式將會設定本地endpoint的初始能力,並且設定協商會話的狀態到 pjmedia_sdp_neg_state_local_offer

。之後初始的

dap就可以在傳出的

invite

請求中發到遠端。一旦對話收到遠端的

sdp,就必須呼叫pjmedia_sdp_neg_rx_remote_answer(函式

來提供遠端

sdp。之後協商的函式可以被呼叫。

如果對話已經有遠端**描述了(通常對話是

uas的情形),它可以通過傳遞遠端和本地

sdp到pjmedia_sdp_neg_create_w_remote_offer()來建立

sdp協商者會話。這之後,協商函式可以被呼叫。

會話建立之後,本地和遠端都必須更改會話。協商者可以處理以下兩種情形: #

對話收到遠端的

sdp。這種情形下,對話必須呼叫pjmedia_sdp_neg_rx_remote_offer(),並傳送遠端的

sdp到這個函式。協商函式的返回值取決於本地**是否需要變更。 #

本地想傳送

sdp到遠端。對話選擇下列的行為:

@

如果只是想傳送無變更的當前活躍的

sdp,可以呼叫pjmedia_sdp_neg_tx_local_offer()來獲取本地活躍的

sdp,傳送

sdp,然後等待遠端的應答。 @

想要修改當前活躍的本地**(比如修改流向,活躍的編碼等),必須使用函式pjmedia_sdp_neg_get_local(來獲取當前活躍**,更新,呼叫函式pjmedia_sdp_neg_modify_local_offer()來更新請求,傳送本地

sdp然後等待遠端的響應。

#

對話可能會想完全的修改本地**(比如修改

ip位址,修改編碼集,增加新的**列表)。這個和上面描述的更改當前**不同,因為將會改變

initial_sdp

,所以之後的協商會基於這個新的

sdp。如果對話想要這麼做,用新的本地

sdp呼叫函式pjmedia_sdp_neg_reinit_local_offer(,傳送

sdp,並等待遠端應答。

對話向遠端傳送

offer

後,必須從遠端收到響應。對話必須向協商者提供遠端

sdp,這樣才可以呼叫協商函式。對話提供遠端的應答通過呼叫pjsip_sdp_neg_rx_remote_answer()

如果遠端拒絕了本地的

offer

(488

不支援),對話必須呼叫pjsip_sdp_neg_rx_remote_answer()來提供空的遠端

sdp引數,呼叫協商函式,協商者會話才能夠恢復到之前活躍的會話描述,如果有的話。

11.3 sdp negotiation function

對話呼叫函式

pjmedia_sdp_neg_negotiate()

來協商offer

和應答,在提供了協商需要的本地和遠端

sdp後(也就是說協商者狀態為

pjmedia_sdp_neg_state_wait_nego

)。這個函式可以返回以下的結果:

#pj_success( zero),如果成功建立乙個本地和遠端sdp的協商。這種情形下,本地和遠端的活躍sdp將會儲存在會話中作為之後的引用,應用可以查詢這些活躍的sdp來啟動本地**。

#pjmedia_esdpnochange,如果本地和遠端無法達成一致,這種情形下,會話將保持之前的協商過的sdp,這些sdp將不會被修改。如果對話在會話中作為uas,就必須針對這個請求回應488響應。

#pjmedia_esdpnooffer,

如果協商者沒有傳送或收到任何

offer

#pjmedia_esdpnoanswer

,如果協商者沒有收到遠端的應答或者有其他指示錯誤的值。

這些情況下,協商函式可以設定協商狀態為

pjmedia_sdp_neg_state_done.

翻譯 pjsip開發者指南(九)認證框架

chapter 9 authentication framework pjsip提供客戶端和伺服器的認證框架。認證框架支援預設的http摘要認證,但是其他的認證方案也可以加到框架中。下面的圖表描述了框架的類圖。客戶端身份驗證框架管理客戶端到所下游伺服器的身份驗證過程。它能以正確的憑證來響應伺服器的認...

Mark NG 全球開發者大會志願翻譯

2020 11 07 我認領的是演講 ai ml如何加速小分子藥物發現 的英文校驗任務。演講的分享者黃毅汪,是法國亞創生命科學部門team leader,也是演算法工程師。因為涉及機器學習和深度學習領域的術語,在加入的時候大家填過自己的英語水平和專業背景簡介,可能比較合適吧,所以就領到了這個英文校驗...

Oracle 12 1 JDBC開發者指南

12.1用於jdk6,jdk7,低於jdk6的都不被支援 12.1的jdbc驅動也支援oracle11.x,低於11的都不被支援 jdk6以後,不再需要class.forname oracle.jdbc.oracledriver 這句話 標準jdbc驅動中executequery沒有結果集返回時會有...