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:
- SDL2-2.30.1-win32-x64.zip: 这是针对64位Windows操作系统的SDL2预编译版本。适用于64位的Windows系统。
- SDL2-2.30.1-win32-x86.zip: 这是针对32位Windows操作系统的SDL2预编译版本。适用于32位的Windows系统。
- SDL2-2.30.1.dmg: 这是针对macOS操作系统的SDL2安装文件。通常,macOS上的程序包括.dmg文件。
- SDL2-2.30.1.tar.gz: 这是源代码的压缩包,适用于Linux和其他类Unix系统。你需要手动编译和安装这个版本。
- SDL2-2.30.1.tar.gz.sig: 这是源代码的数字签名文件,用于验证源代码的完整性和真实性。
- SDL2-2.30.1.zip: 这是Windows操作系统的SDL2源代码压缩包。
- SDL2-2.30.1.zip.sig: 这是Windows操作系统的SDL2源代码压缩包的数字签名文件。
- SDL2-devel-2.30.1-mingw.tar.gz: 这是针对使用MinGW编译器的Windows环境的开发版SDL2的压缩包。适用于在Windows上使用MinGW编译器开发SDL2应用程序。
- SDL2-devel-2.30.1-mingw.zip: 这也是针对使用MinGW编译器的Windows环境的开发版SDL2的压缩包,但是是ZIP格式的。
- 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 的图 证明 环境搭建好了。