关于在windows体系中编译ffmpeg并导入到本身项目中这件事 ...

打印 上一主题 下一主题

主题 1025|帖子 1025|积分 3075

关于在windows体系中编译ffmpeg并导入到本身项目中这件事

前因(可跳过不看)

前阵子由于秋招需求,写了一个浅易的安卓播放器,最终因为时间问题另有一些功能没有实现着实可惜,如:倍速播放,快进操作,从其它渠道获取音视频流举行播放。由于对安卓开辟的不认识,在安卓平台上调试问题的手段比较有限,比较疑惑的是偶尔间打断点可以走到步伐中的某一步,偶尔间走不到。因此现在筹划开辟一款基于QT的音视频播放器,把遗憾一次性补齐。
编译ffmpeg

先前是在linux服务上使用ndk工具链编译的ffmpeg源代码,而windows操作体系中由于不具备一些必备的情况,网上也搜索了许多文章,末了断定windows中编译ffmpeg极具难度,不好直接编译,因此就需要在windows情况中构建linux情况。这里博主参考了网上用的比较多的方案MSYS.使用windows中的c语言编译器,Mingw64举行编译,那么废话不多说,下面看看需要预备哪些前提:


  • MSYS: 你可以把它理解成,是在windows情况下,模拟了linux操作体系,但是本质还是windows,但是它具备linux中的常用工具,相称于是把linux中的一些常用命令搬到windows上了
  • FFMPEG 4.3.8: ffmpeg的源码,我用的这个版本,可自行选择版本
  • CLION: JetBrain出的一款很好用的c语言IDE,从java转过来的觉得很密切,可以很方便的在windows情况中使用cmake举行管理项目。
MSYS的预备工作

进入到MSYS的官网举行下载

下载完成之后直接无脑下一步安装就好了,中间有一步需要选择安装根目录,我这里怕出幺蛾子,直接默认路径了。

安装完成之后,可以在所选根路径下看到如下内容(博主这里不是刚下完之后的截图,但是大差也不差)

从开始处可以看到如下内容。

我们这里重要使用MingW64情况对ffmpeg项目举行编译处理。因此打开MSYS2 MINGW64
刚安装完这边应该是没有gcc,cmake,make这些情况的,因此需要举行安装。MSYS2情况中安装使用的是pacman命令,这里默认是哀求的外网,没有科技的小同伴大概访问速度较慢(压根没办法访问)。因此需要先把镜像源换成清华镜像源。实行如下命令即可。
  1. sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
复制代码
安装依靠包
  1. pacman -S mingw-w64-ucrt-x86_64-gcc
  2. pacman -S mingw-w64-ucrt-x86_64-gdb
  3. pacman -S mingw-w64-x86_64-toolchain git make automake autoconf perl libtool mingw-w64-x86_64-cmake pkg-config yasm diffutils nasm
复制代码
安装完成之后,可以输入命令尝试一下。像下面这样子根本就ok了

至此MSYS的前置工作就ok了。
FFMPEG的预备工作

进入到ffmpeg的官网下载ffmpeg源码,此处需要一点魔法,没有魔法的可以下载我上传至网盘中的源码。

  1. 通过网盘分享的文件:ffmpeg-4.3.8.tar.bz2
  2. 链接: https://pan.baidu.com/s/18ldKGCp0-O1D2WezloY-vQ?pwd=tq29 提取码: tq29
  3. --来自百度网盘超级会员v6的分享
复制代码
下载完成后解压到MSYS安装的路径中,如下:

编写脚本编译ffmpeg。(这里编译过程是不带H264库的,需要h264的可自行先在msys中编译安装h264,再在ffmpeg的configure阶段选择h264)
  1. basepath=$(cd `dirname $0`; pwd)
  2. build_ffmpeg() {
  3.     cd $basepath/ffmpeg-4.3.8
  4.     pwd
  5.     ./configure --prefix=${basepath}/ffmpeg_install \
  6.                 --enable-static \
  7.                 --enable-shared \
  8.                 --enable-gpl
  9.     make
  10.     make install
  11. }
  12. build_ffmpeg
复制代码

运行脚本即可完成ffmpeg安装,安装目录内容如下:

重要使用bin目录下的dll动态库和include目录下的头文件。
创建项目导入ffmpeg

使用CLION创建项目,将ffmpeg编译好的四个文件夹,放到项目根目录下。

编辑CMakeLists.txt设置文件,内容如下:
  1. cmake_minimum_required(VERSION 3.22)
  2. project(THIRDPART_TEST)
  3. set(CMAKE_CXX_STANDARD 11)
  4. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  5. set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/ffmpeg)
  6. add_definitions(-D__STDC_CONSTANT_MACROS=1)
  7. # 相当于-I
  8. include_directories(${FFMPEG_DIR}/include)
  9. # 相当于-L
  10. link_directories(${FFMPEG_DIR}/bin)
  11. add_executable(test main.cpp)
  12. # 添加ffmpeg的动态库
  13. target_link_libraries(test avcodec-58 avdevice-58 avfilter-7 avformat-58 avutil-56 postproc-55 swresample-3 swscale-5)
  14. # 配置运行时链接地址rpath,没有这个的话,运行的时候链接不到动态库
  15. set_target_properties(test PROPERTIES
  16.     LINK_FLAGS "${LINK_FLAGS} -Wl,--enable-auto-import,-rpath,${FFMPEG_DIR}/bin"
  17. )
复制代码
至此ffmpeg就导入到项目中了,运行效果如下:

由于ffmpeg是一个纯C的库,因此当在c++项目中使用的时间导入头文件时,需要加入extern "C",否则会报链接不到的错误如下,我之前还一直以为是我库导入失败了,浪费了不少时间,罪过罪过,以后得注意了。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表