—本篇由團隊成員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檔案。實作比較簡單,就不做詳細介紹了。使用的單例模式,確定唯一性。
- 在推送DoAnnounce的時候生成sdp索引,
- 拉流的時候不再是周遊movies_folder目錄,直接從sdpCache中查詢(僅限于QTSSReflectorModule,FileModule仍然是讀檔案,因為通路的就是檔案)
- ReflectorSession析構的時候,删除sdpCache中對應的map項。
- 更多資訊參看EasyDarwin流媒體伺服器Github:https://github.com/EasyDarwin/EasyDarwin