1. Ubuntu+qt+ffmpeg+SDL 环境搭建

本文详细介绍了如何在不同平台上下载并编译Qt、SDL2和Ffmpeg,包括针对Windows、macOS和Linux的操作系统,以及针对不同编译器的开发版本。作者提供了具体步骤和所需软件的安装指南,最后展示了如何在QtCreator中集成这些库进行测试。
摘要由CSDN通过智能技术生成

1. 软件下载

1.1 下载 Qt

下载地址:https://download.qt.io/official_releases/online_installers/
在这里插入图片描述
Tips:

  • x64 :采用x86架构的处理器,一般有个人电脑(PC),笔记本电脑,服务器。
  • arm:采用arm架构的处理器,一般有 移动设备,嵌入式系统。

1.2 下载 SDL2

下载地址:https://www.libsdl.org/index.php
进入网页后,点击下图红框中的:SDL Releases
在这里插入图片描述
点击 SDL Releases 会跳转到最新的 SDL2 的下载页面,因为本文是在Linux下安装,所以选择红框的文件:
在这里插入图片描述
Tips:

  1. SDL2-2.30.1-win32-x64.zip: 这是针对64位Windows操作系统的SDL2预编译版本。适用于64位的Windows系统。
  2. SDL2-2.30.1-win32-x86.zip: 这是针对32位Windows操作系统的SDL2预编译版本。适用于32位的Windows系统。
  3. SDL2-2.30.1.dmg: 这是针对macOS操作系统的SDL2安装文件。通常,macOS上的程序包括.dmg文件。
  4. SDL2-2.30.1.tar.gz: 这是源代码的压缩包,适用于Linux和其他类Unix系统。你需要手动编译和安装这个版本。
  5. SDL2-2.30.1.tar.gz.sig: 这是源代码的数字签名文件,用于验证源代码的完整性和真实性。
  6. SDL2-2.30.1.zip: 这是Windows操作系统的SDL2源代码压缩包。
  7. SDL2-2.30.1.zip.sig: 这是Windows操作系统的SDL2源代码压缩包的数字签名文件。
  8. SDL2-devel-2.30.1-mingw.tar.gz: 这是针对使用MinGW编译器的Windows环境的开发版SDL2的压缩包。适用于在Windows上使用MinGW编译器开发SDL2应用程序。
  9. SDL2-devel-2.30.1-mingw.zip: 这也是针对使用MinGW编译器的Windows环境的开发版SDL2的压缩包,但是是ZIP格式的。
  10. SDL2-devel-2.30.1-VC.zip: 这是针对使用Visual Studio编译器的Windows环境的开发版SDL2的压缩包。适用于在Windows上使用Visual Studio编译器开发SDL2应用程序。

1.3 下载 Ffmpeg

下载地址:http://www.ffmpeg.org/releases/
选择下载需要的版本,我选用的是 FFmpeg 3.4.4 “Cantor” 版本,因为最新版本没有ffserver。该功能在ffmpeg的新版本中被 Nginx,Apache等软件代替。
在ubuntu终端输入:

// 下载 ffmpeg
wget http://www.ffmpeg.org/releases/ffmpeg-3.4.4.tar.gz

2. 编译,安装

2.1 安装Qt

Tips:

  • Qt 6.5 LTS 支持的平台是 Ubuntu 22.04
  • Qt 6.2 LTS 支持的平台是 Ubuntu 20.04
    找到第一步下载的Qt安装程序,执行下方命令为其添加可执行权限:
chmod +x qt-unified-linux-x64-4.5.2-online.run

随后执行下方命令运行在线安装程序:

./qt-unified-linux-x64-4.5.2-online.run
// 如果网络不好可以使用国内镜像安装
./qt-unified-linux-x64-4.5.2-online.run --mirror https://mirror.nju.edu.cn/qt  

运行起来后如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Tips:
下图选择Qt版本进行下载,如果左边没有想要选择的版本,可以点上右边的 “Archive” 后点 “Filter”,Qt的所有版本都会被筛选出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 安装 SDL

找到下载的 SDL压缩包,执行以下指令

// 解压
tar -zxvf SDL-release-2.30.1.tar.gz
// 进入解压后的文件夹
cd SDL-release-2.30.1
// 运行配置,我将安装的路径设置为 $PWD/_instal
./configure --prefix=$PWD/_instal
//编译,安装
make && make install

2.3 安装 Ffmpeg

找到下载的Ffmpeg压缩包,执行以下指令

// 解压
tar -zxvf ffmpeg-3.4.4.tar.gz
// 进入解压后的文件夹
cd ffmpeg-3.4.4
// 在运行配置文件之前,先安装些必要的库
sudo apt install libmp3lame-dev
sudo apt install libspeex-dev
sudo apt install libx264-dev
sudo apt install libx265-dev
// 运行配置,我将安装的路径设置为 $PWD/_instal
./configure --prefix=$PWD/_instal --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libspeex --enable-libx264 --enable-libx265 --enable-version3 --enable-shared --enable-static --enable-pthreads
// 编译
make
// 安装
make install

3. 测试

使用 QtCreator创建一个demo。

CMakeLists.txt

# 添加 目录和库文件路径:以你安装的目录为准
# 设置包含目录
include_directories(
    /home/rick/xt_IIRS/ffmpeg-3.4.4/_instal/include
    /home/rick/xt_IIRS/SDL-release-2.30.1/_instal/include/SDL2
)

# 设置库文件路径
link_directories(
    /home/rick/xt_IIRS/ffmpeg-3.4.4/_instal/lib
    /home/rick/xt_IIRS/SDL-release-2.30.1/_instal/lib
)

# 添加链接
target_link_libraries(qt-ffmpeg-sdl PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    avcodec
    avformat
    avutil
    swscale
    SDL2
)

main.cpp

#include "mainwindow.h"

#include <QApplication>

#ifdef __cplusplus
extern "C"{
#endif

#include<libavformat/avformat.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<libavcodec/avcodec.h>
#include<libavfilter/avfilter.h>

#ifdef __cplusplus
}
#endif

#include <SDL.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // MainWindow w;
    // w.show();

    av_register_all();
    printf("%s\n",avcodec_configuration());

    /* 启动SDL */
    if(SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        printf("SDL_Init Error.\n");
        return 1;
    }

    /* 打开窗口 */
    SDL_Window *win = SDL_CreateWindow("Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
    if(win == NULL)
    {
        printf("SDL_CreateWindow Error.\n");
        SDL_Quit();
        return 1;
    }

    /* 创建渲染器 */
    SDL_Renderer *ren = SDL_CreateRenderer(win , -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if(ren == NULL)
    {
        SDL_DestroyWindow(win);
        printf("SDL_CreateRenderer Error.\n");
        return 1;
    }

    /* 加载位图图像 */
    SDL_Surface *bmp = SDL_LoadBMP("test.bmp");
    if(bmp == NULL)
    {
        SDL_DestroyRenderer(ren);
        SDL_DestroyWindow(win);
        printf("SDL_LoadBMP Error.\n");
        SDL_Quit();
        return 1;
    }

    SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
    SDL_FreeSurface(bmp);
    if (tex == NULL){
        SDL_DestroyRenderer(ren);
        SDL_DestroyWindow(win);
        printf("SDL_CreateTextureFromSurface Error.\n");
        SDL_Quit();
        return 1;
    }

    //A sleepy rendering loop, wait for 3 seconds and render and present the screen each time
    for (int i = 0; i < 3; ++i){
        //First clear the renderer
        SDL_RenderClear(ren);
        //Draw the texture
        SDL_RenderCopy(ren, tex, NULL, NULL);
        //Update the screen
        SDL_RenderPresent(ren);
        //Take a quick break after all that hard work
        SDL_Delay(1000);
    }

    SDL_DestroyTexture(tex);
    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return a.exec();
}

Tips:
在运行前先把一张 test.bmp 图放在与可执行文件统一目录下:
在这里插入图片描述
编译运行,会出现一张 test.bmp 的图 证明 环境搭建好了。
在这里插入图片描述

  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ffmpeg SDL Qt播放器框架图主要包括三个核心组件:FFmpegSDLQt。 在框架图中,FFmpeg作为主要的多媒体处理库,负责解码、编码、转码和处理音视频数据。它支持多种音视频格式,并提供了丰富的API供开发者调用。FFmpeg可以从本地文件、网络流媒体或实时摄像头中获取音视频数据,并将其解码成原始音视频流。 SDL(Simple DirectMedia Layer)是一个跨平台的音视频输出和输入库,它提供了对音视频设备和图形处理的底层访问接口。SDL可以与各种操作系统、硬件和图形API相结合使用,并且具有卓越的性能和兼容性。在播放器框架中,SDL用于接收FFmpeg解码后的音视频数据,并将其输出到屏幕上进行显示。 Qt是一个功能强大的跨平台应用程序开发框架,提供了丰富的图形界面和多媒体功能。在播放器框架中,Qt用于创建播放器应用程序的用户界面,包括播放控制按钮、进度条、音量调节等交互元素。通过Qt,用户可以方便地操作播放器,选择不同的音视频文件进行播放,并进行暂停、停止、快进、快退等操作。 整个框架的工作流程如下:首先,通过Qt创建播放器应用程序的界面,并将其与SDL相关联。当用户通过界面选择要播放的音视频文件时,Qt利用FFmpeg从文件中读取音视频数据并进行解码。解码后的数据经过SDL输出到屏幕上进行实时显示。同时,Qt还负责管理播放器的状态,包括播放、暂停、停止和音量等。用户通过界面上的交互元素进行操作后,Qt会响应相应的事件,修改播放器状态,并与FFmpegSDL进行交互,实现音视频数据的读取、解码和输出。 通过整合FFmpegSDLQt,可以构建一个功能完善、易于使用的音视频播放器框架,实现强大的多媒体处理和播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值