天天看點

Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)

作者:Qt自定義控件

一、前言

用Qt+ffmpeg寫播放器很多人有疑問,為何不用Qt自己的多媒體架構來寫,最重要的原因是Qt自帶的目前都依賴具體的本地解碼器,如果解碼器不支援,那就是歇菜的,最多支援個MP4格式,而且在手機上也都是支援本地少部分格式的檔案,對于各種視訊流完全無能無力。而ffmpeg就不一樣了,本身就是自帶各種解碼器,解碼能力絕對超一流杠杠的,本身在桌面端就已經用Qt+ffmpeg寫好了對應的播放器,手機版本隻需要對應的ffmpeg的庫替換成對應安卓版本(一堆.so庫檔案)就行。

手機版本的布局肯定不能和桌面端一樣,是以重新建立了app的布局ui檔案,代碼完全公用以前的,隻需要ui檔案調整布局就行,一般會采用豎屏的形式,比如上面顯示視訊畫面,下面對應功能按鈕。在視訊播放器編譯成功手機版本以後,于是順帶也把onvif工具也編譯了手機版本,Qt編譯對應手機版本最大難點就在環境的搭建,隻要環境正常了,原有的程式基本的都可以編譯成安卓版本。

二、效果圖

Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)
Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)
Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)
Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)
Qt編寫手機版本視訊播放器和Onvif工具(可雲台和錄像)

三、體驗位址

  1. 國内站點:https://gitee.com/feiyangqingyun
  2. 國際站點:https://github.com/feiyangqingyun
  3. 個人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 體驗位址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 檔案名:bin_video_demo/bin_video_onvif。

四、功能特點

4.1 ffmpeg元件

  1. 支援各種音視訊檔案、本地攝像頭裝置,各種視訊流網絡流。
  2. 支援開始播放、暫停播放、繼續播放、停止播放、設定播放進度、倍速播放。
  3. 可設定音量、靜音切換、抓拍圖檔、錄像存儲。
  4. 自動提取專輯資訊比如标題、藝術家、專輯、專輯封面,自動顯示專輯封面。
  5. 完美支援音視訊同步和倍速播放。
  6. 解碼政策支援速度優先、品質優先、均衡處理、最快速度。
  7. 支援手機視訊旋轉角度顯示,比如一般手機拍攝的視訊是旋轉了90度的,解碼顯示的時候需要重新旋轉90度才是正的。
  8. 自動轉換yuv420格式,比如本地攝像頭是yuyv422格式,有些視訊檔案是xx格式,統一将非yuv420格式轉換,然後再進行處理。
  9. 支援硬解碼dxva2、d3d11va等,性能極高尤其是大分辨率比如4K視訊。
  10. 視訊響應極低延遲0.2s左右,極速響應打開視訊流0.5s左右,專門做了優化處理。
  11. 硬解碼和GPU繪制組合,極低CPU占用,比海康大華等用戶端更優。
  12. 支援視訊流中的各種音頻格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支援,推薦選擇AAC相容性跨平台性最好。
  13. 視訊存儲支援yuv、h264、mp4多種格式,音頻存儲支援pcm、wav、aac多種格式。預設視訊mp4格式、音頻aac格式。
  14. 支援分開存儲音頻視訊檔案,也支援合并到一個mp4檔案,預設政策是無論何種音視訊檔案格式存儲,最終都轉成mp4及aac格式,然後合并成音視訊一起的mp4檔案。
  15. 支援本地攝像頭實時視訊顯示帶音頻輸入輸出,音視訊錄制合并到一個mp4檔案。
  16. 支援H264/H265編碼(現在越來越多的監控攝像頭是H265視訊流格式)生成視訊檔案,内部自動識别切換編碼格式。
  17. 自動識别視訊流動态分辨率改動,重新打開視訊流。
  18. 支援使用者資訊中包含特殊字元(比如使用者資訊中包含+#@等字元)的視訊流播放,内置解析轉義處理。
  19. 純qt+ffmpeg解碼,非sdl等第三方繪制播放依賴,gpu繪制采用qopenglwidget,音頻播放采用qaudiooutput。
  20. 同時支援ffmpeg2、ffmpeg3、ffmpeg4、ffmpeg5、ffmpeg6以及後續版本,全部做了相容處理。如果需要支援xp需要選用ffmpeg3或ffmpeg2。
  21. 支援濾鏡,源頭帶各種水印及圖形效果,可以将OSD标簽資訊和各種圖形資訊寫入到MP4檔案。

4.2 onvif元件

  1. 廣播搜尋裝置,支援IPC和NVR,依次傳回。
  2. 可選擇不同的網卡IP進行對應網段裝置的搜尋。
  3. 依次擷取Onvif位址、Media位址、Profile檔案、Rtsp位址。
  4. 可對指定的Profile擷取視訊流Rtsp位址,比如主碼流位址、子碼流位址。
  5. 可對每個裝置設定Onvif使用者資訊,用于認證擷取詳細資訊。
  6. 可實時預覽錄影機圖像。
  7. 支援雲台控制,可上下左右調節雲台,支援絕對移動、相對移動、連續移動三種方式,可對圖像拉近拉遠。
  8. 支援擷取預置位集合、調用預置位、添加預置位、删除預置位等。
  9. 支援圖檔參數設定,包括亮度、對比度、飽和度、銳度等。
  10. 支援Qt4和Qt6任意Qt版本以及後續Qt版本,親測Qt4.7到Qt6.5。
  11. 支援任意編譯器,親測mingw、msvc、gcc、clang。
  12. 支援任意作業系統,親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
  13. 支援任意Onvif錄影機和NVR,親測海康、大華、宇視、天地偉業、華為、海思晶片核心等,可定制開發。
  14. 支援對指定IP位址及onvif位址進行單點傳播搜尋,比如跨網段情況下非常有用。
  15. 支援指定過濾條件過濾搜尋裝置,比如隻搜尋某個網段的裝置或者針對某個位址的裝置。
  16. 支援搜尋間隔和搜尋政策設定,保證所有裝置搜尋回來,在大量裝置現場很有用(親測上千個錄影機現場,搜尋回來的裝置數量比錄影機廠家自帶搜尋工具還要準确)。
  17. 可對裝置進行重新開機、網絡參數擷取等。
  18. 支援各種事件訂閱(入侵報警、越界報警、遮擋報警等)、Onvif抓圖等操作。
  19. 支援NTP校時和時間同步設定。
  20. 支援OSD相關操作,可以增删改查OSD資訊。
  21. 内置了線程實時執行Onvif指令隊列,排隊最大速度的執行對應的指令,執行結果信号發出。
  22. 采用的最底層的TCP+UDP通信機制,原創最底層協定解析,純QtWidget編寫。
  23. 超級小巧輕量,總共約3000行代碼,不依賴任何第三方的庫群組件,跨平台。
  24. 封裝好了通用的資料發送和接收解析的函數,可以非常友善的自行拓展其他Onvif處理。
  25. 工具上提供了收發資料文本框,顯示收發的資料,友善檢視和分析。
  26. 支援所有Onvif裝置,代碼工整,接口友好,直接引入pri即可使用。

繼續閱讀