ffmpeg-4.0.2版本中ffplay播放器在vs2013下的编译

2024-06-16 00:08

本文主要是介绍ffmpeg-4.0.2版本中ffplay播放器在vs2013下的编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相信很多想要学习播放器开发的小伙伴都知道ffplay,但是却不知道如何在vs2013下去编译,虽然网上已经有了一些教程,但是都不完整,或者ffmpeg的版本太老,所以就有了今天这篇文章。

好了,废话少说,直接上干货。

第一步下载ffmpeg源码,下载地址http://ffmpeg.org/download.html,具体界面如下:

第2步,下载ffmpeg的二进制版本,有些小伙伴可能会问为什么还要下载二进制,直接编译源代码不可以吗,当然可以,如果你不怕麻烦,你怎么都可以,但是我教你的方法是简单有效的方法,要不要学,嘿嘿。

输入如下网址:https://ffmpeg.zeranoe.com/builds/

界面如下:

然后下载win32下的Shared和Dev两个版本,就可以,win64同理,所以,我们这里以win32为例。下载完成后,按照下面的方式重新组织你的ffmpeg文件,具体如下:

在我这里有两个版本,x86代表32位,把所有的头文件放入include,lib和exe文件放入lib目录,bin目录你们可以不要。

第3步下载SDL库,我们这里也是用最新的版本SDL2-2.0.8,输入网址:http://www.libsdl.org/download-2.0.php

具体界面如下:

我们下载32位windows版本就可以,然后分别按照include和lib目录组织好自己的文件。

第4步,我们开始建立一个vs2013控制台工程,如下:

点击完成,如下:

好了,现在我们已经创建了一个vs2013控制台工程,但是现在没有任何文件,现在我们开始为它添加需要的文件,具体如下:

1)将ffmpeg-4.0.2\ffmpeg-4.0.2\fftools下的三个文件拷贝到自己的工程,三个文件如下:

cmdutils.h

cmdutils.c

ffplay.c

2) 将ffmpeg-4.0.2\ffmpeg-4.0.2\compat\avisynth\avs下的config.h文件拷贝到自己的工程

工程目录文件如下:

将所有文件添加到项目中,具体如下:

右键项目名称,添加-现有项,然后选择我们拷贝的4个源文件,效果如下:

3)配置我们的工程中的include目录,lib目录

include目录添加两个新项

D:\ffmpeg\x86\include

D:\SDL2-2.0.8\include

lib目录同样添加两个新项

D:\ffmpeg\x86\lib

D:\SDL2-2.0.8\lib\x86

然后配置依赖项,添加lib如下:

swscale.lib
swresample.lib
postproc.lib
avutil.lib
avformat.lib
avfilter.lib
avdevice.lib
avcodec.lib
SDL2.lib
SDL2main.lib

好了现在配置完成,下面,我们开始编译。

4)编译项目,错误具体如下:

只需要注释掉这行代码,就可以,同时也要注释掉另外两行代码,具体如下:

//#include "compat/va_copy.h"

//#include "libavresample/avresample.h"

//#include "libavutil/libm.h"

5)再次编译,具体如下:

处理方法:

注释掉print_program_info和print_all_libs_info内部的所有代码,具体如下:

6)再次编译,具体如下:

处理方法:

注释掉print_buildconf内部所有的代码,具体如下:

7)再次编译,具体如下:

处理方法:

在C++预处理其中,添加 _CRT_SECURE_NO_WARNINGS,具体如下:

8)再次编译,具体如下:

处理方法:

屏蔽SDL检测,具体如下:

将SDL检测改为否,就可以。

9)再次编译,具体如下:

处理方法:

在config.h中添加如下代码:

#define FFMPEG_DATADIR "D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2"

注意:

D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2是下面的源码目录,不是编译好的ffmpeg目录,目录内容具体如下:

10) 再次编译,具体如下:

处理方法:

在cmdutils.c中添加如下代码:

#define snprintf _snprintf

11)再次编译,具体如下:

到此,编译已经完成,然后只需要将相应的ffmpeg和SDL的相关DLL拷贝到exe所在目录即可,具体如下:

12)测试ffplay-vs.exe

首先打开cmd,并进入到ffplay-vs.exe所在目录,具体如下:

运行程序如下:

ffplay-vs.exe D:\d.mp4

运行效果如下:

到此,全部完成,是不是很简单,各位小伙伴,自己动手试试。

这篇关于ffmpeg-4.0.2版本中ffplay播放器在vs2013下的编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064965

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

InnoDB的多版本一致性读的实现

InnoDB是支持MVCC多版本一致性读的,因此和其他实现了MVCC的系统如Oracle,PostgreSQL一样,读不会阻塞写,写也不会阻塞读。虽然同样是MVCC,各家的实现是不太一样的。Oracle通过在block头部的事务列表,和记录中的锁标志位,加上回滚段,个人认为实现上是最优雅的方式。 而PostgreSQL则更是将多个版本的数据都放在表中,而没有单独的回滚段,导致的一个结果是回滚非

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(

Golang test编译使用

创建文件my_test.go package testsimport "testing"func TestMy(t *testing.T) {t.Log("TestMy")} 通常用法: $ go test -v -run TestMy my_test.go=== RUN TestMyTestMy: my_test.go:6: TestMy--- PASS: TestMy (0.

JeecgBoot 升级springboot版本到2.6.0

1. 环境描述 Jeecgboot 3.0,他所依赖的springboot版本为2.3.5Release,将springboot版本升级为2.6.0。过程全纪录,从2开始描述。 2. 修改springboot版本号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare