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

在VS2017下FFmpeg+SDL编写最简单的视频播放器

1.下载ShiftMediaProject/FFmpeg

2.下载SDL2

3.新建VC++控制台应用

3.配置include和lib

 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令

5.复制一下mp4视频到工程Debug目录下(复制一份到*.vcxproj同一目录,用于调试)

6.编写代码

#include <stdio.h>
#include <stdlib.h>
#include <iostream>extern "C" {
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libavutil\avutil.h"
#include "SDL.h"
}SDL_Window *window;
SDL_Texture* texture;
SDL_Renderer* renderer;
SDL_Rect rect;
int width;
int height;void display(AVFrame* frame);
void iniSdl();#undef main
int main()
{int ret = -1;AVFormatContext* ctx = avformat_alloc_context();ret = avformat_open_input(&ctx, "my.mp4", NULL, NULL);ret = avformat_find_stream_info(ctx, NULL);int videoindex = -1;for (int i = 0; i < ctx->nb_streams; i++){if (ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){videoindex = i;break;}}const AVCodec* codec = avcodec_find_decoder(ctx->streams[videoindex]->codecpar->codec_id);AVCodecContext* avcc = avcodec_alloc_context3(codec);ret = avcodec_parameters_to_context(avcc, ctx->streams[videoindex]->codecpar);ret = avcodec_open2(avcc, codec, NULL);width = avcc->width;height = avcc->height;rect.x = 0;rect.y = 0;rect.h = height;rect.w = width;iniSdl();AVFrame* frame = av_frame_alloc();AVPacket* packet = av_packet_alloc();while (true){ret = av_read_frame(ctx, packet);if (ret >=0){if (packet->stream_index == videoindex){ret = avcodec_send_packet(avcc, packet);while (ret >= 0){ret = avcodec_receive_frame(avcc, frame);if (ret >= 0){display(frame);av_frame_unref(frame);}else{av_frame_unref(frame);break;}}}			}else{av_packet_unref(packet);break;}}SDL_DestroyWindow(window);std::cout << "finish\n";
}void display(AVFrame* frame)
{SDL_UpdateYUVTexture(texture, &rect, frame->data[0], frame->linesize[0], frame->data[1], frame->linesize[1], frame->data[2], frame->linesize[2]);SDL_RenderClear(renderer);SDL_RenderCopy(renderer, texture, NULL, NULL);SDL_RenderPresent(renderer);
}void iniSdl()
{SDL_Init(SDL_INIT_VIDEO);window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE);renderer = SDL_CreateRenderer(window, -1, 0);texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, width, height);
}

相关文章:

在VS2017下FFmpeg+SDL编写最简单的视频播放器

1.下载ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下&#xff0c;并设置调试命令 5.复制一下mp4视频到工程Debug目录下&#xff08;复制一份到*.vcxproj同一目录&#xff0c;用于调试&#xff09; 6…...

LogViewer v2.x更新

logvewer 介绍 logviewer 是一个可以方便开发人员通过浏览器查看和下载远程服务器集群日志&#xff0c;使用ssh方式管理远程tomcat、jar包等应用&#xff0c;节省服务器资源。大家可以下载体验&#xff0c;请勿用于生产环境。欢迎提出意见或建议。 解决的问题 一般情况下公司…...

detection_segmentation

目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类&#xff1a; R-CNN生成…...

0基础学python-13:古希腊掌管时间的模块——datetime和time

目录 前言 datetime模块 一、datetime 类 1.创建 datetime 对象 2.获取日期时间的各个部分 3.格式化日期时间为字符串 4.解析字符串为 datetime 对象 二、timedelta 类 1.创建 timedelta 对象 datetime注意事项 time模块 1.获取当前时间戳 2.获取当前时间的结构化表…...

棒球特长生升学具有其独特的优势和劣势·棒球6号位

棒球特长生升学具有其独特的优势和劣势&#xff0c;以下是对这两方面的详细分析&#xff1a; 获得更好的教育资源&#xff1a; 棒球特长生有机会通过棒球特长招生计划进入更好的学校。这些学校往往拥有更优质的教育资源&#xff0c;包括师资力量、教学设施、课程设置等&#…...

搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示

Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技&#xff1a;Xsens DOT 可穿戴传感器介绍及示例应用演示...

数据分析案例-2024 年热门动漫数据集可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)

方案一&#xff1a;移除类库这些失效的引用&#xff0c;下载对应版本的dll&#xff08;如有则不需要重复下载&#xff09;&#xff0c;重新添加引用 方案二&#xff1a;类库右键属性-调整目标框架版本&#xff08;一般是降低版本&#xff09; 方案三&#xff1a;调整类库编译顺…...

STM32智能无人机控制系统教程

目录 引言环境准备智能无人机控制系统基础代码实现&#xff1a;实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;无人机管理与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…...

从 QWebEnginePage 打印文档

QWebEnginePage 是 Qt WebEngine 模块中的一个类&#xff0c;它提供了用于处理网页内容的接口。如果你想要打印 QWebEnginePage 中的内容&#xff0c;你可以使用 QPrinter 和 QPrintDialog 类来实现。 项目配置了 Qt WebEngine 模块&#xff0c;并且在你的.pro文件中包含了相应…...

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术&#xff1a;Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器&#xff08;阿里系&#xff09;搜索镜像获取镜像查看镜像信息…...

【学术会议征稿】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)

2024年第三届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2024) 2024 3rd International Conference on Informatics,Networking and Computing (ICINC 2024) 2024年第三届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2024)将于2024年10月25-27日于中国郑州召…...

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言&#xff0c;我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道&#xff0c;fmt.Sprintf返回的…...

策略模式原理与C++实现

定义 定义一些列算法&#xff0c;把他们一个个封装起来&#xff0c;并且使他们可以相互替换&#xff08;变化&#xff09;。该模式使得算法可独立于使用它的客户程序&#xff08;稳定&#xff09;而变化&#xff08;扩展、子类化&#xff09;。 C实现 在不考虑策略模式的情况…...

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功&#xff0c;通过将成熟模块打包成IP核&#xff0c;可实现重复利用&#xff0c;避免重复造轮子&#xff0c;大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核&#xff0c;再分别调用…...

《昇思25天学习打卡营第05天|qingyun201003》

日期 心得 通过本节课的学习&#xff0c;学习到了通过网络获取数据集&#xff0c;处理数据集模型。数据模型层数据变换&#xff0c;模型参数解析和其对应代码中的API进行解析。 昇思MindSpore 基础入门学习 网络构建 (AI 代码解析) 网络构建 神经网络模型是由神经网络层和T…...

【Leetcode】二十一、前缀树 + 词典中最长的单词

文章目录 1、背景2、前缀树Trie3、leetcode208&#xff1a;实现Trie4、leetcode720&#xff1a;词典中最长的单词 1、背景 如上&#xff0c;以浏览器搜索时的自动匹配为例&#xff1a; 如果把所有搜索关键字放一个数组里&#xff0c;则&#xff1a;插入、搜索一个词条时&#x…...

秋招Java后端开发冲刺——Mybatis使用总结

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …...

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高&#xff0c;文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件&#xff0c;使其既能保持清晰&#xff0c;又能轻松分享&#xff1f;今天&#xff0c;给大家分享五种实用的视频压缩方法&#xff0c;快来…...

【Oracle】Oracle语法之递归查询

目录 递归查询使用场景备注 语法相关属性解释 案例基本使用升级版-带上递归查询的属性 总结&#xff1a; 递归查询 Oracle的递归查询是指在一个查询语句中使用自引用的方式进行循环迭代查询。它可以用于处理具有层次结构的数据&#xff0c;如组织架构、产品类别等。递归查询通…...

Wan2.2-I2V-A14B部署教程:混合云架构下边缘节点视频生成能力下沉

Wan2.2-I2V-A14B部署教程&#xff1a;混合云架构下边缘节点视频生成能力下沉 1. 镜像概述与核心价值 Wan2.2-I2V-A14B私有部署镜像是一款专为文生视频场景优化的解决方案&#xff0c;特别适合需要在边缘节点部署视频生成能力的企业用户。这个镜像最大的特点是"开箱即用&…...

学历作为硬实力:当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制

学历作为硬实力&#xff1a;当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制 作者&#xff1a;培风图南以星河揽胜 专栏链接&#xff1a;澄心观道 字数&#xff1a;约 14,200 字 | 阅读时长&#xff1a;约 52 分钟 引言&#xff1a;一个被广泛观察却少有深究的社会…...

PowerToys Image Resizer:告别繁琐,三秒搞定图片批量处理

PowerToys Image Resizer&#xff1a;告别繁琐&#xff0c;三秒搞定图片批量处理 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trendin…...

轻流MCP|让AI从「会回答」走向「能参与实际业务」

当越来越多企业开始把 AI 引入日常工作&#xff0c;一个现实问题也越来越突出&#xff1a; AI 怎么真正接入业务系统&#xff0c;而不是只停留在聊天层&#xff1f; 过去&#xff0c;很多 AI 更擅长回答问题、生成内容、整理信息。它可以帮助人更快完成写作、总结和分析&#x…...

量化交易backtrader实践(二)_数据预处理篇(1)_格式转换与清洗

1. 数据预处理的重要性 在量化交易中&#xff0c;数据预处理就像做菜前的食材准备阶段。想象一下&#xff0c;如果你要做一道红烧肉&#xff0c;却直接拿刚从冰箱取出的冻肉下锅&#xff0c;结果可想而知。同样地&#xff0c;未经处理的原始金融数据直接喂给backtrader&#xf…...

intv_ai_mk11镜像部署教程:3条命令完成服务启动、状态检查、日志监控

intv_ai_mk11镜像部署教程&#xff1a;3条命令完成服务启动、状态检查、日志监控 1. 快速了解intv_ai_mk11 intv_ai_mk11是一款基于7B参数Llama架构的AI对话机器人&#xff0c;它能帮助你完成各种任务&#xff1a; 回答各类问题&#xff08;技术、生活、知识等&#xff09;辅…...

新手福音:用快马平台生成wsl安装ubuntu图文教程,轻松入门linux开发

最近在学Linux开发&#xff0c;发现Windows Subsystem for Linux&#xff08;WSL&#xff09;真是个神器&#xff0c;特别是搭配Ubuntu使用&#xff0c;既保留了Windows的便利性&#xff0c;又能体验原汁原味的Linux环境。不过刚开始安装配置时踩了不少坑&#xff0c;后来用Ins…...

别再为联合仿真头疼了!手把手教你用Amesim 2019和Matlab 2022b配置S-Function(Win10环境)

从零搭建Amesim与Matlab联合仿真环境&#xff1a;避坑指南与实战技巧 联合仿真技术已成为多物理场系统设计的黄金标准&#xff0c;但配置过程却让无数工程师在深夜的办公室里抓狂——编译器版本冲突、环境变量设置错误、接口编译失败&#xff0c;每一个环节都可能成为项目进度的…...

基于Maxwell的750W内转子伺服电机设计:14极12槽优化方案解析

基于maxwwell设计的经典750W&#xff0c;3000RPM 内转子 私服电机&#xff0c;14极12槽&#xff0c;外径76 轴向长度56.7 &#xff0c;转矩1Nm,直流母线12V&#xff0c;辅助槽优化了齿槽转矩&#xff0c;特色是转子加工方便&#xff0c;永磁同步电机&#xff08;PMSM BLDC&…...

告别预烘焙!在UE材质编辑器中实时生成FlowMap和法线贴图(附节点图)

实时材质魔法&#xff1a;UE引擎中FlowMap与法线贴图的动态生成技术 在游戏开发与动态视觉创作领域&#xff0c;材质表现的真实感与动态效果一直是技术美术师们追求的核心目标。传统工作流中&#xff0c;FlowMap&#xff08;流场图&#xff09;和法线贴图的生成往往依赖于外部软…...