FFmpeg開發筆記(三):ffmpeg介紹、windows編譯以及開發環境搭建


 

前言

  本篇章是對之前windows環境的補充,之前windows的是無需進行編譯的,此篇使用源碼進行編譯,版本就使用3.4.8。

 

FFmpeg簡介

  FFmpeg是領先的多媒體框架,能夠解碼,編碼, 轉碼,mux,demux,流,過濾和播放人類和機器創建的幾乎所有內容。它支持最模糊的古代格式,直至最前沿。無論它們是由某些標准委員會,社區還是公司設計的。它還具有高度的可移植性:FFmpeg可以在各種構建環境,機器體系結構和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等編譯,運行並通過我們的測試基礎架構FATE。
  庫功能介紹
  在這里插入圖片描述

 

FFmpeg下載

  官方地址:http://ffmpeg.org/download.html#releases
  CSDN下載地址:https://download.csdn.net/download/qq21497936/12838391
開發使用當前3.4.8穩定版本:
  在這里插入圖片描述
  三個都點擊了,下載了,如下圖:
  在這里插入圖片描述
  經過查看,源碼中只有configure和makefile,那么是在linux上編譯的,筆者想編譯windows平台上的mingw32版本的,說不定哪天就要修改編碼呢,別說opencv遇到幾次了。

 

FFmpeg編譯

步驟一:准備msys環境

  下個msys安裝,當然也可以使用msys2,筆者傾向msys,自己配置自己的開發環境。
  當然安裝msys之后,需要將我們Qt5.9.3的mingw32編譯工具鏈拷貝進去,並打開終端窗口將環境輸入進去,結果如下:
  在這里插入圖片描述

export PATH=$PATH:/mingw530_32/bin/

&esmp;&esmp;在這里插入圖片描述

步驟二:重新部署庫的源碼位置,需要拷貝到msys下去

  在這里插入圖片描述
  解壓后,如下:
  在這里插入圖片描述

步驟三:配置configure

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install

  在這里插入圖片描述

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install --disable-x86asm

  在這里插入圖片描述

步驟四:解決問題“pr: command not found”

  配置coreutils
  在這里插入圖片描述
  在這里插入圖片描述
  下載地址:http://gnuwin32.sourceforge.net/packages/coreutils.htm
  直接下載bin文件。
  在這里插入圖片描述
  在這里插入圖片描述
  在這里插入圖片描述
  全拷貝過去,覆蓋。
  在這里插入圖片描述
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108542400

步驟五:msys有平台問題,msys2沒有,配置msys2環境

  下載安裝msys2,自帶了很多環境,此處注意,我們要用Qt5.9.3的mingw32,如下圖:
  在這里插入圖片描述

  在這里插入圖片描述

export PATH=$PATH:/mingw530_32/bin/

  在這里插入圖片描述

步驟六:配置configure切換msys2

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install --disable-
x86asm  --enable-shared

  在這里插入圖片描述
  在這里插入圖片描述
  使用mingw32的環境變量,如下圖:
  在這里插入圖片描述

  在這里插入圖片描述

步驟七:編譯

make -j4

  在這里插入圖片描述
  在這里插入圖片描述

  同樣的問題,ar,參照步驟四,后繼續:
  在這里插入圖片描述

  直接轉用make,簡單粗暴,原理讀者自己理解
  在這里插入圖片描述

步驟八:安裝make install

  在這里插入圖片描述
  在這里插入圖片描述

 

模塊化

 &esmp;在這里插入圖片描述

 

測試Demo

FFmpegManager.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 slots:
};

#endif // FFMPEGMANAGER_H

FFmpegManager.cpp

#include "FFmpegManager.h"
#include <QDebug>
#include <QDateTime>

//#define LOG qDebug()<<
//#define LOG qDebug()<<__FILE__<<__LINE__<<
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")

FFmpegManager::FFmpegManager(QObject *parent)
    : QObject(parent)
{
    LOG << avcodec_configuration();
}
 

工程模板v1.0.0

  對應工程模板v1.0.0(windows Qt5.9.3 mingw32)

 
 

若該文為原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108542400


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM