ffmpeg库使用及其错误解决
来源:互联网 发布:php企业网站管理系统 编辑:程序博客网 时间:2024/06/18 05:46
ffmpeg库使用及其错误解决
1.首先,需要弄明白Linux下动态库和静态库基础知识,这个网上自行搜索;
(1)linux动态库和静态库工作原理;
(2)如何用制作linux动态库和静态库;
(3)如何引用linux动态库和静态库;
2.ffmpeg动态库和静态库选项设定及编译
动态库 --enable-shared
./configure --prefix="ffmpeg-release-3.0/ffmpeg_build" --bindir="ffmpeg-release-3.0/ffmpeg_build/bin" --enable-shared --enable-gpl --extra-cflags="-I/ffmpeg-release-3.0/include" --extra-ldflags="-L/ffmpeg-release-3.0/ffmpeg_build/lib"
make V=1
make install V=1
静态库 --enable-static
./configure --prefix="ffmpeg-release-3.0/ffmpeg_build" --bindir="ffmpeg-release-3.0/ffmpeg_build/bin" --enable-static --enable-gpl --extra-cflags="-I/ffmpeg-release-3.0/include" --extra-ldflags="-L/ffmpeg-release-3.0/ffmpeg_build/lib"
make V=1
make install V=1
编译完成后:
ffmpeg_build/lib$ ls -l --block-size=m
total 200M
-rw-r--r-- 1 wr wr 128M Sep 18 10:42 libavcodec.a
-rw-r--r-- 1 wr wr 2M Sep 18 10:42 libavdevice.a
-rw-r--r-- 1 wr wr 19M Sep 18 10:42 libavfilter.a
-rw-r--r-- 1 wr wr 43M Sep 18 10:42 libavformat.a
-rw-r--r-- 1 wr wr 3M Sep 18 10:42 libavutil.a
-rw-r--r-- 1 wr wr 1M Sep 18 10:42 libpostproc.a
-rw-r--r-- 1 wr wr 1M Sep 18 10:42 libswresample.a
-rw-r--r-- 1 wr wr 7M Sep 18 10:42 libswscale.a
drwxr-xr-x 2 wr wr 1M Sep 18 10:42 pkgconfig
3.单个ffmpeg库使用:建议用ffmpeg动态库,静态库太大了,100多M,由于我编译的是静态库,那就以静态库示例;
单个静态库,不涉及库依赖,直接在gcc里面用-L参数引用即可;
/* * file: ffmpeglibtest.c * * author: openswc * http://blog.csdn.net/openswc * * gcc ffmpeglibtest.c -I./ffmpeg_build/include/ -L./ffmpeg_build/lib/ -lavutil -o ffmpeglibtest * gcc ffmpeglibtest.c -I /home/xxx/temp/ffmpeg-release-3.0/ffmpeg_build/include/ -L /home/xxx/temp/ffmpeg-release-3.0/ffmpeg_build/lib/ -lavutil -o ffmpeglibtest*/#include <stdio.h>#include "libavutil/log.h"int main(){int iLogLev = 0; iLogLev = av_log_get_level(); printf("av_log_get_level is *%d*\n", iLogLev); av_log_set_level(AV_LOG_DEBUG);iLogLev = av_log_get_level();printf("av_log_set_level is *%d*\n", iLogLev); return 0;}
/* * file: ffmpeglibtestm.c * * author: openswc * http://blog.csdn.net/openswc * * gcc ffmpeglibtestm.c -I./ffmpeg_build/include/ -L./ffmpeg_build/lib/ -lavformat -lavcodec -lswresample -lavutil -pthread -lva -lm -lz -o ffmpeglibtestm * gcc ffmpeglibtestm.c -I /home/xxx/temp/ffmpeg-release-3.0/ffmpeg_build/include -L /home/xxx/temp/ffmpeg-release-3.0/ffmpeg_build/lib -lavformat -lavcodec -lswresample -lavutil -pthread -lva -lm -lz -o ffmpeglibtestm*/#include <stdio.h>#include "libavutil/log.h"#include "libavformat/avformat.h"void test_log(){av_register_all();AVFormatContext *obj=NULL;obj=avformat_alloc_context();printf("====================================\n");av_log(obj,AV_LOG_PANIC,"Panic: Something went really wrong and we will crash now.\n");av_log(obj,AV_LOG_FATAL,"Fatal: Something went wrong and recovery is not possible.\n");av_log(obj,AV_LOG_ERROR,"Error: Something went wrong and cannot losslessly be recovered.\n");av_log(obj,AV_LOG_WARNING,"Warning: This may or may not lead to problems.\n");av_log(obj,AV_LOG_INFO,"Info: Standard information.\n");av_log(obj,AV_LOG_VERBOSE,"Verbose: Detailed information.\n");av_log(obj,AV_LOG_DEBUG,"Debug: Stuff which is only useful for libav* developers.\n");printf("====================================\n");avformat_free_context(obj);}int main(){int iLogLev = 0;iLogLev = av_log_get_level();printf("av_log_get_level is *%d*\n", iLogLev);av_log_set_level(AV_LOG_DEBUG);iLogLev = av_log_get_level();printf("av_log_set_level is *%d*\n", iLogLev);test_log();return 0;}
如果引用多个ffmpeg库,则需要注意多个ffmepg库之间的依赖关系,那如何确定这个依赖关系呢?
找到该库的信息配置文件libxxx.pc,里面的Requires说明了需要依赖的库。
libavcodec.pc libavdevice.pc libavfilter.pc libavformat.pc libavutil.pc libpostproc.pc libswresample.pc libswscale.pc
ffmpeg-release-3.0/ffmpeg_build/lib/pkgconfig$ cat libavcodec.pc
prefix=/home/xxx/temp/ffmpeg-release-3.0/ffmpeg_build
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Description: FFmpeg codec library
Version: 57.24.102
Requires: libswresample >= 2.0.101, libavutil >= 55.17.103
Requires.private:
Conflicts:
Libs: -L${libdir} -lavcodec -lva -lva-x11 -lva -lxcb -lXau -lXdmcp -lxcb-shm -lxcb -lXau -lXdmcp -lxcb-xfixes -lxcb-render -lxcb-shape -lxcb -lXau -lXdmcp -lxcb-shape -lxcb -lXau -lXdmcp -lX11 -lasound -lSDL -lpthread -lm -ldl -lasound -lm -ldl -lpthread -lpulse-simple -lpulse -lX11 -lXext -ldirectfb -lfusion -ldirect -lpthread -lcaca -lpthread -lm -lz -pthread
Libs.private:
Description: FFmpeg codec library
Version: 57.24.102
Requires: libswresample >= 2.0.101, libavutil >= 55.17.103
Description: FFmpeg device handling library
Version: 57.0.101
Requires: libavfilter >= 6.31.100, libswscale >= 4.0.100, libpostproc >= 54.0.100, libavformat >= 57.25.100, libavcodec >= 57.24.102, libswresample >= 2.0.101, libavutil >= 55.17.103
Description: FFmpeg audio/video filtering library
Version: 6.31.100
Requires: libswscale >= 4.0.100, libpostproc >= 54.0.100, libavformat >= 57.25.100, libavcodec >= 57.24.102, libswresample >= 2.0.101, libavutil >= 55.17.103
Description: FFmpeg container format library
Version: 57.25.100
Requires: libavcodec >= 57.24.102, libswresample >= 2.0.101, libavutil >= 55.17.103
Description: FFmpeg utility library
Version: 55.17.103
Requires:
Description: FFmpeg postprocessing library
Version: 54.0.100
Requires: libavutil >= 55.17.103
Description: FFmpeg audio resampling library
Version: 2.0.101
Requires: libavutil >= 55.17.103
Description: FFmpeg image rescaling library
Version: 4.0.100
Requires: libavutil >= 55.17.103
or
undefined reference to `avformat_alloc_context()'
/ffmpeg-release-3.0/libavcodec/atrac3plusdsp.c:107: undefined reference to `cos'
/ffmpeg-release-3.0/libavcodec/atrac3plusdsp.c:111: undefined reference to `exp2f'
/ffmpeg-release-3.0/libavformat/http.c:626: undefined reference to `inflateEnd'
/ffmpeg-release-3.0/libavformat/http.c:627: undefined reference to `inflateInit2_'
/ffmpeg-release-3.0/libavformat/http.c:632: undefined reference to `zlibCompileFlags'
如果缺少-pthread,则会报以下undefined reference to错误;
/ffmpeg-release-3.0/libavformat/async.c:281: undefined reference to `pthread_create'
/ffmpeg-release-3.0/libavformat/udp.c:974: undefined reference to `pthread_cancel'
- ffmpeg库使用及其错误解决
- ffmpeg常用命令及其使用
- ffmpeg 静态库使用,undefined reference错误
- ffmpeg 静态库使用,undefined reference错误
- 使用ffmpeg库编译错误及解决办法
- 使用ffmpeg库编译错误及解决办法
- ffmpeg 静态库使用,undefined reference错误
- 使用ffmpeg的库 链接错误, LNK2019
- ffmpeg 静态库使用,undefined reference错误
- ffmpeg使用fPIC静态库解决记录
- Android下ffmpeg库的连接几种错误解决
- makefile常见错误及其解决
- 使用FFmpeg demo常见错误
- linux使用及其FFmpeg的安装
- 解决编译ffmpeg时的错误
- 用Android NDK编译FFmpeg错误解决
- Ubuntu16.04 安装OpenCV 错误解决 ffmpeg
- 使用ffmpeg库编译错误undefined reference to `BZ2_bzDecompressInit'
- 第4周 项目2--建设“单链表”算法库
- bzoj 4245 [ONTAK2015]OR-XOR 贪心
- Python中dict详解
- SDWebImage源代码解析(一)Cache
- 这是一个初学者记录自己学习reactjs进程的博客
- ffmpeg库使用及其错误解决
- 插入节点appendChild
- 小白初来乍到,一点学习经历(XX-Net)
- 欢迎使用CSDN-markdown编辑器
- SSH整合struts2中validation问题
- xml.dom 模块对xml文档的基本操作
- java的命令笔记
- Unity3d实现Android滑动屏幕移动3D物体
- 探索跨平台应用开发的最佳实践