前言
本篇章介绍ffmpeg在ubuntu18.04上的编译以及开发环境搭建,相关交叉编译也可参考本章节。
FFmpeg下载
本篇章使用当前用的多的版本,上一篇章编译的是ffmpeg4,实际4比3改了一些东西,具体这些笔者不赘述。
本章节使用3.2.14版本。
官方下载地址:http://ffmpeg.org/download.html#releases
CSND下载地址:https://download.csdn.net/download/qq21497936/12104638
QQ群:1047134658(点击“文件”搜索“ffmpeg-3.2.14.tar”,群内与博文同步更新)
3.2系列最新的版本。
编译ffmpeg
步骤一:下载,放置到编译文件夹
步骤二:配置,缺少yasm(貌似是一个支持汇编指令优化,不用管)
(注意:没有指定prefix参数,默认直接装到系统中去)
./configure
改参数继续配置,改成动态库:
./configure --disable-yasm --enable-shared
步骤三:编译make
make
步骤四:安装sudo make install
sudo make install
步骤五(补充):对于开发安装完后需要重新加载
ldconfig
命令行测试
版本查看
Yuv转mpeg4格式并封装为mp4
ffmpeg -s 176x144 -pix_fmt yuv420p -i 176_144.yuv -vcodec mpeg4 176_144.mp4
Qt+FFmpeg环境ubuntu搭建以及工程模板
添加库(头文件默认包含在系统的include中)
添加FFmpeg搜索路径和配置,搭建步骤也参考《FFmpeg开发笔记(一):ffmpeg介绍、windows开发环境搭建(mingw和msvc)》 中的“新建FFmpeg工程”,主要是配置文件存在区别,如下:
FFmpegServer.pri(笔者使用系统头文件和库文件,此处无需额外引入了)
LIBS += \ -lavcodec \ -lavdevice \ -lavfilter \ -lavformat \ -lavutil \ -lpostproc \ -lswscale
FFmpegMnager.h
#ifndef FFMPEGMANAGER_H #define FFMPEGMANAGER_H #include <QObject> extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> #include <libavdevice/avdevice.h> #include <libavformat/version.h> #include <libavutil/time.h> #include <libavutil/mathematics.h> } class FFmpegManager : public QObject { Q_OBJECT public: explicit FFmpegManager(QObject *parent = nullptr); signals: public: void testEnv(); }; #endif // FFMPEGMANAGER_H
FFmpegManager.cpp
#include "FFmpegManager.h" #include <QDebug> FFmpegManager::FFmpegManager(QObject *parent) : QObject(parent) { } void FFmpegManager::testEnv() { qDebug() << __FILE__ << __LINE__ << avcodec_configuration(); }
测试运行输出
工程模板v1.0.0
工程模板v1.0.0:
- 使用系统ffmpeg库;
- 使用系统ffmpeg头文件;
- 模板不带ffmpeg库(使用系统库文件);
- 不单独带ffmpeg头文件(使用系统头文件);
- 包含一个测试函数测试环境是否搭建成功。
入坑
入坑一:播放器播放不出yuv格式,专用播放器可以播放yuv(需要设置w、h,甚至是格式:yuv420p,yuv444等等)
原因:
yuv格式用播放器是播放不出来的,因为yuv是原始数据格式,需要设置播放的宽度和高度才能正确解析,大部分播放器不会这么智能。
解决方法:
不播放,直接使用ffmpeg命令进行转换
ffmpeg -s 176x144 -pix_fmt yuv420p -i 176_144.yuv -vcodec mpeg4 176_144.mp4
入坑二:安装ffmpeg后,工程编译成功,但是运行提示失败
原因:
安装完ffmpeg,但是库的路径没有更新。
解决方法:
需要重启计算机或者使用命令ldconfig进行库路径更新,当然也可以设置
QT_LIBRARY_PATH=/usr/local/lib
直接引入。