您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Qt如何實現vlc讀取和控制的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
vlc本身是個全功能的很牛逼的播放器,你能夠想到的播放的功能他都有,比如獲取視頻文件的長度、唱片的封面、當前播放進度、設置播放進度、聲音控制、靜音控制等,這些vlc都給你封裝好了,你直接調用對應的api函數即可。
看vlc的官方對vlc的更新頻率也是蠻高的,所以在各種新的視頻標準和格式出來以后,他也是在不斷的更新完善,比如H265,8K視頻等,都能正常的播放,查閱vlc的動態庫目錄可以看見,vlc的部分解碼用的就是ffmpeg,所以知道了為啥他這么強大了吧,原來是依賴ffmpeg這個超級牛逼的全功能解碼庫呢。
用vlc做控制這塊有兩種處理方式,一種是在線程中來定時讀取,比如讀取播放進度、當前各種狀態、當前音量、靜音等,還有一種方式是采用事件回調的形式,默認建議事件回調的機制,能夠拿到很多事件消息,效率也更高。你只需要在打開視頻以前調用libvlc_event_attach訂閱自己感興趣的事件,在不需要的時候比如關閉的時候調用libvlc_event_detach注銷訂閱的事件即可。
多線程實時播放視頻流和本地視頻。
支持windows+linux+mac,支持vlc2和vlc3。
多線程顯示圖像,不卡主界面。
自動重連網絡攝像頭。
可設置邊框大小即偏移量和邊框顏色。
可設置是否繪制OSD標簽即標簽文本或圖片和標簽位置。
可設置兩種OSD位置和風格。
可設置是否保存到文件以及文件名。
可直接拖曳文件到vlcwidget控件播放。
支持h365視頻流+rtmp等常見視頻流。
可暫停播放和繼續播放。
支持回調模式和句柄兩種模式。
支持線程讀取進度等信息和事件回調兩種處理模式。
自動將當前播放位置和音量大小是否靜音以信號發出去。
提供接口設置播放位置和音量及設置靜音。
支持存儲單個視頻文件和定時存儲視頻文件。
自定義頂部懸浮條,發送單擊信號通知,可設置是否啟用。
國內站點:https://gitee.com/feiyangqingyun/QWidgetDemo
國際站點:https://github.com/feiyangqingyun/QWidgetDemo
個人主頁:https://blog.csdn.net/feiyangqingyun
知乎主頁:https://www.zhihu.com/people/feiyangqingyun/
體驗地址:https://blog.csdn.net/feiyangqingyun/article/details/97565652
void VlcThread::setSize(int width, int height) { if (vlcPlayer != NULL) { QString option = QString("%1:%2").arg(width).arg(height); QByteArray data = option.toUtf8(); const char *arg = data.constData(); //一旦打開視頻以后要動態更改寬高比,值只能是vlc認識的比如 16:9 1:1 之類的 //const char *arg = "4:3"; libvlc_video_set_aspect_ratio(vlcPlayer, arg); } } bool VlcThread::getIsPlaying() { bool isPlaying = false; if (vlcPlayer != NULL) { int result = libvlc_media_player_is_playing(vlcPlayer); isPlaying = (result != 0); } return isPlaying; } VlcThread::VlcState VlcThread::getState() { VlcState state = VlcThread::VlcState_NothingSpecial; if (vlcPlayer != NULL) { state = (VlcState)libvlc_media_player_get_state(vlcPlayer); } return state; } uint VlcThread::getLength() { uint length = 0; if (vlcPlayer != NULL) { length = libvlc_media_player_get_length(vlcPlayer); } return length; } uint VlcThread::getPosition() { uint positon = 0; if (vlcPlayer != NULL) { positon = libvlc_media_player_get_time(vlcPlayer); } return positon; } void VlcThread::setPosition(int position) { if (vlcPlayer != NULL && !isRtsp) { libvlc_media_player_set_time(vlcPlayer, position); } } bool VlcThread::getMute() { bool ok = false; if (vlcPlayer != NULL) { int result = libvlc_audio_get_mute(vlcPlayer); ok = (result == 0); } return ok; } void VlcThread::setMute(bool mute) { if (vlcPlayer != NULL) { libvlc_audio_set_mute(vlcPlayer, mute ? 1 : 0); } } int VlcThread::getVolume() { int volume = 0; if (vlcPlayer != NULL) { volume = libvlc_audio_get_volume(vlcPlayer); } return volume; } void VlcThread::setVolume(int volume) { if (vlcPlayer != NULL) { libvlc_audio_set_volume(vlcPlayer, volume); } } int VlcThread::getTrack() { int track = 0; if (vlcPlayer != NULL) { track = libvlc_audio_get_track(vlcPlayer); } return track; } int VlcThread::getTrackCount() { int trackCount = 0; if (vlcPlayer != NULL) { trackCount = libvlc_audio_get_track_count(vlcPlayer); } return trackCount; } void VlcThread::setTrack(int track) { if (vlcPlayer != NULL) { track = libvlc_audio_set_track(vlcPlayer, track); } }
感謝各位的閱讀!關于“Qt如何實現vlc讀取和控制”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。