ffmpeg之播放一个yuv视频
播放YUV视频的步骤
- 初始化SDL库:
- 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。
- 操作:调用
SDL_Init(SDL_INIT_VIDEO)来初始化SDL的视频子系统。
- 创建窗口用于显示YUV视频:
目的:创建一个窗口作为显示YUV视频的目标。
操作:使用SDL_CreateWindow创建一个SDL窗口,并指定窗口的位置、大小和标志(如是否全屏等)。你可以根据需要自定义窗口的属性。 - 创建渲染器:
- 目的:创建一个渲染器,用于在窗口中绘制图像。
- 操作:使用
SDL_CreateRenderer创建一个渲染器。可以选择硬件加速和垂直同步选项以提高性能和视觉质量。
- 创建纹理并设置颜色格式:
- 目的:创建一个纹理对象,用于在GPU中存储图像数据,并设置纹理的颜色格式(如YUV420P)。
- 操作:使用
SDL_CreateTexture创建一个纹理,指定像素格式(例如SDL_PIXELFORMAT_YV12 或 SDL_PIXELFORMAT_IYUV),以及访问模式(如SDL_TEXTUREACCESS_STREAMING)。
- 循环读取YUV文件并更新纹理:
- 目的:从YUV文件中逐帧读取原始像素数据,并将每一帧的数据更新到纹理中,完成每一帧的渲染。
- 操作:在一个循环中读取YUV文件中的每一帧数据,使用
SDL_UpdateYUVTexture将Y、U、V平面的数据分别更新到纹理中,然后调用SDL_RenderClear、SDL_RenderCopy和SDL_RenderPresent来刷新屏幕以显示当前帧。确保每帧之间有适当的延时以维持正确的播放速度。
- 清理资源:
目的:释放所有分配的资源,确保没有内存泄漏。
操作:在程序结束时调用相应的销毁函数(如 SDL_DestroyTexture、SDL_DestroyRenderer 和 SDL_DestroyWindow),最后调用 SDL_Quit 退出SDL库。
示例代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <SDL2/SDL.h>
#include <QDebug>
#include <QFile>#define RET(judge,SDL_Init) \if(judge) \{\qDebug() << #SDL_Init << "error" << SDL_GetError();\return;\}
#define FILENAME "D:/ffmpeg/in.yuv"
#define PIXEL_FORMAT SDL_PIXELFORMAT_IYUV
#define IMG_W 352
#define IMG_H 288MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);_widget = new QWidget(this);//设置窗口位置和大小_widget->setGeometry(100,0,IMG_W,IMG_H);//初始化子系统RET(SDL_Init(SDL_INIT_VIDEO),SDL_Init);//创建一个窗口//标题-X-Y-width-height_window = SDL_CreateWindowFrom((void *)_widget->winId());RET(!_window,SDL_CreateWindow);//创建渲染上下文--用于渲染图形到窗口//这SDL_RENDERER_ACCELERATED -- 个标志告诉 SDL 尝试创建一个使用硬件加速的渲染器//SDL_RENDERER_PRESENTVSYNC -- 这个标志使渲染器的呈现操作同步到显示器的垂直同步(VSync)_renderer = SDL_CreateRenderer(_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);//如果创建失败if(!_renderer){_renderer = SDL_CreateRenderer(_window,-1,0);RET(!_renderer,SDL_CreateRenderer);}//创建纹理t_texture = SDL_CreateTexture(_renderer,PIXEL_FORMAT,SDL_TEXTUREACCESS_STREAMING,IMG_W,IMG_H);RET(!_texture,SDL_CreateTextureFromSurface);//打开YUV文件_file.setFileName(FILENAME);if(!_file.open(QFile::ReadOnly)){qDebug() << "_file open error" << FILENAME;return;}
}MainWindow::~MainWindow()
{delete ui;_file.close();SDL_DestroyRenderer(_renderer);SDL_DestroyTexture(_texture);SDL_DestroyWindow(_window);SDL_Quit();//初始化子系统后必须做一个退出操作
}void MainWindow::on_pushButton_clicked()
{//开启定时器_timerId = startTimer(60);}//每隔一段事件就会调用
void MainWindow::timerEvent(QTimerEvent *enent)
{int imgSize = IMG_W * IMG_H * 1.5;char data[imgSize];if(_file.read(data,imgSize) > 0){//将YUV的像素数据填充到texture -- nullptr空表示整个texture都是RET(SDL_UpdateTexture(_texture,nullptr,data,IMG_W),SDL_UpdateTexture);//设置绘制颜色(画笔颜色)SDL_SetRenderDrawColor(_renderer,0,0,0,SDL_ALPHA_OPAQUE);//用绘制颜色(画笔颜色)清除渲染目标---也就是覆盖SDL_RenderClear(_renderer);//拷贝纹理数据到渲染目标(默认时window)RET(SDL_RenderCopy(_renderer,_texture,nullptr,nullptr),SDL_RenderCopy);//更新所有的渲染操作到屏幕上SDL_RenderPresent(_renderer);}else{//文件数据已经读取完毕killTimer(_timerId);}}
由于是一个视频,所以只截取了一个照片

相关文章:
ffmpeg之播放一个yuv视频
播放YUV视频的步骤 初始化SDL库: 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频: 目的:…...
《2023-2024网络安全产业发展核心洞察与趋势预测》
2023年至2024年间,我国经济总体上逐步显现出复苏迹象,并开始释放向上增长的潜力。在此背景下,网络安全产业也经历了经济环境的深刻影响,不仅实现了阶段性的稳定发展,也展现出较强的韧性与适应能力,为未来的…...
为什么环境影响评价导则中生态环境评价中的【植被类型图】制作比较难?制作流程是什么
最新《环境影响评价技术导则生态影响HJ19—2022》于2022年1月15日发布,2022-07-01正式实施,新导则颁布后,要求生态现状评价内容中基本图件构成包含:项目区域地理位置图、工程平面图、调查样方、样线、点位、断面等布设图、土地利用…...
肿瘤电场治疗费用
肿瘤电场治疗作为一种前沿的肿瘤治疗方法,近年来备受关注。该方法通过利用特定频率的交流电场,作用于恶性肿瘤细胞,以达到抑制肿瘤生长的目的。然而,随着这种治疗方法的普及,其费用问题也逐渐成为患者和家属关注的焦点…...
替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案
经过验证 替换 Docker.io 的方式失败了, 以下的过程中还是需要设置 registry-mirrors 才行 以下是一篇详细教程,展示如何基于 openssl.conf 配置生成域名为 registry-1.docker.io 和 IP 地址为 172.16.20.20 的证书,构建 Harbor 服务。 环境准备 系统环境…...
Python知识图谱框架
Python中用于构建知识图谱的框架和库有很多,它们各自有不同的特点和功能,适用于不同的应用场景。以下是一些常用的框架: 1. NetworkX 功能:NetworkX是一个用于创建、操作和研究复杂网络的Python库。它可以用于构建知识图谱&…...
elasticsearch 杂记
8.17快速安装与使用 系统:ubuntu 24 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录:cd ./elasticsearch-8.17.0 运行:./bin/elasticsearch 创…...
Text2Reward学习笔记
1. 环境配置 1.1 安装 PyTorch-1.13.1 pip install torch1.13.1cu116 torchvision0.14.1cu116 \ torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu1161.2 安装工具库 pip install stable-baselines31.8.0 wandb tensorboard \ -i https://pypi.tuna…...
KylinOS V10 SP3下编译openGauss与dolphin插件
编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...
NPM老是无法install,timeout?npm install失败
NPM老是无法install,timeout? 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…...
安卓project级别build.gradle和主module的build.gradle
以穿山甲为例讲解 如下图 gradle和gradle插件对应关系 Android Gradle 插件 8.7 版本说明 | Android Studio | Android Developers gradle对应在项目里的配置为 gradle插件对应的位置为...
大模型(LLM)提示工程(Prompt Engineering)初识
大模型提示工程(Prompt Engineering)是指设计和优化给定任务的输入提示,以便从大型语言模型(如GPT-4、GPT-3等)中获得最佳输出。其核心目标是通过合理设计输入内容(提示词或提示结构)࿰…...
大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
gaussian_splatting 构建submodules的diff-gaussian-rasterization失败报错
c:\program files\nvidia gpu computing toolkit\cuda\v11.8\include\crt/host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”: No such file or directory 配置: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin\nvcc.profil…...
template<typename Func, typename = void> 在类模板中的应用
1、基础语法 在 C 中,template<typename Func, typename void> 这一模板声明不仅仅限于函数模板,它在类模板中同样具有强大的应用。结合 SFINAE(Substitution Failure Is Not An Error)和 类型特征(type trait…...
如何确保数据大屏的交互设计符合用户需求?(附实践资料下载)
确保数据大屏的交互设计符合用户需求是一个多步骤的过程,涉及到用户研究、设计原则、原型测试和持续迭代。以下是一些关键步骤和策略: 用户研究: 目标用户识别:明确大屏的目标用户群体,包括他们的背景、角色和需求。用…...
Linux使用教程及常用命令大全
Linux是一个开源的操作系统,具有高度的可定制性和可扩展性。以下是一份 Linux 使用教程及常用命令的总结,帮助你快速入门 Linux。 1. 安装 Linux 下载 Linux 安装程序(可参考我的这篇文章):VMware虚拟机超详细安装Linu…...
基于openlayers 开发vue地图组件
先看效果 主要功能如下: 测量图源更换放大缩小地图添加点hover点数据切换到地图位置;也设定层级2D3D切换,3D为cesium开发,技术交流可以加V:bloxed 地图工具做了插槽,分为toolbar(左上角工具…...
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…...
【C++】B2069 求分数序列和题目解析与优化详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式输入输出样例输入:输出: 💯解题思路分析题目解题步骤 💯代码实现我的代码实现实现特点 老师的代码…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
