开源之ffmpeg(一)——介绍、演示与编译(windows)


前言

前言本是想省了的,可是到最后觉得差了点什么现在给加上了,算是对开始记录关于ffmpeg开源这一系列博客的开头吧。

因为最近一直在纠缠于ffmpeg的项目中,所以动了记录使用ffmpeg过程的念头,因为ffmpeg是非常庞大的,但有的时候可能只使用其中的某些模块,例如笔者就经常会用ffmpeg进行拉流,但是用webrtc进行播放。 所以想对ffmpeg整体的模块或者大部分模块进行一个梳理。也算是开始记录这一系列的一个初衷。

以下内容均为笔者亲自操作,请放心食用。


|版本声明:山河君,未经博主允许,禁止转载

一、ffmpeg介绍

FFmpeg 是领先的多媒体框架,能够解码、编码、 转码、复用、解复用、流、过滤和播放几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 可以 在各种构建环境、机器架构和配置下跨 Linux、Mac OS X、Microsoft Windows、BSD、Solaris 等 编译、运行和通过我们的测试基础架构FATE 。

以上这段话是从ffmpeg网站上翻译下来

1.ffmpeg网站

官网地址:http://ffmpeg.org/
文档地址:http://ffmpeg.org/documentation.html
API接口文档地址:http://ffmpeg.org/doxygen/4.1/index.html
git地址:https://git.ffmpeg.org/ffmpeg.git
官网编译工具连接地址:https://www.gyan.dev/ffmpeg/builds/
官方编译文档:官方编译文档

2.ffmpeg模块介绍

ffmpeg包含可供应用程序使用的 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample模块。并且提供了ffmpeg、ffplay和ffprobe可供最终用户转码和播放的工具。

其中,各个模块的作用如下

模块名 作用
libavutil 一个包含用于简化编程的函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序
libavcodec 一个包含音频/视频编解码器的解码器和编码器的库
libavformat 一个包含用于多媒体容器格式的解封装和封装的库
libavdevice 一个包含输入和输出设备的库,用于从许多常见的多媒体输入/输出软件框架中抓取和渲染,包括 Video4Linux、Video4Linux2、VfW 和 ALSA
libavfilter 一个包含媒体过滤器的库
libswscale 一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库
libswresample 一个执行高度优化的音频重采样、重矩阵化和样本格式转换操作的库

二、使用事例

1.下载工具

进入官网编译库连接地址:https://www.gyan.dev/ffmpeg/builds/
在这里插入图片描述
下载后解压出来是
在这里插入图片描述
这三个工具分别的作用为:

  • ffmpeg:用于转码的应用程序
  • ffplay: 用于播放的工具
  • ffprobe:用于查看文件格式的应用程序

本文只介绍ffplay用于演示播放,其它工具的使用会在余下博客中进行展示

2.ffplay播放

使用ffplay播放一个本地mp3,其播放音视频的基本命令为 :

ffplay 视频路径

在这里插入图片描述
可以看到里面包括了文件长度,音频编码格式、帧率等信息,当然可以选择属于远端实时流地址,通过rtsp、rtmp、http等协议进行拉留播放,以及播放MP4,这里就不过多演示了。

3.播放基本命令介绍

播放控制 :

功能 命令
逐帧播放 S
向后 / 向前拖动 10 秒 : Left / Right 箭头按钮
向后 / 向前拖动 1 分钟 Down / Up 箭头按钮
暂停播放 P , 空格
停止播放 Q , Esc
全屏切换 : F 按键可以切换全屏

音量控制 :

功能 命令
静音 M 键可切换 静音 / 非静音 状态
减少音量 9 或 / 按键 , 减少音量
增加音量 0 或 * 按键 , 增加音量

三、源码编译

登录官网编译库连接地址,自行下载即可,也可以进行下载源码自行编译,编译工具可以选择MinGW或者cygwin,不过笔者推荐还是要安装msys,这是专门为编译ffmpeg而配套的工具。

1.git下载源码

git下载命令

git clone https://git.ffmpeg.org/ffmpeg.git

也可以通过官网下载zip包

2.编译工具介绍

因为最终编译还是依赖MinGW和一些其他的库,所以需要在windows上模拟出Linux编译环境,工具有很多,类似Cygwin 、MinGW等工具,但是最终目的都是搭建出Linux编译环境。

该链接是官方编译文档:官方编译文档,其中介绍了多种的编译方式,而本文采用的是使用MSYS2,MSYS2官网,因为其MSYS2官网介绍对于用于编译ffmpeg做了很多工具

uses MSYS2 for automatically building FFmpeg and other media related tools

3.MSYS2安装

根据编译文档介绍,还需要做如下操作

  • 工具下载
    在这里插入图片描述
  • 从安装路径打开
    在这里插入图片描述
  • 依次输入命令

pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
pacman -S autotools base-devel
pacman -S gcc diffutils make
pacman -S yasm
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-i686-gcc

此时查看msys64\mingw64\bin该路径下是不是已经把MinGw下载好
在这里插入图片描述
如和上图一样,那么编译工具此时已经全部安装好

注意:需要检查一下系统环境变量中是否存在以下路径
在这里插入图片描述

4.编译

以下每个步骤的时间都很长,请耐心等待

  1. 指定编译选项
    管理员模式打开mingw64.exe,到ffmpeg路径下,输入以下命令
./configure  --enable-shared --enable-debug --prefix=../ffmpeg_build --extra-cflags="-I../source/ffmpeg_build/include" --extra-ldflags="-LIBPATH:../source/ffmpeg_buid/lib"

对于以上命令做个介绍:

  • ./configure:执行当前目录,即ffmpeg文件夹下的脚本文件configure。打开configure文件,你会有搜索到ffmpeg常用的一些编译命令的注释,比如–enable-shared等。
  • --enable-shared:编译成动态链接库(dll)。
  • --enable-debug:允许对ffmpeg源码进行调试。
  • --prefix=../ffmpeg_build:指定编译结果的存放路径为…/ffmpeg_build。这里写成了相对路径。
  • --extra-cflags="-I../source/ffmpeg_build/include":cflags表示用于C编译器的选项。-I表示在头文件的搜索路径列表中添加dir目录。这里的dir目录指定为…/\ffmpeg_build,也写成了相对路径。
    –extra-ldflags=“-LIBPATH:…/source/ffmpeg_buid/lib”:ldflags设置gcc等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。-LIBPATH:也可以简写成-L,后面紧跟库文件的目录。
  1. 输入编译命令

make -j4 && make install

在这里插入图片描述
上图为编译完成的图片

  1. 现在可以查看编译好的文件
    找到步骤一指定的生成路径,现在可以发现,所有的库、头文件都已经生成好了,下图做个展示
    在这里插入图片描述

在这里插入图片描述

5.小妙招

如果不想生成exe,可以给它禁掉,这样可以节省一些时间

/configure --toolchain=msvc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-static --disable-debug --enable-asm --enable-version3 --enable-shared


总结

以上为开发环境的搭建了,包括对于ffmpeg的了解,以及如何初步使用它,最重要的是对于我们开发人员如何编译生成动态库的流程。

如果对您有所帮助,请帮忙点个赞吧!

猜你喜欢

转载自blog.csdn.net/qq_42956179/article/details/124382305