亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Win11+?VS2022編譯?FFmpeg6.0?靜態(tài)庫(kù)的詳細(xì)過(guò)程

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

編譯前言

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

為什么項(xiàng)目編譯?

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

前期準(zhǔn)備

使用github 上 開(kāi)源項(xiàng)目的解決方案編譯

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..

進(jìn)入 source 目錄打開(kāi)git bash 克隆代碼

這里因?yàn)槲乙呀?jīng)git 拉到本地過(guò)了,所以報(bào)錯(cuò),不影響。

ffmpeg外部庫(kù)

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

好了經(jīng)過(guò)漫長(zhǎng)的下載與數(shù)次 .//project_get_dependencies.bat ,所有的庫(kù)也都下下來(lái)了。

額外的編譯選項(xiàng)-for渲染

根據(jù) readme.txt 先在 /vs2022/msvc/ 下創(chuàng)建 include 目錄,include里創(chuàng)建 gl 、 AMF 兩個(gè)目錄,用來(lái)放 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整個(gè)文件夾放入 /vs2022/msvc/include/

ffnvcodec (需要nv-codec-headers)

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

AMF sdk頭文件

a. AMF\amf\public\include 里的兩個(gè)文件夾復(fù)制到 /vs2022/msvc/include/AMF

編譯工具鏈

配置 NASM YASM ,這兩個(gè)是匯編的編譯工具

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

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

開(kāi)始編譯

到這一步,所有的準(zhǔn)備工作基本完成,打開(kāi)工程文件 FFMpeg/SMP/ffmpeg_deps.sln

step1. 選擇編譯類(lèi)型 Debug/Release Dll/lib

這里我們先選擇的Debug,因?yàn)橹皇蔷毩?xí)用,需要調(diào)試什么的。接下來(lái)就是直接生成了,生成時(shí)間稍微有點(diǎn)長(zhǎng),我這里10分鐘左右,而且中間果不其然出現(xiàn)了錯(cuò)誤。讓我們來(lái)分析一下:在libavcodec 編譯的過(guò)程中提示找不到好幾個(gè)宏 都是NV_ENC_PARAMS打頭的,我們找一下他的同類(lèi)型,大概是這么一個(gè)枚舉類(lèi)型

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

重新生成就能成功了。

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

step2. 打包SDK

把上述生成的include、lib打包帶走,直接放到應(yīng)用的項(xiàng)目下就可以直接用了

驗(yàn)證

#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__

結(jié)果如下,我們?cè)谶@里輸出了ffmpeg的編譯配置,可以看到 其他的一些基礎(chǔ)庫(kù)都是 enable 的狀態(tài),說(shuō)明都編進(jìn)去了,本次編譯宣告成功。如需要在項(xiàng)目中使用到這些外部庫(kù)諸如x265之類(lèi)的,在項(xiàng)目中加上這些庫(kù)的lib連接就可以。

結(jié)尾

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

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

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

參考鏈接

1.CSDN令狐掌門(mén)

2.Shift Media Project

3.FFMPEG官方git倉(cāng)庫(kù)

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

相關(guān)文章

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

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

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

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

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

    C++?pthread入門(mén)指南

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

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

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

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

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

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

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

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

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

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

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

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

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

    C語(yǔ)言goto的應(yīng)用舉例以及詳解

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

最新評(píng)論