Qt編寫手機端視頻播放器/推流工具/Onvif工具

一、視頻播放器

  1. 同時支持多種解碼內核,包括qmedia內核(Qt4/Qt5/Qt6)、ffmpeg內核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc內核(vlc2/vlc3)、mpv內核(mpv1/mp2)、mdk內核、海康sdk、easyplayer內核等。
  2. 非常完善的多重基類設計,新增一種解碼內核只需要實現極少的代碼量,就可以應用整套機制,極易拓展。
  3. 同時支持多種畫面顯示策略,自動調整(原始分辨率小於顯示控件尺寸則按照原始分辨率大小顯示,否則等比縮放)、等比縮放(永遠等比縮放)、拉伸填充(永遠拉伸填充)。所有內核和所有視頻顯示模式下都支持三種畫面顯示策略。
  4. 同時支持多種視頻顯示模式,句柄模式(傳入控件句柄交給對方繪製控制)、繪製模式(回調拿到數據後轉成QImage用QPainter繪製)、GPU模式(回調拿到數據後轉成yuv用QOpenglWidget繪製)。
  5. 支持多種硬件加速類型,ffmpeg可選dxva2、d3d11va等,vlc可選any、dxva2、d3d11va,mpv可選auto、dxva2、d3d11va,mdk可選dxva2、d3d11va、cuda、mft等。不同的系統環境有不同的類型選擇,比如linux系統有vaapi、vdpau,macos系統有videotoolbox。
  6. 解碼線程和顯示窗體分離,可指定任意解碼內核掛載到任意顯示窗體,動態切換。
  7. 支持共享解碼線程,默認開啓並且自動處理,當識別到相同的視頻地址,共享一個解碼線程,在網絡視頻環境中可以大大節約網絡流量以及對方設備的推流壓力。國內頂尖視頻廠商均採用此策略。這樣只要拉一路視頻流就可以共享到幾十個幾百個通道展示。
  8. 自動識別視頻旋轉角度並繪製,比如手機上拍攝的視頻一般是旋轉了90度的,播放的時候要自動旋轉處理,不然默認是倒着的。
  9. 自動識別視頻流播放過程中分辨率的變化,在視頻控件上自動調整尺寸。比如攝像機可以在使用過程中動態配置分辨率,當分辨率改動後對應視頻控件也要做出同步反應。
  10. 音視頻文件無感知自動切換循環播放,不會出現切換期間黑屏等肉眼可見的切換痕跡。
  11. 視頻控件同時支持任意解碼內核、任意畫面顯示策略、任意視頻顯示模式。
  12. 視頻控件懸浮條同時支持句柄、繪製、GPU三種模式,非絕對座標移來移去。
  13. 本地攝像頭設備支持指定設備名稱、分辨率、幀率進行播放。
  14. 本地桌面採集支持設定採集區域、偏移值、指定桌面索引、幀率、多個桌面同時採集等。還支持指定窗口標題採集固定窗口。
  15. 錄像文件同時支持打開的視頻文件、本地攝像頭、本地桌面、網絡視頻流等。
  16. 瞬間響應打開和關閉,無論是打開不存在的視頻或者網絡流,探測設備是否存在,讀取中的超時等待,收到關閉指令立即中斷之前的操作並響應。
  17. 支持打開各種圖片文件,支持本地音視頻文件拖曳播放。
  18. 視頻流通信方式可選tcp/udp,有些設備可能只提供了某一種協議通信比如tcp,需要指定該種協議方式打開。
  19. 可設置連接超時時間(視頻流探測用的超時時間)、讀取超時時間(採集過程中的超時時間)。
  20. 支持逐幀播放,提供上一幀/下一幀函數接口,可以逐幀查閱採集到的圖像。
  21. 音頻文件自動提取專輯信息比如標題、藝術家、專輯、專輯封面,自動顯示專輯封面。
  22. 視頻響應極低延遲0.2s左右,極速響應打開視頻流0.5s左右,專門做了優化處理。
  23. 支持H264/H265編碼(現在越來越多的監控攝像頭是H265視頻流格式)生成視頻文件,內部自動識別切換編碼格式。
  24. 支持用戶信息中包含特殊字符(比如用戶信息中包含+#@等字符)的視頻流播放,內置解析轉義處理。
  25. 支持濾鏡,各種水印及圖形效果,支持多個水印和圖像,可以將OSD標籤信息和各種圖形信息寫入到MP4文件。
  26. 支持視頻流中的各種音頻格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推薦選擇AAC兼容性跨平臺性最好。
  27. 內核ffmpeg採用純qt+ffmpeg解碼,非sdl等第三方繪製播放依賴,gpu繪製採用qopenglwidget,音頻播放採用qaudiooutput。
  28. 內核ffmpeg和內核mdk支持安卓,其中mdk支持安卓硬解碼,性能非常兇殘。
  29. 可以切換音視頻軌道,也就是節目通道,可能ts文件帶了多個音視頻節目流,可以分別設置要播放哪一個,可以播放前設置好和播放過程中動態設置。
  30. 可以設置視頻旋轉角度,可以播放前設置好和播放過程中動態改變。
  31. 視頻控件懸浮條自帶開始和停止錄像切換、聲音靜音切換、抓拍截圖、關閉視頻等功能。
  32. 音頻組件支持聲音波形值數據解析,可以根據該值繪製波形曲線和柱狀聲音條,默認提供了聲音振幅信號。
  33. 標籤和圖形信息支持三種繪製方式,繪製到遮罩層、繪製到圖片、源頭繪製(對應信息可以存儲到文件)。
  34. 通過傳入一個url地址,該地址可以帶上通信協議、分辨率、幀率等信息,無需其他設置。
  35. 保存視頻到文件支持三種策略,自動處理、僅限文件、全部轉碼,轉碼策略支持自動識別、轉264、轉265,編碼保存支持指定分辨率縮放或者等比例縮放。比如對保存文件體積有要求可以指定縮放後再存儲。
  36. 支持加密保存文件和解密播放文件,可以指定祕鑰文本。
  37. 提供的監控佈局類支持64通道同時顯示,還支持各種異型佈局,比如13通道,手機上6行2列布局。各種佈局可以自由定義。
  38. 支持電子放大,在懸浮條切換到電子放大模式,在畫面上選擇需要放大的區域,選取完畢後自動放大,再次切換放大模式可以復位。
  39. 各組件中極其詳細的打印信息提示,尤其是報錯信息提示,封裝的統一打印格式。針對現場複雜的設備環境測試極其方便有用,相當於精確定位到具體哪個通道哪個步驟出錯。
  40. 同時提供了簡單示例、視頻播放器、多畫面視頻監控、監控回放、逐幀播放、多屏渲染等單獨窗體示例,專門演示對應功能如何使用。
  41. 監控回放可選不同廠家類型、回放時間段、用戶信息、指定通道。支持切換回放進度。
  42. 可以從聲卡設備下拉框選擇聲卡播放聲音,提供對應的切換聲卡函數接口。
  43. 支持編譯到手機app使用,提供了專門的手機app佈局界面,可以作爲手機上的視頻監控使用。
  44. 代碼框架和結構優化到最優,性能強悍,註釋詳細,持續迭代更新升級。
  45. 源碼支持windows、linux、mac、android等,支持各種國產linux系統,包括但不限於統信UOS/中標麒麟/銀河麒麟等。還支持嵌入式linux。
  46. 源碼支持Qt4、Qt5、Qt6,兼容所有版本。

二、推流工具

  1. 支持各種本地視頻文件和網絡視頻文件。
  2. 支持各種網絡視頻流,網絡攝像頭,協議包括rtsp、rtmp、http。
  3. 支持將本地攝像頭設備推流,可指定分辨率和幀率等。
  4. 支持將本地桌面推流,可指定屏幕區域和幀率等。
  5. 自動啓動流媒體服務程序,默認mediamtx(原rtsp-simple-server),可選用srs、EasyDarwin、LiveQing、ZLMediaKit等。
  6. 可實時切換預覽視頻文件,可切換視頻文件播放進度,切換到哪裏就推流到哪裏。
  7. 推流的清晰度和質量可調。
  8. 可動態添加文件、目錄、地址。
  9. 視頻文件自動循環推流,如果視頻源是視頻流,在掉線後會自動重連。
  10. 網絡視頻流自動重連,重連成功自動繼續推流。
  11. 網絡視頻流實時性極高,延遲極低,延遲時間大概在100ms左右。
  12. 極低CPU佔用,4路主碼流推流只需要佔用0.2%CPU。理論上常規普通PC機器推100路毫無壓力,主要性能瓶頸在網絡。
  13. 推流可選推流到rtsp/rtmp兩種,推流後的數據支持直接rtsp/rtmp/hls/webrtc四種方式訪問,可以直接瀏覽器打開看實時畫面。
  14. 可以推流到外網服務器,然後通過手機、電腦、平板等設備播放對應的視頻流。
  15. 每個推流都可以手動指定唯一標識符(方便拉流/用戶無需記憶複雜的地址),沒有指定則按照策略隨機生成hash值。
  16. 自動生成測試網頁直接打開播放,可以看到實時效果,自動按照數量對應宮格顯示。
  17. 推流過程中可以在表格中切換對應推流項,實時預覽正在推流的視頻,並可以切換視頻文件的播放進度。
  18. 音視頻同步推流,符合264/265/aac格式的自動原數據推流,不符合的自動轉碼再推流(會佔用一定CPU)。
  19. 轉碼策略支持三種,自動處理(符合要求的原數據/不符合的轉碼),僅限文件(文件類型的轉碼視頻),所有轉碼。
  20. 表格中實時顯示每一路推流的分辨率和音視頻數據狀態,灰色表示沒有輸入流,黑色表示沒有輸出流,綠色表示原數據推流,紅色表示轉碼後的數據推流。
  21. 自動重連視頻源,自動重連流媒體服務器,保證啓動後,推流地址和打開地址都實時重連,只要恢復後立即連上繼續採集和推流。
  22. 提供循環推流示例,一個視頻源同時推流到多個流媒體服務器,比如打開一個視頻同時推流到抖音/快手/B站等,可以作爲錄播推流,列表循環,非常方便實用。
  23. 根據不同的流媒體服務器類型,自動生成對應的rtsp/rtmp/hls/flv/ws-flv/webrtc地址,用戶可以直接複製該地址到播放器或者網頁中預覽查看。
  24. 編碼視頻格式可以選擇自動處理(源頭是264就264/源頭是265就265),轉H264(強制轉264),轉H265(強制轉265)。
  25. 支持Qt4/Qt5/Qt6任意版本,支持任意系統(windows/linux/macos/android/嵌入式linux等)。

三、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即可使用。

七、體驗地址

  1. 體驗地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 名稱:bin_video_demo/push/onvif
  2. 國內站點:https://gitee.com/feiyangqingyun
  3. 國際站點:https://github.com/feiyangqingyun
  4. 個人主頁:https://blog.csdn.net/feiyangqingyun
  5. 視頻主頁:https://space.bilibili.com/687803542/

八、效果圖




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章