欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Win11+?VS2022編譯?FFmpeg6.0?靜態(tài)庫的詳細過程

 更新時間:2023年08月18日 09:04:31   作者:Dionysius  
這篇文章主要介紹了Win11+VS2022編譯FFmpeg6.0靜態(tài)庫的方法,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

編譯前言

編譯作為自己持有的穩(wěn)定版本 用來練習,網(wǎng)上的編譯環(huán)境太雜太亂了,目前有個開源項目致力解決ffmpeg編譯的問題,暫時拿來用,如果這個項目不維護或者壞了,再考慮其他。

為什么項目編譯?

編譯作為自己持有的穩(wěn)定版本 用來練習

前期準備

使用github 上 開源項目的解決方案編譯

ShiftMediaProject

環(huán)境配置

先創(chuàng)建代碼目錄,作者建議的。

*OutputDir is the "Output Directory" specified in the project properties. 
The default value of OutputDir is "..\..\msvc" relative to the FFmpeg source directory. An example of the expected 
directory structure is:
    -  msvc          (OutputDir)
    -> source
        - FFmpeg
        - ..Any other libraries source code..

進入 source 目錄打開git bash 克隆代碼

這里因為我已經(jīng)git 拉到本地過了,所以報錯,不影響。

ffmpeg外部庫

代碼拉取完畢后 ,如果一切順利, /vs2022/source/FFmpeg/SMP 目錄可以查看readme.txt,里面介紹了如何編譯配置整個項目,包括外部庫:x264、x264、vpx等,可以使用腳本下載,路徑 vs2022\source\FFmpeg\SMP\project_get_dependencies.bat ,感興趣可以看一下他這個bash腳本,它會按照腳本中配置的外部庫名字按順序拉取。如果萬一下載失敗 ,可以根據(jù)輸出日志跟腳本內(nèi)容排查問題,手動下載或者重新運行腳本。運行情況如下:

好了經(jīng)過漫長的下載與數(shù)次 .//project_get_dependencies.bat ,所有的庫也都下下來了。

額外的編譯選項-for渲染

根據(jù) readme.txt 先在 /vs2022/msvc/ 下創(chuàng)建 include 目錄,include里創(chuàng)建 gl 、 AMF 兩個目錄,用來放 opengl 、 nv-codec 、 AMF 的頭文件。

git clone https://github.com/KhronosGroup/OpenGL-Registry.git
git clone https://github.com/KhronosGroup/EGL-Registry.git
git clone https://github.com/FFmpeg/nv-codec-headers.git
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git

opengl (需要glext)

a. OpenGL-Registry\api\GL\ 里的 glext.h wglext.h 放入 /vs2022/msvc/include/gl/

b. EGL-Registry\api\KHR 將KHR整個文件夾放入 /vs2022/msvc/include/

ffnvcodec (需要nv-codec-headers)

a. nv-codec-headers\include 里的ffnvcodec目錄復制到 /vs2022/msvc/include

AMF sdk頭文件

a. AMF\amf\public\include 里的兩個文件夾復制到 /vs2022/msvc/include/AMF

編譯工具鏈

配置 NASM 、 YASM ,這兩個是匯編的編譯工具

nasm

git clone https://github.com/ShiftMediaProject/VSNASM/releases/download/0.9/VSNASM.zip

yasm

git clone https://github.com/ShiftMediaProject/VSYASM/releases/download/0.7/VSYASM.zip

同樣我們查看腳本可知它會根據(jù)不同VS的大版本去做適配安裝,我們的是VS2022,vs17,如果有報錯可以往這方面去排查。執(zhí)行安裝

開始編譯

到這一步,所有的準備工作基本完成,打開工程文件 FFMpeg/SMP/ffmpeg_deps.sln

step1. 選擇編譯類型 Debug/Release Dll/lib

這里我們先選擇的Debug,因為只是練習用,需要調(diào)試什么的。接下來就是直接生成了,生成時間稍微有點長,我這里10分鐘左右,而且中間果不其然出現(xiàn)了錯誤。讓我們來分析一下:在libavcodec 編譯的過程中提示找不到好幾個宏 都是NV_ENC_PARAMS打頭的,我們找一下他的同類型,大概是這么一個枚舉類型

,這里我們替換一下ffnvcode的版本,退回到5月份的版本,跟ffmpeg6r1保持一致

重新生成就能成功了。

lib庫在`/msvc/lib/x64下面,我們可以看到生成的各種lib庫

step2. 打包SDK

把上述生成的include、lib打包帶走,直接放到應用的項目下就可以直接用了

驗證

#ifndef __FFPLAYER_H__
#define __FFPLAYER_H__
#include <iostream> 
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libswresample/swresample.h"
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/avutil.h"
#include "libavutil/ffversion.h"
#include "libavutil/imgutils.h"
#include "libavutil/channel_layout.h"
#include "libavutil/opt.h"
#include "libavutil/mathematics.h"
#include "libavutil/timestamp.h"
}
#include <Windows.h>
#include <string.h>
#include <math.h>
#ifdef _DEBUG
#pragma comment(lib, "libavformatd.lib")
#pragma comment(lib, "libavutild.lib"
#pragma comment(lib, "libavcodecd.lib")
#pragma comment(lib, "libavdeviced.lib")
#pragma comment(lib, "libavfilterd.lib")
#pragma comment(lib, "libswscaled.lib")
#pragma comment(lib, "libswresampled.lib")
#else
#pragma comment(lib, "libavformat.lib")
#pragma comment(lib, "libavutil.lib")
#endif
...
...
...
#endif  //__FFPLAYER_H__

結果如下,我們在這里輸出了ffmpeg的編譯配置,可以看到 其他的一些基礎庫都是 enable 的狀態(tài),說明都編進去了,本次編譯宣告成功。如需要在項目中使用到這些外部庫諸如x265之類的,在項目中加上這些庫的lib連接就可以。

結尾

如果上述方式失效了,要回到手動編譯配置的老路子,臟路子,也不用慌,相信經(jīng)過這些配置編譯的歷程,作為開發(fā)者的您也能輕松應對,處變不驚,將正確的東西放到正確的籃子里面。

最后,祝您在開發(fā)者波瀾壯闊的coding生活里一切順利~

本文原創(chuàng)https://macrocyborg.site/article/07ab4b09-2b01-42c4-8faf-6c15c70b368a

參考鏈接

1.CSDN令狐掌門

2.Shift Media Project

3.FFMPEG官方git倉庫

到此這篇關于Win11+ VS2022編譯 FFmpeg6.0 靜態(tài)庫的文章就介紹到這了,更多相關VS2022編譯 FFmpeg6.0 靜態(tài)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例

    C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例

    這篇文章主要介紹了C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例的相關資料,需要的朋友可以參考下
    2017-06-06
  • C++之a(chǎn)ssert推薦用法及注意事項

    C++之a(chǎn)ssert推薦用法及注意事項

    這篇文章主要給大家介紹了關于C++之a(chǎn)ssert推薦用法及注意事項的相關資料,assert 是一個預處理宏,用于在運行時檢查表達式是否為真,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • C++?pthread入門指南

    C++?pthread入門指南

    pthread是C++98接口且只支持Linux,使用時需要包含頭文件#include?<pthread.h>,編譯時需要鏈接pthread庫,其中p是POSIX的縮寫,而POSIX是Portable?Operating?System?Interface的縮寫,這篇文章主要介紹了C++?pthread簡介,需要的朋友可以參考下
    2024-05-05
  • 使用Inotify 監(jiān)控目錄與文件的方法詳解

    使用Inotify 監(jiān)控目錄與文件的方法詳解

    本篇文章是對使用Inotify 監(jiān)控目錄與文件的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中的std::format?如何實現(xiàn)編譯期格式檢查

    C++中的std::format?如何實現(xiàn)編譯期格式檢查

    C++?20?的?std::format?是一個很神奇、很實用的工具,最神奇的地方在于它能在編譯期檢查字符串的格式是否正確,而且不需要什么特殊的使用方法,只需要像使用普通函數(shù)那樣傳參即可,這篇文章主要介紹了std::format?如何實現(xiàn)編譯期格式檢查,需要的朋友可以參考下
    2024-04-04
  • C語言中函數(shù)返回字符串的方法匯總

    C語言中函數(shù)返回字符串的方法匯總

    C語言返回字符串函數(shù)共有四種方式,分別如下:使用堆空間,返回申請的堆地址,注意釋放、函數(shù)參數(shù)傳遞指針,返回該指針、返回函數(shù)內(nèi)定義的靜態(tài)變量(共享)、返回全局變量
    2017-05-05
  • 深入理解C++模板如何實現(xiàn)多態(tài)思想

    深入理解C++模板如何實現(xiàn)多態(tài)思想

    這篇文章主要為大家詳細介紹了C++模板如何實現(xiàn)多態(tài)的相關資料,文中的示例代碼講解詳細,對我們深入了解C++有一定的幫助,感興趣的可以了解一下
    2023-03-03
  • 使用C語言實現(xiàn)字符串逆序操作案例

    使用C語言實現(xiàn)字符串逆序操作案例

    這篇文章主要介紹了使用C語言實現(xiàn)字符串逆序操作案例,本文包含使用C語言的兩種方法去實現(xiàn),遞歸和非遞歸,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)BMP圖像處理(直方圖均衡化)

    C語言實現(xiàn)BMP圖像處理(直方圖均衡化)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP圖像直方圖均衡化處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言goto的應用舉例以及詳解

    C語言goto的應用舉例以及詳解

    goto的用法就是改變程序執(zhí)行的順序,從某個地方跳轉(zhuǎn)到你標志的地方,下面這篇文章主要給大家介紹了關于C語言goto的應用舉例及詳解的相關資料,需要的朋友可以參考下
    2022-11-11

最新評論