最近作了一些pc和嵌入式平臺的RTSP服務器項目,大多數的要求是簡單可是功能全面,而且性能還要強勁。綜合考慮後,基本都是在基於live555的基礎上進行開發,在進行Live555自己的優化以及程序內部視頻數據傳輸的優化後,不只實現了需求並且性能還超出預期,實現了10Mbps高碼率的1080p以上高分辨率高清視頻的流暢直播。這裏將一些優化點分享一下:html
其實以前我就已經開發過一個RTSP Server程序,而且寫了一篇文章進行了介紹「一個RtspServer的設計與實現和RTSP2.0簡介」,不過當時開發的目的除了實現RTSP直播之外,主要目的仍是簡化代碼以方便定製,所以並無徹底實現RTSP協議裏的全部交互細節,要在它的基礎上擴展全面,可能會拖延項目進展。基於項目考慮,選擇了本身比較瞭解也認爲比較優秀的RTSP開源項目Live555做爲基礎,開發RTSP Server程序。服務器
Live555是一個跨平臺的流媒體解決方案,以C++爲開發語言,實現了RTSP包括服務器-客戶端的整套結構,而且支持H.264, H.265, MPEG, AAC等多種視頻和音頻編碼,是很知名的一個開源項目。做爲RTSP Server,源碼裏只有對於本地文件的視頻源,不過它的擴展性強,能夠在Live555提供的一些基類基礎上開發出適合本身項目需求的服務程序。網絡
Live555的流媒體模塊基本分爲Source和Sink兩大部分,固然他們也有一個共同的基類Medium。對服務器來講,Source爲數據來源,Sink爲數據輸出,視頻數據就經過MediaSource傳遞給MediaSink,最終經過RTPInterface網絡傳輸給客戶端。一下爲服務端所用到的模塊以及繼承關係:session
如同上圖所示意的,經過完成本身的ServerMediaSubsession和MediaSource來實現將須要直播的H.264編碼數據傳遞給live555,以實現RTSP直播。架構
對高清高碼率的視頻畫面,每一幀的視頻數據就會比較大,這個數值每每會超出live555內部默認的內存處理大小,由於對於live555的優化,主要就是集中在內存緩衝大小的擴大,以及避免內存數據拷貝。如下爲根據實際開發和測試所總結出來的有效的優化點:socket
通過以上修改,以及應用程序內部代碼的優化,在實際應用中,已經實現了10Mbps高碼率的1080p以上高分辨率高清視頻的流暢直播。函數
haibindev.cnblogs.com,合做請聯繫QQ。(轉載請註明做者和出處~)性能