一、前言
用Qt+ffmpeg寫播放器很多人有疑問,爲何不用Qt自己的多媒體框架來寫,最重要的原因是Qt自帶的目前都依賴具體的本地解碼器,如果解碼器不支持,那就是歇菜的,最多支持個MP4格式,而且在手機上也都是支持本地少部分格式的文件,對於各種視頻流完全無能無力。而ffmpeg就不一樣了,本身就是自帶各種解碼器,解碼能力絕對超一流槓槓的,本身在桌面端就已經用Qt+ffmpeg寫好了對應的播放器,手機版本只需要對應的ffmpeg的庫替換成對應安卓版本(一堆.so庫文件)就行。
手機版本的佈局肯定不能和桌面端一樣,所以重新新建了app的佈局ui文件,代碼完全公用以前的,只需要ui文件調整佈局就行,一般會採用豎屏的形式,比如上面顯示視頻畫面,下面對應功能按鈕。在視頻播放器編譯成功手機版本以後,於是順帶也把onvif工具也編譯了手機版本,Qt編譯對應手機版本最大難點就在環境的搭建,只要環境正常了,原有的程序基本的都可以編譯成安卓版本。
二、效果圖
三、體驗地址
- 國內站點:https://gitee.com/feiyangqingyun
- 國際站點:https://github.com/feiyangqingyun
- 個人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
- 體驗地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 文件名:bin_video_demo/bin_video_onvif。
四、功能特點
4.1 ffmpeg組件
- 支持各種音視頻文件、本地攝像頭設備,各種視頻流網絡流。
- 支持開始播放、暫停播放、繼續播放、停止播放、設置播放進度、倍速播放。
- 可設置音量、靜音切換、抓拍圖片、錄像存儲。
- 自動提取專輯信息比如標題、藝術家、專輯、專輯封面,自動顯示專輯封面。
- 完美支持音視頻同步和倍速播放。
- 解碼策略支持速度優先、質量優先、均衡處理、最快速度。
- 支持手機視頻旋轉角度顯示,比如一般手機拍攝的視頻是旋轉了90度的,解碼顯示的時候需要重新旋轉90度纔是正的。
- 自動轉換yuv420格式,比如本地攝像頭是yuyv422格式,有些視頻文件是xx格式,統一將非yuv420格式轉換,然後再進行處理。
- 支持硬解碼dxva2、d3d11va等,性能極高尤其是大分辨率比如4K視頻。
- 視頻響應極低延遲0.2s左右,極速響應打開視頻流0.5s左右,專門做了優化處理。
- 硬解碼和GPU繪製組合,極低CPU佔用,比海康大華等客戶端更優。
- 支持視頻流中的各種音頻格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推薦選擇AAC兼容性跨平臺性最好。
- 視頻存儲支持yuv、h264、mp4多種格式,音頻存儲支持pcm、wav、aac多種格式。默認視頻mp4格式、音頻aac格式。
- 支持分開存儲音頻視頻文件,也支持合併到一個mp4文件,默認策略是無論何種音視頻文件格式存儲,最終都轉成mp4及aac格式,然後合併成音視頻一起的mp4文件。
- 支持本地攝像頭實時視頻顯示帶音頻輸入輸出,音視頻錄製合併到一個mp4文件。
- 支持H264/H265編碼(現在越來越多的監控攝像頭是H265視頻流格式)生成視頻文件,內部自動識別切換編碼格式。
- 自動識別視頻流動態分辨率改動,重新打開視頻流。
- 支持用戶信息中包含特殊字符(比如用戶信息中包含+#@等字符)的視頻流播放,內置解析轉義處理。
- 純qt+ffmpeg解碼,非sdl等第三方繪製播放依賴,gpu繪製採用qopenglwidget,音頻播放採用qaudiooutput。
- 同時支持ffmpeg2、ffmpeg3、ffmpeg4、ffmpeg5、ffmpeg6以及後續版本,全部做了兼容處理。如果需要支持xp需要選用ffmpeg3或ffmpeg2。
- 支持濾鏡,源頭帶各種水印及圖形效果,可以將OSD標籤信息和各種圖形信息寫入到MP4文件。
4.2 onvif組件
- 廣播搜索設備,支持IPC和NVR,依次返回。
- 可選擇不同的網卡IP進行對應網段設備的搜索。
- 依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。
- 可對指定的Profile獲取視頻流Rtsp地址,比如主碼流地址、子碼流地址。
- 可對每個設備設置Onvif用戶信息,用於認證獲取詳細信息。
- 可實時預覽攝像機圖像。
- 支持雲臺控制,可上下左右調節雲臺,支持絕對移動、相對移動、連續移動三種方式,可對圖像拉近拉遠。
- 支持獲取預置位集合、調用預置位、添加預置位、刪除預置位等。
- 支持圖片參數設置,包括亮度、對比度、飽和度、銳度等。
- 支持Qt4和Qt6任意Qt版本以及後續Qt版本,親測Qt4.7到Qt6.5。
- 支持任意編譯器,親測mingw、msvc、gcc、clang。
- 支持任意操作系統,親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
- 支持任意Onvif攝像機和NVR,親測海康、大華、宇視、天地偉業、華爲、海思芯片內核等,可定製開發。
- 支持對指定IP地址及onvif地址進行單播搜索,比如跨網段情況下非常有用。
- 支持指定過濾條件過濾搜索設備,比如只搜索某個網段的設備或者針對某個地址的設備。
- 支持搜索間隔和搜索策略設置,保證所有設備搜索回來,在大量設備現場很有用(親測上千個攝像機現場,搜索回來的設備數量比攝像機廠家自帶搜索工具還要準確)。
- 可對設備進行重啓、網絡參數獲取等。
- 支持各種事件訂閱(入侵報警、越界報警、遮擋報警等)、Onvif抓圖等操作。
- 支持NTP校時和時間同步設置。
- 支持OSD相關操作,可以增刪改查OSD信息。
- 內置了線程實時執行Onvif指令隊列,排隊最大速度的執行對應的指令,執行結果信號發出。
- 採用的最底層的TCP+UDP通信機制,原創最底層協議解析,純QtWidget編寫。
- 超級小巧輕量,總共約3000行代碼,不依賴任何第三方的庫和組件,跨平臺。
- 封裝好了通用的數據發送和接收解析的函數,可以非常方便的自行拓展其他Onvif處理。
- 工具上提供了收發數據文本框,顯示收發的數據,方便查看和分析。
- 支持所有Onvif設備,代碼工整,接口友好,直接引入pri即可使用。