概述
windos和linux环境下的ffmpeg库编译
- windos 环境:
- 以VS为例子:
- linux 环境(交叉编译):
- 以arm-linux-gnueabihf-gcc 和aarch64-himix100-linux-gcc工具链为例子配置configure
- 编写makefie 指定ffmpeg 头文件和库文件路径 方便编写应用程序
- 碰到问题:/bin/sh: 1: aarch64-himix100-linux-strip: not found
- linux 环境(UBUNTU 18.04):
- 碰到问题0:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
- 碰到问题1:make时提示libavutil/log2_tab.o: error adding symbols: File in wrong format
- 碰到问题2:生成的bin文件夹里没有ffplay
- ffmpeg ffplay 测试命令
- ffmpeg 推h265流到rtmp服务器
- ffplay 从rtmp服务器拉流播放
windos 环境:
windos环境下可以直接去ffmpeg官网下载已经编译好的库 链接:link
我这里下载的是ffmpeg-n4.3.1-26-gca55240b8c-win64-lgpl-shared-4.3.zip 文件,里面主要包含了include,bin和lib 三个文件夹,项目包含include 和lib 即可正常使用ffmpeg api,bin里面是api需要的相关动态库,把项目生成的程序和bin里面的动态库放到同一个路径。程序运行时才可以正常工作。
以VS为例子:
项目属性->c/c+±>常规->附加包含目录(添加include路径)
->连接器->常规->附件库目录(添加bin路径)
->常规->输出目录(设置为bin目录,方便程序调用动态库)
->调试->工作目录(设置为bin目录,方便程序调用动态库)
linux 环境(交叉编译):
1:官网下载源码:链接:link
2:设置configure 参数
3:make 和 make install
4:将生成的库移到开发板
5:设置环境变量:export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
6:调用ffmpeg api 编写程序
以arm-linux-gnueabihf-gcc 和aarch64-himix100-linux-gcc工具链为例子配置configure
arm-linux-gnueabihf-gcc:
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux
–cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=/usr/local/ffmpeg --enable-shared
–disable-static --enable-gpl --enable-nonfree --disable-armv5te --disable-armv6 --disable-armv6t2 --enable-pic
aarch64-himix100-linux-gcc:
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-cross-compile --target-os=linux --arch=aarch64 --cc=aarch64-himix100-linux-gcc --cxx=aarch64-himix100-linux-g++ --enable-gpl --disable-stripping --enable-pic
编写makefie 指定ffmpeg 头文件和库文件路径 方便编写应用程序
makefile:
CC=aarch64-himix100-linux-g++
INCLUDEPATH= -I /usr/local/ffmpeg/include
SRCS=main.cpp
LIBSPATH=-L /usr/local/ffmpeg/lib
LIB=-lavformat -lavutil -lavcodec -lswresample
OBJS=*.O
TAR=pushh265rtmp
all:
$(CC) $(INCLUDEPATH) -o $(TAR) $(SRCS) $(LIBSPATH) $(LIB)
clean:
rm -rf $(OBJS) $(TAR)
碰到问题:/bin/sh: 1: aarch64-himix100-linux-strip: not found
解决办法:在某些平台SDK编译中Linux脚本需要改为bin/bash,由于Ubuntu系统模式的脚本是sh,安装SDK之后,编译过程一定会出现错误,所以必须要先更改默认的bash才行
ls -lh /bin/sh
显示如下:表示sh命令链接到的是dash,而aarch64-himix100-linux-strip命令需要在bash的环境中执行
lrwxrwxrwx 1 root root 4 Dec 1 19:05 /bin/sh -> dash
执行sudo dpkg-reconfigure dash 命令,将dash设置为No。
linux 环境(UBUNTU 18.04):
同上面交叉编译一样,只不过更简单不用指定工具链,默认就是GCC,config 设置如下即可:./configure --prefix=/usr/local/ffmpeg_linux --enable-shared --disable-static 然后make make install,完成以后需要设置环境变量,才可是正常识别ffmpeg ffplay等命令和调用相应库
export PATH=$PATH:/usr/local/ffmpeg_linux/bin
export LD_LIBRARY_PATH=/usr/local/ffmpeg_linux/lib/
碰到问题0:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
需要安装yasm的汇编编译器
解决办法:sudo apt-get install yasm
碰到问题1:make时提示libavutil/log2_tab.o: error adding symbols: File in wrong format
解决办法:sudo apt install libavutil-dev 安装对应库,需要make clean一下,否则make时有可能依旧提示错误
碰到问题2:生成的bin文件夹里没有ffplay
解决办法:ffplay需要sdl2包支持(sudo apt-get install libsdl1.2-dev ),安装sdl重新配置编译安装即可。安装sdl2之前查看/ffmpeg-4.3.1/ffbuild/config.mak 可以看到!CONFIG_FFPLAY=yes 说明ffplay 是没有编译进去的,安装sdl2后,重新配置./config 可以看到!CONFIG_FFPLAY=yes 前面的!已经没有了,然后make make install 即可
ffmpeg ffplay 测试命令
ffmpeg 推h265流到rtmp服务器
ffmpeg -re -i /home/yiy/zhf/stream_chn0.h265 -vcodec copy -f flv rtmp://192.168.2.13:1935/live/home
ffplay 从rtmp服务器拉流播放
ffplay rtmp://192.168.2.13:1935/live/home 拉流
最后
以上就是幸福电源为你收集整理的windos和linux环境下的ffmpeg库编译windos 环境:linux 环境(交叉编译):linux 环境(UBUNTU 18.04):ffmpeg ffplay 测试命令的全部内容,希望文章能够帮你解决windos和linux环境下的ffmpeg库编译windos 环境:linux 环境(交叉编译):linux 环境(UBUNTU 18.04):ffmpeg ffplay 测试命令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复