【FFmpeg】SDL 开发环境搭建 ( SDL 简介 | 下载 SDL 开发库 | 拷贝动态库到 C:\Windows\SysWOW64 目录 | 将 SDL 开发库配置到 Qt 项目 )

一、SDL 简介

1、SDL 简介

SDL , 英文全称 " Simple DirectMedia Layer " , 是 开源 跨平台 多媒体开发库 , SDL 是由 C 语言 开发的 ;

在项目中导入了 SDL 开发库 , 开发者可以使用相同的 C 语言代码 , 开发在多个平台的 多媒体应用软件 , 如 : Linux / Windows / MacOS ;

在 FFmpeg 开发中 , 使用 SDL 来播放 使用 FFmpeg 解码后的 音频数据 , 视频数据 , 图像数据 , 以及 处理 鼠标键盘 的输入事件 ;

2、SDL 相关网站

SDL 相关网站 :

  • 官方网站 : https://www.libsdl.org/
  • 参考文档 : http://wiki.libsdl.org/Introduction
  • 源码地址 : https://github.com/libsdl-org

二、SDL 开发环境搭建

1、下载 SDL 开发库

在 Windows 平台的 SDL 开发环境 搭建 , 只需要将 头文件 , dll 和 lib 函数库下载下来直接使用即可 ;

SDL 下载地址 : https://github.com/libsdl-org/SDL/releases/tag/release-2.0.10 , 这里选择 2.0.10 版本的 SDL ;

在本博客的源码中也可以下载 https://download.csdn.net/download/han1202012/89407726 ;

下载 SDL2-devel-2.0.10-VC.zip 选项 , 这是 Windows 平台中 使用 Visual Studio 编译器 的 开发库 ;

SDL2-devel-2.0.10-mingw.tar.gz 对应的是 MinGW 编译器对应的开发库 ;

如果要下载其它版本的 SDL 版本 , 参考 https://github.com/libsdl-org/SDL/releases 下载页面 ;

2、SDL 开发库内容解析

将 SDL2-devel-2.0.10-VC.zip 开发库下载完毕后 , 进行解压 ;

解压后的内容如下 :

  • include 目录下是 SDL 相关的头文件 ;
  • lib 目录下是 动态库 ;
    • 下面的 SDL2.lib 文件 作为动态链接库的导入库 , 该文件中并不包含实际的函数代码 , 只包含了链接到相应 DLL 动态库所需的信息 ; 构建程序时 , 链接器会使用 .lib 文件来解析对 DLL 动态库 函数的引用 , 函数定义在 DLL 中 , 引用定义在 lib 文件中 ;
    • SDL2.dll 是 动态链接库 Dynamic Link Library , 包含了编译后的代码 ;
    • lib 目录下有 32 位 和 64 位 的开发库 , 这里 使用 32 位的开发库 , 因为之前的 FFmpeg 开发环境中使用的开发库也是 32 位的 ;

进入 x86 目录 , 查看 动态库的具体内容 :

3、拷贝动态库到 C:\Windows\SysWOW64 目录

将 SDL2-devel-2.0.10-VC\SDL2-2.0.10\lib\x86</font> 目录下的 SDL2.dll 动态库 拷贝到 C:\Windows\SysWOW64 目录 中 ;

这一步必须操作 , 就像之前拷贝 FFmpeg 的 dll 动态库到 C:\Windows\SysWOW64 目录一样 , 如果不拷贝 , 则在运行程序时报错 ;

4、创建 Qt 项目

进入 Qt Creator , 选择 " 菜单栏 / 文件 / 新建文件或项目 " 选项 ;

在弹出的对话框中 , 选择 非 Qt 工程 " Non-Qt Project " , 下的 " Plain C Application " 类型的应用 , 然后点击右下角的 " Choose " 按钮 ;

设置 项目名称 和 创建路径 , 勾选 " 设为默认的项目路径 " 选项 ;

构建系统 使用 默认的 qmake 即可 ;

构建套件 Kit 都勾选上 ;

版本控制 选择 默认即可 ;

将 " 构建套件 " 设置为 默认的 " MSVC 2015 " 即可 ;

运行效果如下 :

5、将 SDL 开发库配置到 Qt 项目

将 SDL2-devel-2.0.10-VC.zip 开发库 解压后的完整目录 , 拷贝到 Qt 项目中 ;

在 Qt 项目的 构建脚本 SDL_Demo.pro 中 , 配置 拷贝的 SDL 开发库的 头文件 和 动态库 , 配置如下内容 :

代码语言:javascript
复制
win32 {
INCLUDEPATH += $$PWD/SDL2-2.0.10/include
LIBS += $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib
}

完整的配置文件如下 :

代码语言:javascript
复制
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES +=
main.c

win32 {
INCLUDEPATH +=

PWD/SDL2-2.0.10/include LIBS +=
PWD/SDL2-2.0.10/lib/x86/SDL2.lib
}

之后 , 在 C 语言项目中 , 导入 SDL.h 头文件 , 就可以进行 SDL 开发了 ;

代码语言:javascript
复制
#include <SDL.h>

完整代码参考 https://download.csdn.net/download/han1202012/89407726 ;

6、SDL 窗口示例

使用如下代码 , 创建一个 SDL 窗口 :

代码语言:javascript
复制
#include <stdio.h>

#include <SDL.h>

#undef main
int main()
{
printf("Hello World!\n");

// 创建 SDL 窗口对象
SDL_Window *window = NULL;

// 初始化 SDL 环境 , 用于播放视频
SDL_Init(SDL_INIT_VIDEO);

// 创建 SDL Window 窗口对象
window = SDL_CreateWindow(&#34;SDL窗口&#34;,
                          SDL_WINDOWPOS_UNDEFINED,
                          SDL_WINDOWPOS_UNDEFINED,
                          800,
                          600,
                          SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);

// 检测 SDL 窗口是否创建成功
if(!window)
{
    printf(&#34;创建 SDL 窗口失败 错误码 :%s\n&#34;, SDL_GetError());
    return 1;
}

// 延迟 3 秒
SDL_Delay(3000);

// 关闭窗口
SDL_DestroyWindow(window);

// 释放系统资源
SDL_Quit();

return 0;

}

完整代码参考 https://download.csdn.net/download/han1202012/89407726 ;

运行效果如下 :