天天看點

EasyDarwin開源流媒體伺服器進行RTSP轉發過程中将sdp由檔案存儲改成記憶體索引

—本篇由團隊成員Fantasy供稿!

原始版本

在Darwin Streaming Server版本中,推送端DoAnnounce的時候後伺服器會根據easydarwin.xml中配置的movies_folder目錄生成一個sdp檔案,存放推送流的sdp檔案資訊,在拉取用戶端,Darwin Streaming Server接收到DESCRIBE請求,檢查伺服器movies_folder目錄下是否有對應請求路徑的sdp檔案,如果有則傳回對應的sdp檔案;

原始版本問題

很多時候,Darwin Streaming Server會由于權限問題無法建立movies_folder目錄,或者無法在movies_folder目錄下建立對應的sdp檔案,并将sdp資訊存進去,這樣一來,就會造成推流或者拉流失敗。

EasyDarwin解決辦法

不再将sdp資訊存放到movies_folder目錄下的檔案中,通過一個全局的map存儲,建立StreamName到sdp資訊context的索引。通過類CSdpCache管理,詳見EasyDarwin檔案sdpCache.h和sdpCache.cpp檔案。實作比較簡單,就不做詳細介紹了。使用的單例模式,確定唯一性。

  1. 在推送DoAnnounce的時候生成sdp索引,
  2. 拉流的時候不再是周遊movies_folder目錄,直接從sdpCache中查詢(僅限于QTSSReflectorModule,FileModule仍然是讀檔案,因為通路的就是檔案)
  3. ReflectorSession析構的時候,删除sdpCache中對應的map項。
  4. 更多資訊參看EasyDarwin流媒體伺服器Github:​​https://github.com/EasyDarwin/EasyDarwin​​

擷取更多資訊

EasyDarwin開源流媒體伺服器進行RTSP轉發過程中将sdp由檔案存儲改成記憶體索引

繼續閱讀