Darwin中RTSP協議的實現

2021-07-25 08:39:47 字數 2173 閱讀 8491

基本概念

rtsp協議的實現

伺服器收到rtsp請求後會建立乙個rtsprequest物件,rtsprequest物件是由若干屬性構成的,這些屬性描述了乙個rtsp請求的方方面面。剛剛建立的rtsprequest物件只有qtssrtspreqfullrequest乙個屬性被賦值,qtssrtspreqfullrequest的值是乙個完整的rtsp請求,就像下面的樣子:

describe rtsp: rtsp/1.0

cseq: 1

user-agent: qts/1.0

接下來,伺服器按順序呼叫註冊了特定角色的模組。需要指出的是,註冊了同一角色的不同模組的呼叫次序是不確定的。如圖所示為對rtsp請求的處理過程:

第乙個被呼叫的角色是rtsp filter role,呼叫的時候會攜帶rtsprequest物件作為引數。模組可以對rtsprequest的qtssrtspreqfullrequest屬性進行修改。伺服器根據被呼叫的模組是否對請求做了應答來決定後面的呼叫,如果註冊了rtsp filter role的某乙個模組在被呼叫的時候對請求作出了應答,伺服器將立即呼叫註冊了rtsp postprocessor role的模組,不再呼叫其他尚未呼叫的註冊了rtsp filter role的模組,否則伺服器呼叫其它註冊了rtsp filter role的模組,所有註冊了rtsp filter role的模組都被呼叫後,伺服器對rtsp請求進行解析,通過分析qtssrtspreqfullrequest為其它屬性賦值,另外還要建立兩個會話,乙個會話是rtsp session,乙個會話是client session。

接下來,伺服器將呼叫註冊了rtsp route role的模組,並攜帶rtsp請求物件作為引數。註冊了rtsp route role的模組可以對rtsp請求物件的qtssrtspreqrootdir屬性進行修改。同呼叫註冊了rtsp filter role的模組時的處理策略一樣,伺服器在呼叫註冊了rtsp route role的模組的時候,如果有模組傳送了應答,則立刻呼叫註冊了rtsp postprocessor role的模組,否則繼續呼叫註冊了rtsp route role的其它模組。

當所有註冊了rtsp route role的模組都被呼叫了,伺服器將呼叫註冊了rtsp preprocessor role的模組。註冊了rtsp preprocessor role的模組根據qtssrtspreqabsoluteurl的值判斷是否能處理該請求的型別。如果請求的型別和被呼叫的模組所能處理的型別匹配,則該模組呼叫qtss_write或者qtss_writev對請求進行應答。如果是標準的應答,可以呼叫qtss_sendstandardrtspresponse

如果所有註冊了rtsp preprocessor role的模組都沒有對請求作出應答,伺服器就會呼叫註冊了rtsp request role的模組。注意只有乙個模組可以註冊rtsp request role。註冊了rtsp request role的模組對請求作出應答。

註冊了rtsp request role的模組對請求作出應答後,伺服器呼叫註冊了rtsp postprocessor role的模組,註冊了rtsp postprocessor role的模組通常做一些統計的工作,比如把統計資訊寫入日誌。

註冊了rtsp prerequest role或者rtsp request role的模組可以向發出請求的客戶端傳送流**資料。當需要向請求客戶端傳送流**資料的時候,註冊了rtsp prerequest role或者rtsp request role的模組呼叫qtss_play,然後伺服器就會通過rtp send packets role呼叫該模組,過程如下圖所示:

註冊了rtp send packets role的模組呼叫qtss_write或者qtss_writev通過rtp session向客戶端傳送流**資料。模組傳送了一些資料後,就返回到伺服器,並給出下次呼叫模組傳送資料之前等待的時間。伺服器迴圈呼叫模組傳送流**資料,直到所有的流**資料都傳送完畢或者該會話被暫停或關閉。

改進?

**:

RTSP協議的學習

jt同學 從零開始寫乙個rtsp伺服器系列 我的開源專案 rtspserver 從零開始寫乙個rtsp伺服器 一 rtsp協議講解 從零開始寫乙個rtsp伺服器 二 rtsp協議的實現 從零開始寫乙個rtsp伺服器 三 rtp傳輸h.264 從零開始寫乙個rtsp伺服器 四 乙個傳輸h.264的rt...

RTSP協議 RTMP協議 HTTP協議的區別

rtsp rtmp http的共同點 區別?共同點 1.rtsp rtmp http都是在應用應用層。區別 1.http,即超文字傳送協議 ftp即檔案傳輸協議 rtsp,real time streaming protocol 實時流傳輸協議。rtmp全稱routing table mainten...

HTTP協議 RTSP協議 RTMP協議的區別

rtsp rtmp http的共同點 區別 共同點 1 rtsp rtmp http都是在應用應用層。區別 1 http 即超文字傳送協議 ftp即檔案傳輸協議 http real time streaming protocol 實時流傳輸協議。http全稱routing table mainten...