【ffmpeg】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官方文档


版权声明:本文为MichaelKongChina原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。