2019編譯ffepeg vs_如何在windows10下使用vs2017編譯最新版本的FFmpeg和ffplay

該文章描述了如何在windows10 64位系統下面編譯出FFmpeg的庫及其自帶的ffplay播放器,而且全部采用最新的版本,這樣我們可以在vs2017的ide下調試ffplay,能使我們更容易學習FFmpeg的架構以及音視頻播放器的原理。

步驟:

1.安裝vs2017

在https://visualstudio.microsoft.com/zh-hans/downloads/下載vs2017的社區版,執行安裝程序后進入下面界面,選擇如圖所示的幾個項目安裝就行了。安裝后可得到msvc的交叉編譯環境,該toolchain用于在msys2下編譯FFmpeg。我這里的安裝路徑是"C:\Program Files (x86)\Microsoft Visual Studio"

166976776_4_2019072709194397

2.安裝msys2

在http://www.msys2.org/下載msys2,如下圖所示,因為我是64位的系統,所以選擇 msys2-x86_64-20180531.exe進行安裝下載。

166976776_5_20190727091943659

3.下載ffmpeg源碼和SDL2源碼

在http://ffmpeg.org/download.html下載最新的FFmpeg代碼,我是使用git直接clone下最新的FFmpeg的源碼到本地的,當然也可以選擇直接下載打包好的源碼。我的FFmpeg的源碼目錄是D:\git\FFmpeg。

166976776_6_20190727091944331

在http://www.libsdl.org/download-2.0.php下載SDL2的源碼,我選擇的源碼的zip包下載的,也就是SDL2-2.0.9.zip。我將其解壓到D盤,目錄是D:\SDL2-2.0.9

166976776_7_2019072709194597

4.編譯SDL2生成SDL2的靜態庫和動態庫

啟動vs2017,導入D:\SDL2-2.0.9\VisualC下的解決方案,原解決方案是vs2010下的,導入過程中會升級到最新的平臺工具集。然后我們點擊SDL2和SDL2main兩個項目進行生成,編譯成功后會生成32位的SDL2的靜態庫和動態庫,位置在D:\SDL2-2.0.9\VisualC\Win32下面,其中的SDL2.dll,SDL2.lib,SDL2main.lib三個文件是我們編譯ffplay需要的。

166976776_8_20190727091945769.png

上面還只是編譯出32位的SDL2的庫,如果要64位的庫,我們只需將編譯環境改成x64后對SDL2和SDL2main兩個項目進行生成,成功后的庫在D:\SDL2-2.0.9\VisualC\x64\Debug目錄下。

上面生成的庫是debug的庫,如果需要release的庫改一下編譯選項即可。

5.設置msys2的編譯環境

進入msys2的安裝路徑,我這里的路徑是D:\mysys64,編輯該目錄下的msys2_shell.cmd文件,在setlocal后加入一行

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"

該命令表示加載vs2017的32位交叉編譯環境,如果要編譯64位的庫則執行vcvars64.bat,也就是

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

166976776_9_201907270919463

6.編譯FFmpeg的靜態庫和動態庫

在步驟5設置好msys2的環境后執行msys2_shell.cmd,進入msys2的命令行模式,windows系統默認是gbk編碼,編譯過程中可能出現亂碼,需要修改該窗口的text為gbk編碼,右鍵點擊窗口選擇Options,再選擇Text,修改編碼為gbk,如下圖所示

166976776_10_20190727091946550

進入FFmpeg的源碼目錄進行編譯,我這里是D:\git\FFmpeg,FFmpeg的配置如下,其中--prefix=x32中的x32表示編譯好后的安裝目錄,編譯成功后執行make install會放在FFmpeg目錄下的x32文件夾里面。

cd /d/git/FFmpeg

./configure --enable-shared --enable-static --toolchain=msvc --prefix=x32 --enable-postproc --enable-gpl --enable-avresample

166976776_11_20190727091946925

執行./configure命令后等待比較長時間直到回到命令行提示符

由于windows10系統默認是gbk編碼,而我們FFmpeg的源碼都是utf8編碼,編譯時候如果代碼里面有中文,就會產生問題,有2個文件里面帶有中文,我們需要將其轉換為utf8編碼,一個是D:\git\FFmpeg\config.h,另外一個是D:\git\FFmpeg\ffbuild\config.mak。

轉換完成以后執行編譯命令

make -j4

經過很長時間編譯完成后執行

make install

現在我們打開FFmpeg目錄下的x32目錄,就可以看到編譯好的FFmpeg的靜態庫和動態庫

166976776_12_20190727091947128.png

bin目錄下放的是靜態庫和動態庫,include目錄下放的是頭文件,這兩個目錄下的東西都是我們在vs2017環境下編譯ffplay需要的。

7.在vs2017下編譯ffplay

打開vs2017選擇文件,新建項目,選擇visual c++下的Windows桌面,建立一個空項目

166976776_13_20190727091947363

開始拷貝文件到ffplay目錄下,我這里SDL的目錄是D:\SDL2-2.0.9\VisualC\Win32,FFmpeg的目錄是D:\git\FFmpeg。在D:\ffplay\ffplay目錄下新建一個文件夾lib用于放ffmpeg靜態庫和sdl2的靜態庫。

拷貝D:\git\FFmpeg\下的config.h文件到D:\ffplay\ffplay目錄

拷貝D:\git\FFmpeg\fftools下的ffplay.c,cmdutils.c,cmdutils.h三個文件到D:\ffplay\ffplay目錄

拷貝D:\git\FFmpeg\x32下的include文件夾到D:\ffplay\ffplay目錄下,如果是64位的,則從D:\git\FFmpeg\x64下拷貝。

拷貝D:\git\FFmpeg\x32\bin下的所有擴展名為lib的文件到D:\ffplay\ffplay\lib下面,拷貝D:\git\FFmpeg\x32\bin下的所有擴展名為dll的文件到D:\ffplay\ffplay下面。如果是64位的,則從D:\git\FFmpeg\x64\bin文件夾拷貝。

拷貝D:\SDL2-2.0.9\VisualC\Win32\Debug下的SDL2.lib,SDL2main.lib到D:\ffplay\ffplay\lib下面,拷貝D:\SDL2-2.0.9\VisualC\Win32\Debug下的SDL2.dll到D:\ffplay\ffplay下面。如果是64位的,則從D:\SDL2-2.0.9\VisualC\x64\Debug文件夾下拷貝。

在D:\ffplay\ffplay\include目錄下新建一個文件夾SDL2,拷貝D:\SDL2-2.0.9\include下的全部頭文件到D:\ffplay\ffplay\include\SDL2目錄下。

現在文件拷貝完畢,開始配置ffplay項目的屬性。

右鍵點擊ffplay下的源文件,選擇添加-》現有項,把D:\ffplay\ffplay目錄下的cmdutils.c和ffplay.c加進來。如下圖所示

166976776_14_20190727091947738

右鍵點擊ffplay下的頭文件,選擇添加-》現有項,把D:\ffplay\ffplay目錄下的cmdutils.h和config.h加進來。

右鍵點擊ffplay,選擇屬性,配置屬性下的常規,項目默認的字符集改成使用Unicode字符集,如下圖所示

166976776_15_20190727091948238

VC++目錄下庫目錄加上lib,如下圖所示

166976776_16_20190727091948675

C/C++下的常規中,附加包含目錄改成include,另外SDL檢查改成否,如下圖所示

166976776_17_2019072709194934

鏈接器下的輸入中的附加依賴項改成

avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib;SDL2.lib;SDL2main.lib;avresample.lib;%(AdditionalDependencies)如下圖所示

166976776_18_20190727091949519

右鍵點擊ffplay項目,選擇重新掃描方案,然后開始編譯

166976776_19_20190727091949769

編譯遇到錯誤,找不到三個頭文件,注釋掉就可以了,如下圖所示,注釋掉ffplay.c中這三個出錯的頭文件引用就可以了

166976776_20_20190727091950363

現在ffplay已經可以編譯通過了,可以測試一下能否正常工作,選擇ffplay屬性頁中的調試,將命令參數設置需要播放的音視頻文件地址,就可以了,記得命令參數要空格開頭,不同參數之前用空格隔開

166976776_21_20190727091951409

點擊本地windows調試器開始運行ffplay

166976776_22_20190727091951847

總結:

在windows環境下編譯FFmpeg和ffplay并不復雜,編譯好的庫可以正常在vs2017下調用,我們可以方便的使用這些庫開發windows下的音視頻播放器。

編譯重點在于選擇和正確配置編譯環境,32位和64位的庫要選擇相對應的編譯環境,另外由于windows環境是gbk編碼,而FFmpeg是utf8編碼,所以編譯過程中可能遇到這方面問題,具體情況需要具體分析。

特別紀念雷霄驊博士,我就是在他的文章的指導下了解了很多關于FFmpeg的知識,希望他在天堂安好。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

訓練集山準確率高測試集上準確率很低_推薦算法改版前的AB測試

編輯導語:所謂推薦算法就是利用用戶的一些行為,通過一些數學算法,推測出用戶可能喜歡的東西;如今很多軟件都有這樣的操作,對于此系統的設計也會進行測試;本文作者分享了關于推薦算法改版前的AB測試&#xf…

C#實現漸變顏色的Windows窗體控件

C#實現漸變顏色的Windows窗體控件! 1,定義一個BaseFormGradient,繼承于System.Windows.Forms.Form2,定義三個變量: privateColor _Color1 Color.Gainsboro; privateColor _Color2 Color.White; privatefloat_ColorAngle 0f;3,重載OnPaintBackground方法 protecte…

ios7開發學習筆記-包括c oc 和ios介紹

請查看我的新浪資料分享 http://iask.sina.com.cn/u/2430843520 轉載于:https://www.cnblogs.com/langtianya/p/3708298.html

Windows下 jupyter notebook 運行multiprocessing 報錯的問題與解決方法

文章目錄測試用的代碼錯誤解決方法測試用的代碼 下面每一個對應一個jupyter notebook的單元格 import time from multiprocessing import Process, Queuedef generator():c 0while True:time.sleep(1.0) # read somethingyield cc 1%%timeds generator() for i in range(3…

如何將javaweb項目部署到linux下

以下是對將javaweb項目部署到linux下的方法進行了詳細的分析介紹一般都在windows下開發的現在部署到linux下將項目達成war包(用eclipse項目右鍵>Export>選擇war file)將tomcat(用winSCP當然你也可以用secureCRT用securCRT需要建立sftp(即上傳文件的目錄)用put tomcat命令…

vc mysql_vc6.0連接mysql數據庫

一、MySQL的安裝Mysql的安裝去官網下載就可以。。。最新的是5.7版本。。二、VC6.0的設置(1)打開VC6.中選0 工具欄Tools菜單下的Options選項,在Directories的標簽頁中右邊的“Show directories for:”下拉列表中“Includefiles”,然后在中間列表框中添加你…

python class用法_python原類、類的創建過程與方法

【小宅按】今天為大家介紹一下python中與class 相關的知識……獲取對象的類名python是一門面向對象的語言,對于一切接對象的python來說,咱們有必要深入的學習與了解一些知識首先大家都知道,要獲取一個對象所對應的類,需要使用clas…

網易公開課

計算機科學及編程導論 http://v.163.com/special/opencourse/bianchengdaolun.html 抽象編程 http://v.163.com/special/opencourse/abstractions.html轉載于:https://www.cnblogs.com/anyboo/archive/2012/08/24/2653537.html

深度學習中的一些常見的激活函數集合(含公式與導數的推導)sigmoid, relu, leaky relu, elu, numpy實現

文章目錄Sigmoid(x)雙曲正切線性整流函數 rectified linear unit (ReLu)PReLU(Parametric Rectified Linear Unit) Leaky ReLu指數線性單元 Exponential Linear Units (ELU)感知機激活%matplotlib inline %config InlineBackend.f…

最牛X的GCC 內聯匯編

正如大家知道的,在C語言中插入匯編語言,其是Linux中使用的基本匯編程序語法。本文將講解 GCC 提供的內聯匯編特性的用途和用法。對于閱讀這篇文章,這里只有兩個前提要求,很明顯,就是 x86 匯編語言和 C 語言的基本認識。…

mysql的告警日志_MySQL Aborted connection告警日志的分析

前言:有時候,連接MySQL的會話經常會異常退出,錯誤日志里會看到"Got an error reading communication packets"類型的告警。本篇文章我們一起來討論下該錯誤可能的原因以及如何來規避。1.狀態變量Aborted_clients和Aborted_connects…

hosts多個ip對應一個主機名_一個簡單的Web應用程序,用作連接到ssh服務器的ssh客戶端...

WebSSH一個簡單的Web應用程序,用作連接到ssh服務器的ssh客戶端。它是用Python編寫的,基于tornado,paramiko和xterm.js。特征支持SSH密碼驗證,包括空密碼。支持SSH公鑰認證,包括DSA RSA ECDSA Ed25519密鑰。支持加密密鑰…

Yii框架中使用PHPExcel導出Excel文件

Yii框架中使用PHPExcel導出Excel文件http://www.cnblogs.com/wgx214/p/3709521.html轉載于:https://www.cnblogs.com/flying-tx/p/3714530.html

Shell Notes(1)

> vi復制粘貼 光標移動到要復制的部分的開頭,Esc退出插入模式,按v進入Visual模式,用hjkl選中要復制的部分 按Y或者yy,復制 移動光標到目標位置,按p,粘貼 > echo –e 參數 –e 可以使echo解釋由反斜杠…

mysql多表查詢語句_mysql查詢語句 和 多表關聯查詢 以及 子查詢

1.查詢一張表:select * from 表名;2.查詢指定字段:select 字段1,字段2,字段3….from 表名;3.where條件查詢:select字段1,字段2,字段3 frome表名 where 條件表達式&#x…

Pytorch 自定義激活函數前向與反向傳播 sigmoid

文章目錄Sigmoid公式求導過程優點:缺點:自定義Sigmoid與Torch定義的比較可視化import matplotlib import matplotlib.pyplot as plt import numpy as np import torch import torch.nn as nn import torch.nn.functional as F%matplotlib inlineplt.rcPa…

SVN錯誤:Attempted to lock an already-locked dir

出現這個問題后使用“清理”功能,如果還不行,就直接到上一級目錄,再執行“清理”,然后再“更新”。有時候如果看到某個包里面的文件夾沒有SVN的標志,直接用“CtrlDelete”手工刪除,然后“清理”&#xff0c…

js高級編程_這位設計師用Processing把創意編程玩到了極致!

Processing作為新媒體從業者的必備工具,近來卻越來越成為設計師們的新寵!今天小編將介紹以為用Processing把創意編程玩到極致的設計師Tim Rodenbrker。“我們的世界正在以驚人的速度變化。新技術為創作帶來了根本性的轉變。編程是我們這個時代最寶貴的技…

微軟.NET Framework 4.5.2 RTM正式版

今天,微軟.NET開發團隊發布.NET Framework 4.5.2 RTM正式版。新版框架繼續高度兼容現有的.NET Framework 4、4.5、4.5.1等版本,該版本框架與舊版的.NET Framework 3.5 SP1和早期版本采取不同的處理方式,但與.NET Framework 4、4.5相比&#x…

HDU 1042 N!(高精度計算階乘)

N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34687 Accepted Submission(s): 9711 Problem DescriptionGiven an integer N(0 ≤ N ≤ 10000), your task is to calculate N!InputOne N in one line, pr…