1. 程式人生 > >基於live555的視訊直播 DM368IPNC RTSP分析【轉】

基於live555的視訊直播 DM368IPNC RTSP分析【轉】

appro IPNC視訊流直播部分用的RTSP,基於live555,通過改寫wis-streamer實現的,在live555官網上有wis-streamer的程式碼下載,appro將其修改,在framedsource中加入了GetAVData介面,這樣ipnc就可以直播了。

感慨:C++ 真的太好用了

現在懶了,文字部分就直接複製出來,源文件使用的是excel,

文件下載地址:http://www.kuaipan.cn/file/id_48923272389066806.html

基於live555的視訊直播 DM368IPNC RTSP分析

一、描述


appro利用live555實現了三種視訊流以及一種音訊流的直播
1、MJPEG Video
2、H264 Video
3、MPEG4 Video
4、PCM Audio

live555是一個開源的RTSP C++類庫,預設實現音視訊檔案的點播,但是可以通過繼承相關類,重寫相關方法實現視訊直播

live555提供的實現直播的通用步驟是:

截圖來自之前的《live555分析與開發.xlsx》

appro也是按照此種方法實現

二、Appro的新增的live555原始檔

之所以檔案複雜,是由於實現了多種音視訊流,如果只留其一,原始檔將非常簡潔

下圖是appro原始碼的UML類圖

APPROInput類 類似於設計模式中的簡單工廠模式,用於建立具體的FramedSource,對於WISServerMediaSubsession類來說,處理FramedSource的介面是相同的,
但是對於FramedSource來說,VideoSource與AudioSource的具體的幀獲取是不同的,
這樣,就需要利用APPROInput來分別建立VideoSource和AudioSource。


類APPROInput的videoSource()方法 返回VideoOpenFileSource類的例項
類APPROInput的audioSource()方法 返回AudioOpenFileSource類的例項

三、重要的FramedSource

FramedSource類的doGetNextFrame()方法用於獲得音視訊的幀資料,子類需要實現這個方法

OpenFileSource中的incomingDataHandler1,呼叫了虛擬函式readFromFile,這個函式與底層相關,
所有由OpenFileSource的子類 VideoOpenFIleSource和AudioOpenFileSource類實現

在appro的ipnc中,不管是視訊還是音訊資料,均是通過GetAVData()函式來獲得,
所以VideoOpenFileSource類和AudioOpenFIleSource類的readFromFile方法中封裝了GetAVData()這個函式。

具體獲得哪種型別的資料是由類OpenFileSource中的屬性APPROInput &fInput來傳遞的

在main函式中有關FramedSource操作的所有程式碼如下圖,以H264為例
啟示:在移植appro的live555到高清相機中,我認為最好的方法就是按照IPNC的GetAVData()函式結構,
封裝高清相機的GetAVData()函式,高層的live555RTSP部分可不做任何改動

四、RTSP直播 main主程式

這與普通的live555 rtsp service結構並無太多區別,只是由於要傳輸的視訊型別較多,所以多了很多if else,這部分比較簡單,不作分析。

appro也是按照此種方法實現

下載地址在這   http://www.kuaipan.cn/file/id_48923272389066806.html

很有用哦