【ffmpeg】SDL视频显示
【ffmpeg】SDL视频显示
- 视频显示理论
- SDL简介
- 作用
- 特点
- 结构
- 开发环境配置
- SDL视频显示的函数
- SDL视频显示的流程图
- SDL视频显示函数简介
- SDL视频显示的数据结构
- SDL视频显示的数据结构
- SDL数据结构简介
- 进阶-SDL多线程和事件
- SDL多线程
- SDL事件
- 参考资料
个人简介
📦个人主页:一二三o-0-O的博客
🏆技术方向:C/C++客户端(直播+音视频剪辑)
📣专栏目标:务实的掌握FFmpeg相关专业知识
🧡如果对您有帮助的话辛苦点赞支持。👍👍👍
音视频基础专栏系列
(一)【音视频基础】音频基础理论
(二)【音视频基础】视频基础理论
(三)【音视频基础】封装格式与编码数据
ffmpeg专栏系列
(一)【ffmpeg】ffmpeg命令工具的使用
(二)【ffmpeg】视频解码器
(三)【ffmpeg】SDL视频显示
(四)【ffmpeg】ffmpeg+SDL实现播放器
视频显示理论
- 视频显示的流程
- 视频显示的流程,就是将像素数据“画”在屏幕上的过程。
- 例如显示YUV,就是将YUV“画”在系统的窗口中。
SDL简介
作用
- SDL(Simple DirectMedia Layer)库的作用说白了就是封装了复杂的音视频底层交互工作,简化了音视频处理的难度。
- 本文只涉及到SDL库的一小部分—视频显示部分
特点
- 跨平台
- 开源
结构
- SDL结构如下图所示。可以看出它实际上还是调用了DirectX等底层的API完成了和硬件的交互。
开发环境配置
在SDL环境配置完成后,在main函数中使用以下测试代码:
if (SDL_Init(SDL_INIT_VIDEO)) {
qDebug() << SDL_GetError();
} else {
qDebug() << “Success init SDL”;
}
如果运行无误,则表示SDL已经配置完成。 我的运行结果如下:
SDL视频显示的函数
SDL视频显示的流程图
- 视频显示流程图如下:
SDL视频显示函数简介
- SDL_Init():初始化SDL系统
- SDL_CreateWindow():创建窗口SDL_Window
- SDL_CreateRenderer():创建渲染器SDL_Render
- SDL_CreateTexture():创建纹理SDL_Texture
- SDL_CreateThread():创建线程SDL_Thread
- SDL_WaitEvent():等待下一个可用事件
- SDL_UpdateYUVTexture():设置纹理的数据
- SDL_RenderClear():清空渲染器内容
- SDL_RenderCopy():将纹理的数据拷贝给渲染器
- SDL_RenderPresent():显示
- SDL_Delay():工具函数,用于延时
- SDL_Quit():退出SDL系统
SDL视频显示的数据结构
SDL视频显示的数据结构
- 数据结构如下图所示:
SDL数据结构简介
- SDL_Window
- 代表了一个“窗口”
- SDL_Renderer
- 代表了一个“渲染器”
- SDL_Texture
- 代表了一个“纹理”
- SDL_Rect
- 一个简单的矩形结构
进阶-SDL多线程和事件
SDL多线程
- 函数
- SDL_CreateThread():创建一个线程
- 数据结构
- SDL_Thread:线程的句柄
SDL事件
- 函数
- SDL_WaitEvent():等待一个事件
- SDL_PushEvent():发送一个事件
- 数据结构
- SDL_Event:代表一个事件
参考资料
【1】雷神博客
【2】ffmpeg官方文档