FFmpeg+SDL简单总结

本文介绍FFmpeg结合SDL进行视频编解码播放的实践经验,包括环境搭建、常见问题解决,如Debug与Release版本差异、跨平台编译冲突及Windows API函数链接等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有时间在看FFmpeg+SDL视频编解码播放,也是从看雷神的视频开始,天妒英才,缅怀下。后续还要看下雷神剩下的blog,对于开源项目,首先要做到编译通过,这是最基本的一步,我也是这样来看FFmpeg+SDL。

FFmpeg那几个动态链接库avcodec,avdevice....先没有自己编译,通过引用来使用里面的函数,搭建环境:

1.基本的就是要拷贝头文件,导入库,dll,在项目里面配置头文件目录,导入库目录,增加附加依赖项,sdl还要导入sdlmain.lib静态库

注:头文件有几个mingw里面的,是先安装mingw,在从里面拷贝出来的_mingw.h,inttypes.h,msvcrtver.h,stdint.h,w32api.h

2.就是c项目,和cpp项目的区别,最好用.cpp文件,这样不用改很多东西,导入头文件加入

extern “C"{}

#define __STDC_CONSTANT_MACROS

遇到比较特殊的问题:

1.FFmpeg Debug版本编译运行都没问题,但是Release编译正常,运行崩溃

解决方法:在Release版本下面使用保留未引用数据/OPT:NOREF

                 项目属性---->连接器----->优化------>引用------>/OPT:NOREF

2.想把SDL做成静态库,但是编译的时候出现错误:模块计算机类型x64与目标计算机类型x86冲突

解决方法:配置属性----->库管理器----->命令行------->加入/MACHINE:x64

3.SDL静态库编译好了,ffmpeg导入编译的时候出现连接错误,就是sdl里面调用windows api函数的地方链接错误

解决方法:sdl项目导入了windows api的winmm.lib,imm32.lib,version.lib,当编译成静态库的后,在ffmpeg项目里面导入就没找到windows api函数,导入这三个导入库就OK了

注:sdl说明里讲是directx的API封装,当时就用vc自带的工具dumpbin -dependents 查看,也没看到directx的相关dll,ddraw.dll, d3dx.dll, opengl32.dll等依赖的动态链接库,就有点迷惑,看了一些sdl的代码后才晓得,sdl是采用动态加载dll的方式来加载相关dll及函数,directx及opengl的市场情况:

directx: directx在家用市场全面领先

opengl:但在专业高端绘图领域,opengl是不能被取代的主角

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值