基于live555的视频直播 DM368IPNC RTSP分析
因需要,從個人的理解順序和需求角度對live555的分析與開發整理,包含RTSP Server與RTSP Client、如何直播H.264流與JPEG流等,均進行了探討,對live555的初學者有一定的指導意義。
本人習慣使用excel歸檔,所以本文均為excel的截圖,源文件可以再資源中下載。
?
?
基于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也是按照此種方法實現
?
?
?
?
轉載于:https://www.cnblogs.com/jiangu66/p/3249113.html
總結
以上是生活随笔為你收集整理的基于live555的视频直播 DM368IPNC RTSP分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 用题库自动答题器_用题库自
- 下一篇: 游戏植入广告获取收益