当前位置: 首页 > news >正文

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

相关文章:

  • 【JavaEE进阶系列 | 从小白到工程师】正则表达式的语法使用
  • LIO-SAM框架:点云匹配前戏之初值计算及局部地图构建
  • 机器学习实战(5)——支持向量机
  • 手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
  • lombok学习
  • Vue操作数组的几种常用方法(map、filter、forEach、find 和 findIndex 、some 和 every)
  • 【Docker】傻瓜式开发
  • <数据结构> - 数据结构在算法比赛中的应用(上)
  • python中的函数和类的区别
  • 【计算机网络】UDP/TCP协议
  • python并发编程 多线程/多进程/协程
  • 【web-攻击用户】(9.5)同源策略:与浏览器扩展、HTML5、通过代理服务应用程序跨域
  • 大数据——Spark-SQL自定义函数UDF、UDAF、UDTF
  • 浅浅的 Cmake
  • 【JavaScript 进阶教程】函数的定义 调用 及 this指向问题
  • ESLint简单操作
  • fetch 从初识到应用
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP请求重发
  • Java知识点总结(JavaIO-打印流)
  • JSONP原理
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux后台研发超实用命令总结
  • React组件设计模式(一)
  • 初探 Vue 生命周期和钩子函数
  • 缓存与缓冲
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 网络应用优化——时延与带宽
  • 怎么将电脑中的声音录制成WAV格式
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (1)(1.9) MSP (version 4.2)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (a /b)*c的值
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (十三)Flask之特殊装饰器详解
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ***测试-HTTP方法
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net Core与存储过程(一)
  • .net 验证控件和javaScript的冲突问题
  • .NET 指南:抽象化实现的基类
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证