问题解决:FFmpeg视频编解码库,无法解析的外部信号

在编译FFmpeg相关项目时,可能会出现:

error LNK2019: 无法解析的外部符号 "int __cdecl avpicture_fill(struct AVPicture *,unsigned char const *,enum AVPixelFormat,int,int)" (?avpicture_fill@@YAHPAUAVPicture@@PBEW4AVPixelFormat@@HH@Z),该符号在函数 "bool __cdecl YV12ToBGR24_FFmpeg(unsigned char *,unsigned char *,int,int)" (?YV12ToBGR24_FFmpeg@@YA_NPAE0HH@Z) 中被引用

error LNK2019: 无法解析的外部符号 "void __cdecl sws_freeContext(struct SwsContext *)" (?sws_freeContext@@YAXPAUSwsContext@@@Z),该符号在函数 "bool __cdecl YV12ToBGR24_FFmpeg(unsigned char *,unsigned char *,int,int)" (?YV12ToBGR24_FFmpeg@@YA_NPAE0HH@Z) 中被引用

这种类似情况,在检查包含目录、库目录、链接器输入和系统环境变量均设置无误的情况下,包含的文件要写成以下形式:

extern "C"
{
    #include <libavcodec\avcodec.h>
    #include <libavformat\avformat.h>
    #include <libswscale\swscale.h>
    #include <libavutil\pixfmt.h>
    #include <libavutil\imgutils.h>
};

这种情况是因为,头文件中的函数定义在编译为 C 程序的文件中,而头文件是在 C++ 文件中不带 extern “C” 修饰符声明的。在此情况下,需要添加extern "C"修饰符。

类似的,定义在编译为 C 程序的文件中的符号, 若要在C++ 文件中进行声明,不可使用:

extern int i;
extern void g(); 

而应该使用:

extern "C" int i;
extern "C" void g(); 

详细的解释:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html

时间: 2024-10-13 03:20:01

问题解决:FFmpeg视频编解码库,无法解析的外部信号的相关文章

视频编解码的理论和实践2:Ffmpeg视频编解码

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 <视频直播关键技术:流畅.拥塞和延时追赶> <视频直播技术详解:直播的推流调度> <音视频通话:小议音频处理与压缩技术> <视频编解码的理论和实践1:基础知识介绍>   1.Ffmpeg介绍 <视频编解码的理论和实践1:基础知识介绍>介绍了视频编码的基础

FFmpeg音视频编解码实践总结

PS:由于目前开发RTSP服务器 传输模块时用到了h264文件,所以攻了一段时间去实现h264的视频编解码,借用FFmpeg SDK实现了任意文件格式之间的转换,并实现了流媒体实时播放,目前音视频同步需要稍加完善,视频编码代码已成功移植到Visual Stdio平台,如有需要的留下邮箱 以下文档来自FFmpeg工程组(http://www.ffmpeg.com.cn/index.php开发事例) 实现转码一个普通视频文件为视频mpeg4,音频mp3的功能的程序 本程序源引自FFmpeg工程组,实

libavcodec是一款LGPL自由软件编解码库,用于视频和音频数据的编解码工作

http://zh.wikipedia.org/zh-cn/Libavcodec http://baike.baidu.com/view/856526.htm libavcodec是一款LGPL自由软件编解码库,用于视频和音频数据的编解码工作.带有这个名字的库有FFmpeg项目和Libav项目,但是它们却彼此不兼容. libavcodec是个集成了许多开源多媒体应用和框架.常见的MPlayer.xine和VLC媒体播放器都使用它作为它们的主要内置解码引擎,用于许多音频视频格式在所有支持的平台上的

【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅.绝知此事要躬行".仅仅有自己依照标准文档以代码的形式操作一遍,才干对视频压缩编码标准的思想和方法有足够深刻的理解和体会. 链接地址:H.264/AVC视频编解码技术具体解释 GitHub代码地址:点击这里 1. H.264的CAVLC

【H.264/AVC视频编解码技术详解】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流

【H.264/AVC视频编解码技术详解】十一、H.264的Slice Header解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中的条带(Slice) 1. Slic

各种音视频编解码学习详解

各种音视频编解码学习详解 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等.最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了.所以豆丁上看不出所以然,从 wiki上查.中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版

Windows系统下开源编解码库H.264与FFmpeg-2.8.2的编译与配置

一. 前言 FFmpeg是一个基于Linux开发的开源项目,其源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不支持MSVC++编译,需要在Windows下配置一个类似Linux的编译环境进行编译. 编译生成动态链接库dll,这些库将和其他的动态链接库一样在使用上没什么差别.可以使用MSVC++来链接这些库到其他的程序,也就是说,Windows + Visual Studio平台下的软件开发. 如果没有时间了解以下编译的过程,可直接下载以下链接的压缩

音视频编解码(一)——解码:代码实现

前言:对于从未接触过音视频编解码的同学来说,使用FFmpeg的学习曲线恐怕略显陡峭.本人由于工作需要,正好需要在项目中使用.因此特地将开发过程总结下来.只当提供给有兴趣的同学参考和学习. 由于FFmpeg是使用C语言开发,所有和函数调用都是面向过程的.以我目前的学习经验来说,通常我会把一个功能的代码全部放在main函数中实现.经过测试和修改认为功能正常,再以C++面向对象的方式逐步将代码分解和封装.因此在对本套指南中我也会采用先代码实现再功能封装的步骤. 一.开发前的准备工作 开发工具为VS20