用Darwin和live555實現的直播框架
我們在開發視訊直播或者監控類專案的時候,如場館監控、學校監控、車載監控等等,往往首先希望的是形成一個專案的雛形,然後再在這個框架的基礎上進行不斷的完善和擴充套件工作,那麼我們今天要給大家介紹的就是,如何形成一個這樣的框架:
採集本地音視訊資料(Win) -->視訊分發伺服器-->客戶端隨意接入
大致流程:我們首先通過DShow採集Windows(XP、Win7經過測試)主機的視訊裝置(Camera)和音訊裝置(Mic)的音視訊資源,經過live555的RTSP推送流程和RTP封包過程,將直播資料推送給Darwin分發伺服器,Darwin分發伺服器接收live555的推送資料並做相應的快取
裝置採集端:採集端是以live555為基礎框架,以DarwinInjector做為與Darwin互動的介面,再在live555 Source端分別實現CamH264VideoStreamFramer(H264視訊)和AudioInputMicDevice(AAC音訊)的資料來源。
當然,在採集和傳送資料之前,我們需要進行的是與Darwin伺服器之間的信令通道互動,這裡我們採用的是RTSP標準的Announce(SDP payload)、Setup、Play過程,讓Darwin伺服器端建立轉發類(主要是在
轉發伺服器:轉發伺服器是RTSP伺服器Darwin Streaming Server,在之前的部落格:基於DSS的推送式轉發已經描述了RTSP標準推送流程,這裡只說明一點小小的修改,就是在Darwin中,當裝置端意外斷線,也就是不經過標準的RTSP Teardown流程就與伺服器斷開的話,伺服器端將會等待裝置推送超時才會釋放轉發資源,那麼對於這一點,我們做了一個小小的更改,這個在:Darwin推送端斷開的處理問題中已經描述了。那麼最新程式碼的下載可以到EasyDarwin開源專案中去獲取:,後續對Darwin的擴充套件,如分散式
客戶端端:客戶端當然不用太多描述,標準的RTSP流播放器都能播放Darwin視訊,不過如果有想開發RTSP客戶端的朋友,也可以加入到討論群中(288214068)。
框架擴充套件:在上述的流程中,我們是在採集程式一開啟時,就開始向Darwin伺服器推送資料,那麼在通常情況下,點播或者直播通常都是On Demand的形式,就是說,只有有需要的時候,我們才推送視訊給伺服器,沒有需要的時候,裝置處在空閒狀態的,那麼我們可不可以在上述的框架上做到這一點呢?當然可以!
如上圖,我們可以先在裝置端,開啟一條tcp通道,連線到Darwin伺服器,Darwin伺服器中擴充套件一個管理模組,專門管理與裝置的通訊與接入,這樣,在伺服器不需要裝置資料的時候,只與裝置保持信令通道的連線和暢通就可以了,當有需要裝置當前音視訊資料的時候,就通過這條信令通道傳送開啟命令,採集裝置收到命令(自定義命令),就開始本地採集、編碼、打包和RTP傳輸流程,RTP通道可以與信令通道公用也可以單獨建立,不過建議還是單獨建立的好。當伺服器端對此裝置分發的客戶端數量為0或者其他更高階的需求來到時,可以通過信令通道,傳送停止命令到採集裝置,這樣採集裝置就停止本地採集、編碼等工作,進入最開始時候的空閒等待狀態。如此,就實現了實時視訊的點播效果。當然,圖中的轉發模組與管理模組可以在同一個程式裡面開發,也可以分開,分為管理伺服器和轉發伺服器。
------------------------------------------------------------
本文轉自www.easydarwin.org,更多開源流媒體解決方案,請關注我們的微信:EasyDarwin