3个平台下的ffmpeg——ffmpeg编译

ffmpeg编译

需要在3个平台(win\linux\arm)下使用ffmpeg的库,所以进行了ffmpeg的编译。

其中ffmpeg的编译也有许多依赖,不同平台依赖的也不一样,少了一个依赖可能就少了一个功能了。

Windows下的ffmpeg:

Win下的ffmpeg就懒得编译了,因为官网已经有现成的了。

http://ffmpeg.zeranoe.com/builds/

Linux下的ffmpeg:

ffmpeg没有自带h264的编码库最起码会用到libx264,这个可以去网上下载last_stable_x264.tar.bz2。下面还有加入librtmp的编译。

解压成目录x264_stable

####进入x264-stable里

./configure --prefix=/usr/local/x264 --enable-shared --enable-static --enable-yasm

make

make install

####编译ffmpeg:::::

sudo ./configure --enable-shared --disable-static --disable-yasm --enable-libx264  --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --enable-librtmp --prefix=/home/linux/Work/ffmpeg3.2_linux --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib

make

make install

###成功后,

去执行./ffmpeg 错误,缺少ffmpeg库,在/etc/ld.so.conf 里加上路径,然后sudo ldconfig

之后还错误,缺少libx264.so.xxx库,这个要软连过去::

ln -sf /usr/local/x264/lib/libx264.so.148 /usr/lib/libx264.so.148

可以成功执行ffmpeg.

可以成功执行程序:

gcc -o  runtest test.c  -lpthread -lm -I. -L./lib_ffmpeg/lib -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lpostproc -lswscale -lswresample

如果程序出现但是出现错误

[h264_nvenc @ 0x1bb8160] Cannot load libcuda.so.1。

那就是还没编译进x264

----重新编译ffmpeg 链接librtmp

参考:http://blog.csdn.net/fireroll/article/details/8607955

下载 http://rtmpdump.mplayerhq.hu/download/

主要步骤:(他的是把librtmp 编成静态库,集成到ffmpeg中)

cd rtmpdump

cd librtmp

gedit Makefile::

prefix=3RDLIB_INSTALL_PATH

...

#CRYPTO=OPENSSL

CRYPTO=

...

#SO_LDFLAGS_posix=-shared -Wl,-soname,$@

SO_LDFLAGS_posix=-Wl,-soname,$@ //这里可能没有,已经写在下面的编译里了。

...

#SHARED=yes

SHARED=no

make

cd .. (返回上一级目录)

make SYS=posix XDEF=-DNO_SSL CRYPTO= SHARED=  (这里参考了README,SYS=posix)

make install

编译ffmpeg:

注释了configure里的 enable librtmp 一行,加入一些编译项:

sudo ./configure --enable-shared --enable-static --disable-yasm --enable-libx264  --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-postproc --enable-pthreads --enable-librtmp --prefix=/home/linux/Work/ffmpeg3.2_linux --extra-cflags="-I/usr/local/librtmp/include -I/usr/local/x264/include"  --extra-ldflags="-L/usr/local/librtmp/lib -L/usr/local/x264/lib" --extra-libs="-lrtmp -lx264"

之前一直不成功,是因为下错了librtmp,导致一直找不到RTMP_Socket ,现在使用的版本为2.3

sudo make

sudo make install

arm下的ffmpeg:

参考 http://blog.csdn.net/just__be__yourself/article/details/51872060

首先,arm下的ffmpeg将来会用到很多功能,例如编解码,网络媒体流等等,所以我编译了很多依赖进去。尤其是想要推流rtmp 必须编译librtmp进去,否则推流会失败。

依赖的库有x264、librtmp、xvidcore

由于x264 和librtmp也要交叉编译。

X264::

http://blog.csdn.net/zjqlovell/article/details/48463913

1) [root@demo x264]# ./configure --enable-pthread --enable-static --enable-shared --host=arm-linux --disable-asm

2)修改config.mak

SRCPATH=.

prefix=/usr/local/x264_arm

exec_prefix=${prefix}

bindir=${exec_prefix}/bin

libdir=${exec_prefix}/lib

includedir=${prefix}/include

SYS_ARCH=ARM

SYS=LINUX

CC=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc

CFLAGS=-Wshadow -O3 -ffast-math  -Wall -I. -I$(SRCPATH) -std=gnu99 -D_GNU_SOURCE -fomit-frame-pointer -fno-tree-vectorize

COMPILER=GNU

COMPILER_STYLE=GNU

DEPMM=-MM -g0

DEPMT=-MT

LD=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc -o

LDFLAGS= -L/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/lib -lm -L/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/lib -lpthread -L/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/lib -ldl

LIBX264=libx264.a

AR=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ar rc

RANLIB=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ranlib

STRIP=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-strip

make

sudo make install

成功。

###

librtmp::

http://blog.csdn.net/zjqlovell/article/details/47312453

http://blog.csdn.net/chengkai_/article/details/52061960

首先要编译两个依赖库有 zlib 和  openssl,所有的库都可以在其官网下载。

openssl:

./config CC=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc --prefix=/usr/local/openssl_arm

sudo make

sudo make install

zlib:

sudo ./configure

修改Makefile:

CC=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc

LDSHARED=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map

CPP=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc -E

AR=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ar

ARFLAGS=rc

RANLIB=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ranlib

prefix =/usr/local/zlib_arm

sudo make

sudo make install

成功。

依赖库成功后,正式开始编译librtmp:

之前一直不成功,是因为下错了librtmp,导致一直找不到RTMP_Socket ,现在使用的版本为2.3

 

修改 librtmp/Makefile:::

prefix=/usr/local/librtmp_arm

XCFLAGS=-I/usr/local/include -I/usr/local/zlib_arm/include -I/usr/local/openssl_arm/include -L/usr/local/lib -L/usr/local/zlib_arm/lib -L/usr/local/openssl_arm/lib

CROSS_COMPILE=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-

SYS=posix

CRYPTO=OPENSSL

#SHARED=yes

SHARED=no

然后make 这个Makefile文件

再修改 源代码根目录下的Makefile

prefix=/usr/local/librtmp_arm

XCFLAGS=-I/usr/local/include -I/usr/local/zlib_arm/include -I/usr/local/openssl_arm/include

XLDFLAGS=-L/usr/local/lib -L/usr/local/zlib_arm/lib -L/usr/local/openssl_arm/lib

CROSS_COMPILE=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-

SYS=posix

#SYS=mingw

CRYPTO=OPENSSL

make SYS=posix CROSS_COMPILE=arm-hisiv200-linux- INC=-I/usr/local/include XDEF=-DNO_SSL CRYPTO= SHARED=

sudo make install

成功!

####

Libxvidcore :  

http://ftp.br.debian.org/debian-multimedia/pool/main/x/xvidcore/

开始编译ffmpeg:

这里依赖x264、librtmp、xvidcore、 libz、libcrypto、libssl ,后两个都在openssl 里::

sudo ./configure --enable-cross-compile --target-os=linux --arch=arm --enable-shared --disable-static --disable-yasm  --enable-libx264  --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-postproc --enable-libxvid --enable-pthreads --enable-librtmp --prefix=/home/linux/Work/ffmpeg3.2_hi200so --extra-cflags="-I/usr/local/librtmp_arm/include -I/usr/local/x264/include -I/usr/local/include -I/usr/local/openssl_arm/include -I/usr/local/zlib_arm/include -I/usr/local/xvid_arm/include"  --extra-ldflags="-L/usr/local/librtmp_arm/lib -L/usr/local/x264/lib -L/usr/local/lib -L/usr/local/openssl_arm/lib -L/usr/local/zlib_arm/lib -L/usr/local/xvid_arm/lib" --extra-libs="-lrtmp -lx264 -ldl -lssl -lcrypto -lz -lxvidcore" --cc=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc

出错:

之前我编译的时候会出错:

arm-hisiv200-linux-gcc is unable to create an executable file.

C compiler test failed.

If you think configure made a mistake, make sure you are using the latest

version from Git.  If the latest version fails, report the problem to the

ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.

Include the log file "config.log" produced by configure as this will help

solve the problem.

》》》方法是要加入工具链的库,在/usr/local/lib 里,链接 上 -ldl

期间出现什么未找到,未定义,都是库路径或者没有加入该库。

还有出现的C compiler test failed.

都是工具链gcc路径不对,工具链没有加入头文件和库,没有加入 -ldl

或者加入的x264、librtmp、xvidcore、 libz、libcrypto、libssl等没有交叉编译。

然后要修改config.mak

AR=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ar

RANLIB=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-ranlib

STRIP=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-strip

只用修改这里

然后

sudo make

sudo make install

成功。

在arm上运行,缺少库的话,都复制放在ffmpeg的lib里。运行./ffmpeg 成功》

出错:

之前我运行程序错误:

Assertion v>0 && v<=(0 ? 32 : 16) failed at libavutil/mem.c:233

av_packet_free这里出错,

百度了:根据上述代码段,在FFmpeg编译configure时,尝试了将-enable-memalign-hack 选项去掉,发现能正常工作了。不过,暂时还不清楚为什么会这样~~~

从av_packet_free(&Gparg->v_queue->avPacket[i]); 改回free就不报错。

在板子上ffmpeg,发现编译选项里多了-enable-memalign-hack 这个选项,居然是我手动加入的......重新编译去掉这个选项,程序就不会出错了。

3个平台下的ffmpeg——ffmpeg编译相关推荐

  1. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

  2. windows平台下用CMake工具编译osg用法说明

    最近研究osg,用CMake工具将osg源码转为VS下的工程.解决方案,开始时不懂,走了很多弯路,现在将自己理解的记录如下: 1):在CMake图形界面中的"Where is the sou ...

  3. ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能

    ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础 ...

  4. 【ffmpeg】编译时报错:error: undefined reference to `av...

    1.问题描述 昨天使用ffmpeg库编译demo一切正常,今天再次链接ffmpeg库时报了一堆错误: error: undefined reference to `av_frame_alloc()' ...

  5. windows平台下vlc编译之十三:vlc1.1.0编译

    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. --------------------------------------------------- ...

  6. windows平台下vlc编译之六:vlc-0.9.8a的编译

    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. --------------------------------------------------- ...

  7. ffmpeg库编译加文字_ffmpeg第三方库编译记录

    最近在研究ffmpeg的编译,之前使用的Ubuntu,需要安装虚拟机,非常麻烦,所以后来改研究在Windows平台编译. 一开始遇到很多挫折,参考了网上很多的帖子,但要么不全要么内容已过期,经过我的反 ...

  8. ffmpeg的编译大全

    ffmpeg的编译大全 最近互联网视频共享的网站很火,公司也想搞类似的网站,初步是用fms+ffmpeg形式 fms负责在线录制,播放,ffmpeg则在后台处理上传的资源转换成一定的格式. 为了让ff ...

  9. windows平台下vlc编译

    转自:http://jeremiah.blog.51cto.com/539865/114190     Jeremiah刚刚工作几个月,参与的第一个项目是与视频监控有关,分配给我的任务就是用开源的vl ...

最新文章

  1. LeetCode简单题之重塑矩阵
  2. 在ApacheHTTPD服务器中使用DSO完全分析
  3. python strip_Python3 strip()方法
  4. python 循环赋值_Python打牢基础,从19个语法开始!
  5. 设置MySQL排序方式_设置MySQL设置字符集和排序方式
  6. 计算机网络 第一章 计算机网络和因特网
  7. 更为简单的Ctrl+S自动刷新浏览器工具-LinrF5
  8. 观点 PK | 商用 PC or 消费 PC,开发者究竟该如何取舍?
  9. 一文带你入门知识图谱多跳问答
  10. Linux笔记(一)——虚拟机的安装与Centors安装,安装vmtools,虚拟机的克隆,虚拟机的快照,共享文件的使用
  11. 基于禁忌搜索算法的TSP搜索算法
  12. 记事本新建一个html文件,怎样使用记事本建立新文件 怎么在电脑中新建一个记事本 啊?...
  13. 有哪些小而美的中小厂?
  14. 学习记录, 带你玩转Pyppeteer (全干货)
  15. 反编译微信小程序(图文详细傻瓜式)
  16. vue原生js打印插件
  17. 第一次暑假实习面试,进入二面就算成功(没有成功)
  18. 推荐5款Windows桌面效率工具
  19. SAP 系统组织结构
  20. SJTU 《综合英语一》备考题

热门文章

  1. 1009. clion调试段错误
  2. java 布局管理器_java布局管理器-borderlayout
  3. 网络协议栈深入分析(三)--BSD socket和传输层sock
  4. 内存的工作原里(二)
  5. 北京工业大学c语言期末考试题,北京工业大学C语言部分练习答案.docx
  6. sci的figure怎么做_如何制作科技论文中的Figure
  7. 数据结构----排序
  8. python3里面的图片处理库 pillow
  9. 2-2:python之控制结构
  10. Web前端的学习路线,你真的知道吗?