您好,登錄后才能下訂單哦!
本篇內容介紹了“Qt vlc回調處理方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
用句柄來顯示視頻,方便是很方便,但是有個缺點就是不能拿到實時視頻的每張圖片的數據,這個就比較討厭,大部分的監控行業的應用,除了截圖以外,很可能需要拿到圖片自己做一些處理的,而且拿到圖片自己繪制的話,這個靈活性就大大增強了,比如繪制各種OSD標簽,想怎么繪制就怎么繪制,想在那里繪制就在那里繪制,句柄的話還得搞個標簽沒有父類自動跟隨移動非常討厭,一個通道就好幾個標簽,32個通道那就快上百個標簽了,效率蠻低的,處理方式看起來傻傻的,每次移動這每個通道都要給標簽自動計算位置并move過去。
于是回調就很有必要的,一個好處是可以拿到圖片本身的數據用來額外的處理比如人工智能分析人臉分析等,還有一個好處是OSD標簽等東西可以自己自由繪制,在vlc中回調的數據格式可以自行指定,比如RV32對應Qt中的Format_RGB32,RGBA對應Qt中的Format_RGBA8888,YUYV則可以直接用QOpenGlWidget來顯示,通過GPU來顯示還是很好地,大大降低CPU的占用。
多線程實時播放視頻流和本地視頻。
支持windows+linux+mac,支持vlc2和vlc3。
多線程顯示圖像,不卡主界面。
自動重連網絡攝像頭。
可設置邊框大小即偏移量和邊框顏色。
可設置是否繪制OSD標簽即標簽文本或圖片和標簽位置。
可設置兩種OSD位置和風格。
可設置是否保存到文件以及文件名。
可直接拖曳文件到vlcwidget控件播放。
支持h365視頻流+rtmp等常見視頻流。
可暫停播放和繼續播放。
支持回調模式和句柄兩種模式。
支持線程讀取進度等信息和事件回調兩種處理模式。
自動將當前播放位置和音量大小是否靜音以信號發出去。
提供接口設置播放位置和音量及設置靜音。
支持存儲單個視頻文件和定時存儲視頻文件。
自定義頂部懸浮條,發送單擊信號通知,可設置是否啟用。
if (callback) { callbackData = new CallbackData; callbackData->thread = this; callbackData->pixels = new uchar[bufferWidth * bufferHeight * 4]; memset(callbackData->pixels, 0, bufferWidth * bufferHeight * 4); int width = callbackData->thread->getBufferWidth(); int height = callbackData->thread->getBufferHeight(); //設置回調拿到每幀數據 libvlc_video_set_callbacks(vlcPlayer, lock, unlock, display, callbackData); //設置每幀格式 RV32-Format_RGB32 RGBA-Format_RGBA8888 YUYV I420 libvlc_video_set_format(vlcPlayer, "RV32", width, height, width * 4); } //#######拿到一幀數據回調 typedef struct CallbackData { QMutex mutex; VlcThread *thread; uchar *pixels; } CallbackData; static void *lock(void *op, void **plane) { CallbackData *callbackData = (CallbackData *)op; callbackData->mutex.lock(); *plane = callbackData->pixels; return NULL; } static void unlock(void *op, void *pic, void *const *plane) { CallbackData *callbackData = (CallbackData *)op; uchar *data = (uchar *)*plane; int width = callbackData->thread->getBufferWidth(); int height = callbackData->thread->getBufferHeight(); QImage image(data, width, height, QImage::Format_RGB32); callbackData->thread->setImage(image); callbackData->mutex.unlock(); } static void display(void *op, void *pic) { (void)op; } //####################
“Qt vlc回調處理方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。