国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用VLC開發(fā)視頻播放器/組件(兩種方式:libVLC / VLC-Qt)

這篇具有很好參考價值的文章主要介紹了用VLC開發(fā)視頻播放器/組件(兩種方式:libVLC / VLC-Qt)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

測試環(huán)境

  • MSVC-2015
  • Qt 5.14.2
  • QCreator

1. libVLC(關鍵步驟)

參考:心流劍

libVLC 各版本 下載鏈接

我的下載版本為:3.0.11
vlc開發(fā),Qt,qt,音視頻,VLC

  • sdk/lib文件夾目錄
    vlc開發(fā),Qt,qt,音視頻,VLC
  • qmake vlc 部分的配置(路徑根據自己的修改)
  • 只需要: libvlc.lib、libvlccore.lib
#####################  VLC 庫 ############################
INCLUDEPATH += $$PWD/../vlc/sdk/include
LIBS += -L$$PWD/../vlc/sdk/lib
LIBS += -llibvlccore
LIBS += -llibvlc

############ 設置輸出路徑、文件名、加載的鏈接庫 ###############
CONFIG(debug, debug|release){
    DESTDIR =$$PWD/../bin_Debug # 輸出目錄
    TARGET = XVLCDemod  # 輸出文件名
}
else{
    DESTDIR =$$PWD/../bin_Release
    TARGET = XVLCDemo
}
  • 把 plugins 文件夾、libvlc.dll、libvlccore.dll 復制到 bin_Debug / bin_Release
#include <QCoreApplication>

#ifdef _WIN32
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif

#include <QDebug>

#include "vlc/vlc.h"

int main(int argc, char *argv[])
{
//    QCoreApplication a(argc, argv);
    libvlc_instance_t     * pInstance = nullptr;
    libvlc_media_player_t * pPlayer = nullptr;
    libvlc_media_t        * pMedia = nullptr;

    libvlc_time_t length;
    int width;
    int height;
    int wait_time = 5000;
    //libvlc_time_t length;
    /* Load the VLC engine */
    pInstance = libvlc_new(0, NULL);
    //Create a new item
    //Method 1:
    //m = libvlc_media_new_location (inst, "file:///F:\\movie\\cuc_ieschool.flv");
    //Screen Capture
    //m = libvlc_media_new_location (inst, "screen://");
    //Method 2:
    // 創(chuàng)建一個流媒體(視頻/音頻對象)
    pMedia = libvlc_media_new_path(pInstance, "C:\\Users\\YuLei\\Desktop\\ch4.mp4");
    if (!pMedia)
    {
        qDebug() << "libvlc_media_new_path  fail!!!";
        return -1;
    }
    // 創(chuàng)建一個播放窗口(環(huán)境),加載流
    pPlayer = libvlc_media_player_new_from_media(pMedia);
    /* No need to keep the media now */
    libvlc_media_release(pMedia);
    // play the media_player
    libvlc_media_player_play(pPlayer);
    //wait until the tracks are created
    _sleep(wait_time);
    length  = libvlc_media_player_get_length(pPlayer);
    width   = libvlc_video_get_width(pPlayer);
    height  = libvlc_video_get_height(pPlayer);
    printf("Stream Duration: %ds\n", length / 1000);
    printf("Resolution: %d x %d\n", width, height);
    //Let it play
    _sleep(length - wait_time);
    // Stop playing
    libvlc_media_player_stop(pPlayer);
    // Free the media_player
    libvlc_media_player_release(pPlayer);
    libvlc_release(pInstance);
    return  0;
//    return a.exec();
}

2. VLC-Qt(關鍵步驟)

VLC-Qt 下載地址
參考鏈接1:鏈接
參考鏈接2:鏈接
vlc開發(fā),Qt,qt,音視頻,VLC

  • v1.1.1版本僅提供源碼
    vlc開發(fā),Qt,qt,音視頻,VLC
  • 采用 v1.1.0 版本 鏈接

vlc開發(fā),Qt,qt,音視頻,VLC

  • qmake 配置
#####################  VLC 庫 ############################
INCLUDEPATH += $$PWD/../vlc_qt/include
LIBS += -L$$PWD/../vlc_qt/lib
CONFIG(debug, debug|release){
    LIBS += -lVLCQtCored
    LIBS += -lVLCQtWidgetsd
}
else{
    LIBS += -lVLCQtCore
    LIBS += -lVLCQtWidgets
}

############ 設置輸出路徑、文件名、加載的鏈接庫 ###############
CONFIG(debug, debug|release){
    DESTDIR =$$PWD/../bin_Debug # 輸出目錄
    TARGET = QVLCDemod  # 輸出文件名
}
else{
    DESTDIR =$$PWD/../bin_Release
    TARGET = QVLCDemo
}

抽幀

libVLC

參考鏈接1
參考鏈接2文章來源地址http://www.zghlxwxcb.cn/news/detail-520188.html

/**
 *  mp:媒體播放器
 *  lock:回調以鎖定視頻內存(不能為 NULL)
 *  unlock:回調以解鎖視頻內存(如果不需要,則為 NULL)
 *  display:回調以顯示視頻(如果不需要,則為 NULL)
 *  opaque:這三個回調的私有指針(作為第一個參數)
 */
void libvlc_video_set_callbacks( libvlc_media_player_t *mp,
                                 libvlc_video_lock_cb lock,
                                 libvlc_video_unlock_cb unlock,
                                 libvlc_video_display_cb display,
                                 void *opaque );

// 當需要解碼新的視頻幀時,就會調用 lock 回調。
typedef void *(*libvlc_video_lock_cb)(void *opaque, void **planes);

// 當視頻幀解碼完成后,將調用 unlock 回調。
typedef void (*libvlc_video_unlock_cb)(void *opaque, void *picture,
                                       void *const *planes);

// 當視頻幀需要顯示時,將調用 display 回調。
typedef void (*libvlc_video_display_cb)(void *opaque, void *picture);
#include 
#include 
#include 
#include 
#include 

// 定義輸出視頻的分辨率
#define VIDEO_WIDTH   640
#define VIDEO_HEIGHT  480

struct Context {
    QMutex mutex;
    uchar *pixels;
};

static void *lock(void *opaque, void **planes)
{
    struct Context *ctx = static_cast(opaque);
    ctx->mutex.lock();

    // 告訴 VLC 將解碼的數據放到緩沖區(qū)中
    *planes = ctx->pixels;

    return nullptr;
}

// 獲取 argb 圖片并保存到文件中
static void unlock(void *opaque, void *picture, void *const *planes)
{
    Q_UNUSED(picture);

    struct Context *ctx = static_cast(opaque);
    unsigned char *data = static_cast<unsigned char *>(*planes);
    static int frameCount = 1;

    QImage image(data, VIDEO_WIDTH, VIDEO_HEIGHT, QImage::Format_ARGB32);
    image.save(QString("frame_%1.png").arg(frameCount++));

    ctx->mutex.unlock();
}

static void display(void *opaque, void *picture)
{
    Q_UNUSED(picture);

    (void)opaque;
}

int main()
{
    const char *localMrl = "Sample.mkv";

    struct Context ctx;
    ctx.pixels = new uchar[VIDEO_WIDTH * VIDEO_HEIGHT * 4];
    memset(ctx.pixels, 0, VIDEO_WIDTH * VIDEO_HEIGHT * 4);

    libvlc_instance_t *instance;
    libvlc_media_player_t *player;
    libvlc_media_t *media;

    instance = libvlc_new(0, nullptr);
    media = libvlc_media_new_path(instance, localMrl);
    player = libvlc_media_player_new_from_media(media);

    // 設置回調,用于提取幀或者在界面上顯示。
    libvlc_video_set_callbacks(player, lock, unlock, display, &ctx);
    libvlc_video_set_format(player, "RGBA", VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH * 4);

    libvlc_media_player_play(player);

    QThread::sleep(10);

    libvlc_media_release(media);
    libvlc_media_player_release(player);
    libvlc_release(instance);

    return 0;
}

到了這里,關于用VLC開發(fā)視頻播放器/組件(兩種方式:libVLC / VLC-Qt)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 移動端開源播放器對比與選型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)

    ExoPlayer 是 Google 推出的開源播放器,主要是集成了Android 提供的一套解碼系統(tǒng)來解析視頻和音頻,將 MediaCodec 封裝地非常完善,并加入了對 DASH 和 HLS 等直播協議的支持,形成了一個性能優(yōu)越,播放穩(wěn)定性較好的一個開發(fā)播放器。 Github : https://github.com/google/ExoPlayer star fork iss

    2024年02月08日
    瀏覽(25)
  • 播放器開發(fā)(五):視頻幀處理并用SDL渲染播放

    VideoOutPut 模塊 1、初始化【分配緩存、讀取信息】 2、開始線程工作【從隊列讀幀-縮放-發(fā)送渲染信號到窗口】 VideoWidget 自定義Widget類 1、定義內部變量 2、如果使用SDL,需要進行初始化 3、接收到信號后需要執(zhí)行槽函數進行渲染 分配緩存 執(zhí)行縮放 創(chuàng)建SDL窗口紋理渲染器 SDL渲

    2024年01月22日
    瀏覽(26)
  • Unity零基礎到進階 ??| 視頻播放器 Video Player組件 詳解
  • 【Harmony OS】【ArkUI】ets開發(fā) 簡易視頻播放器

    前言:這一次我們來使用ets 的Swiper 組件、List 組件和Video 組件制作一個簡易的視頻播放器。本篇是以HarmonyOS 官網的codelab 簡易視頻播放器(eTS )為基礎進行編寫。本篇最主要的內容就是一個主界面包括頂部的視頻海報輪播,中部的視頻播放列表,以及點擊海報和播放列表進

    2023年04月27日
    瀏覽(22)
  • Qt音視頻開發(fā)41-文件推流(支持網頁和播放器播放并切換進度)

    Qt音視頻開發(fā)41-文件推流(支持網頁和播放器播放并切換進度)

    本功能最初也是有一些人提過類似的需求,就是能不能將本地的音視頻文件,通過純Qt程序推流出去,然后用戶可以直接在網頁上播放,也可以用各種播放器播放,然后還可以任意切換播放進度,其實說白了就是個文件服務器,用戶通過網絡地址訪問以后,告訴對方當前是媒

    2024年02月01日
    瀏覽(42)
  • vue自定義h5video視頻播放器進度條組件,可拖拽、跳轉、倍速、全屏

    vue自定義h5video視頻播放器進度條組件,可拖拽、跳轉、倍速、全屏

    一個進度條組件控制多個視頻的播放、進度調整。視頻可點擊全屏觀看,唯一的進度條是某個指定視頻的視頻信息。 全屏 點擊進度條跳轉 拖動滑塊 在菜鳥教程上有以下幾個參數的詳細解說,這張圖忘記哪里看的了,如有認領可評論我貼鏈接 倍速 // 倍速 handleChangeSpeed(item)

    2024年02月12日
    瀏覽(91)
  • opencv+ffmpeg+QOpenGLWidget開發(fā)的音視頻播放器demo

    opencv+ffmpeg+QOpenGLWidget開發(fā)的音視頻播放器demo

    ????本篇文檔的demo包含了 1.使用OpenCV對圖像進行處理,對圖像進行置灰,旋轉,摳圖,高斯模糊,中值濾波,部分區(qū)域清除置黑,背景移除,邊緣檢測等操作;2.單純使用opencv播放顯示視頻;3.使用opencv和openGL播放顯示視頻;4.在ffmpeg解碼后,使用opencv顯示視頻,并支持對視

    2024年02月12日
    瀏覽(36)
  • 038-第三代軟件開發(fā)-簡易視頻播放器-自定義Slider (二)

    038-第三代軟件開發(fā)-簡易視頻播放器-自定義Slider (二)

    : Qt 、 Qml 、 3 、 4 、 5 歡迎來到我們的 QML C++ 項目!這個項目結合了 QML(Qt Meta-Object Language)和 C++ 的強大功能,旨在開發(fā)出色的用戶界面和高性能的后端邏輯。 在項目中,我們利用 QML 的聲明式語法和可視化設計能力創(chuàng)建出現代化的用戶界面。

    2024年02月07日
    瀏覽(29)
  • 用Qt開發(fā)的ffmpeg流媒體播放器,支持截圖、錄像,支持音視頻播放,支持本地文件播放、網絡流播放

    用Qt開發(fā)的ffmpeg流媒體播放器,支持截圖、錄像,支持音視頻播放,支持本地文件播放、網絡流播放

    本工程qt用的版本是5.8-32位,ffmpeg用的版本是較新的5.1版本。它支持TCP或UDP方式拉取實時流,實時流我采用的是監(jiān)控攝像頭的RTSP流。音頻播放采用的是QAudioOutput,視頻經ffmpeg解碼并由YUV轉RGB后是在QOpenGLWidget下進行渲染顯示。本工程的代碼有注釋,可以通過本博客查看代碼或者

    2024年02月03日
    瀏覽(116)
  • QT軟件開發(fā)-基于FFMPEG設計視頻播放器-軟解圖像(一)

    QT軟件開發(fā)-基于FFMPEG設計視頻播放器-軟解圖像(一)

    QT軟件開發(fā)-基于FFMPEG設計視頻播放器-CPU軟解視頻(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT軟件開發(fā)-基于FFMPEG設計視頻播放器-GPU硬解視頻(二) https://xiaolong.blog.csdn.net/article/details/126833434 QT軟件開發(fā)-基于FFMPEG設計視頻播放器-解碼音頻(三) https://xiaolong.blog.csdn.

    2023年04月08日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包