亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt如何實現vlc讀取和控制

發布時間:2021-12-15 10:11:30 來源:億速云 閱讀:256 作者:小新 欄目:互聯網科技

這篇文章給大家分享的是有關Qt如何實現vlc讀取和控制的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、前言

vlc本身是個全功能的很牛逼的播放器,你能夠想到的播放的功能他都有,比如獲取視頻文件的長度、唱片的封面、當前播放進度、設置播放進度、聲音控制、靜音控制等,這些vlc都給你封裝好了,你直接調用對應的api函數即可。

看vlc的官方對vlc的更新頻率也是蠻高的,所以在各種新的視頻標準和格式出來以后,他也是在不斷的更新完善,比如H265,8K視頻等,都能正常的播放,查閱vlc的動態庫目錄可以看見,vlc的部分解碼用的就是ffmpeg,所以知道了為啥他這么強大了吧,原來是依賴ffmpeg這個超級牛逼的全功能解碼庫呢。

用vlc做控制這塊有兩種處理方式,一種是在線程中來定時讀取,比如讀取播放進度、當前各種狀態、當前音量、靜音等,還有一種方式是采用事件回調的形式,默認建議事件回調的機制,能夠拿到很多事件消息,效率也更高。你只需要在打開視頻以前調用libvlc_event_attach訂閱自己感興趣的事件,在不需要的時候比如關閉的時候調用libvlc_event_detach注銷訂閱的事件即可。

二、功能特點

  1. 多線程實時播放視頻流和本地視頻。

  2. 支持windows+linux+mac,支持vlc2和vlc3。

  3. 多線程顯示圖像,不卡主界面。

  4. 自動重連網絡攝像頭。

  5. 可設置邊框大小即偏移量和邊框顏色。

  6. 可設置是否繪制OSD標簽即標簽文本或圖片和標簽位置。

  7. 可設置兩種OSD位置和風格。

  8. 可設置是否保存到文件以及文件名。

  9. 可直接拖曳文件到vlcwidget控件播放。

  10. 支持h365視頻流+rtmp等常見視頻流。

  11. 可暫停播放和繼續播放。

  12. 支持回調模式和句柄兩種模式。

  13. 支持線程讀取進度等信息和事件回調兩種處理模式。

  14. 自動將當前播放位置和音量大小是否靜音以信號發出去。

  15. 提供接口設置播放位置和音量及設置靜音。

  16. 支持存儲單個視頻文件和定時存儲視頻文件。

  17. 自定義頂部懸浮條,發送單擊信號通知,可設置是否啟用。

三、效果圖

Qt如何實現vlc讀取和控制

四、相關站點

  1. 國內站點:https://gitee.com/feiyangqingyun/QWidgetDemo

  2. 國際站點:https://github.com/feiyangqingyun/QWidgetDemo

  3. 個人主頁:https://blog.csdn.net/feiyangqingyun

  4. 知乎主頁:https://www.zhihu.com/people/feiyangqingyun/

  5. 體驗地址: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讀取和控制”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

库伦旗| 宁强县| 金坛市| 五常市| 繁峙县| 临沂市| 赤城县| 宁城县| 潼关县| 望都县| 诏安县| 六盘水市| 剑川县| 鄂托克前旗| 马关县| 科技| 利川市| 泰和县| 古浪县| 桃源县| 余干县| 中超| 东山县| 广昌县| 洞口县| 临漳县| 灵宝市| 称多县| 湾仔区| 扎鲁特旗| 中牟县| 天全县| 万州区| 垫江县| 化州市| 双流县| 湖北省| 濮阳县| 灵石县| 剑川县| 临颍县|