一、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 开发库的 头文件 和 动态库 , 配置如下内容 :
win32 {
INCLUDEPATH += $$PWD/SDL2-2.0.10/include
LIBS += $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib
}
完整的配置文件如下 :
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 开发了 ;
#include <SDL.h>
完整代码参考 https://download.csdn.net/download/han1202012/89407726 ;
6、SDL 窗口示例
使用如下代码 , 创建一个 SDL 窗口 :
#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("SDL窗口", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); // 检测 SDL 窗口是否创建成功 if(!window) { printf("创建 SDL 窗口失败 错误码 :%s\n", SDL_GetError()); return 1; } // 延迟 3 秒 SDL_Delay(3000); // 关闭窗口 SDL_DestroyWindow(window); // 释放系统资源 SDL_Quit(); return 0;
}
完整代码参考 https://download.csdn.net/download/han1202012/89407726 ;
运行效果如下 :