從零開始學習音視訊程式設計技術(35) windows下編譯並除錯ffmpeg
前面介紹了Linux下編譯ffmpeg的方法,考慮到大部分時候測試ffmpeg功能都是使用的windows系統(至少我是這樣的),因此將戰場重新轉移到windows上。
前面寫了那麼多的程式碼,但都只是簡單的呼叫了ffmpeg的API,並不知道他內部是如何實現的。如果可以在除錯的時候打個斷點就可以進入ffmpeg程式碼除錯看看實現該好友多好!夢想總是要有的,萬一實現了呢!百度了一下發現可以做到,下面就來講講實現方法。
首先我們需要自己重新編譯ffmpeg的原始碼,其次我們需要將之前使用的mingw編譯換成vs的編譯器,因為qtcreator除錯實在是坑爹,現在開始我們將開發工具從qtcreator轉到vs上。不過我編寫程式碼用的還是qtcreaotr,畢竟qtreator上是可以直接呼叫vs編譯器的,qtcreaotr只是除錯的時候坑一點。我一般都是實在看不出來問題在哪,需要逐步除錯的時候,才將工程匯入vs上除錯一下,因為我比較習慣qtcreator的快捷鍵。當然,這只是個人觀點。
下面就來介紹windows下使用vs編譯並除錯ffmpeg的方法。
一、編譯環境搭建
1.VS開發工具安裝
VS版本我用的是2013的,visual studio 2013大家自行百度下載安裝。這裡不提供地址了。
2.安裝msys
這裡編譯ffmpeg不是直接將ffmpeg程式碼匯入vs工程,因為這個太難了,不改程式碼估計做不到,我也沒有去研究過。有過在visual studio下程式設計的小夥伴應該都知道vs的除錯資訊主要依靠於pdb檔案,那麼我們今天編譯的目的就是使FFmpeg的動態庫生成相應的pdb檔案。
這裡編譯ffmpeg有點類似linux下編譯,先是configure 然後 make make install。
因此我們需要安裝一個msys (Minimal GNU(POSIX)system on Windows,是一個小型的GNU環境,包括基本的bash,make等等)。直接下載安裝一個Mingw就可以了,裡面帶有msys,
下載好MinGW之後可以直接雙擊開啟,按照預設的方式安裝(建議預設安裝,安裝目錄為C:/MinGW),此期間可能要下載一些檔案,不同人因為網路的不同可能安裝的時長也不相同。安裝好之後返回桌面,雙擊快捷方式,開啟介面如下(我的外掛都已經安裝好了,所以有綠色的部分):
請在上面選項下右擊,然後點Mark for Installation,全部選完之後點選單欄的Installation->Apply Change,靜靜的等著下載吧。。。
安裝好之後,如果上一步驟中MinGW安裝的目錄為C:/MinGW,則找到C:/MinGW/msys/1.0/msys.bat檔案,右擊編輯檔案,在最前面加上一句話為(如果你下載的是我提供給你的MinGW,你一定要確認一下,路徑是否正確):
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cvars32.bat"
這個路徑為你自己的vs2013安裝目錄,如果是預設的安裝目錄你就按照上邊的路徑去找這個檔案,每個人酌情而定,自己斟酌)
加好之後的效果如下:
二、編譯ffmpeg
1.下載ffmpeg
我們使用的ffmpeg版本是2.5.6,其他版本應該也是類似
下載完成後將原始碼解壓到E盤根目錄,放在磁碟根目錄是為了方便在命令列裡面找到。
2.編譯
開啟C:/MinGW/msys/1.0下的msys.bat,這就是我們剛剛安裝的msys,開啟之後會彈出一個命令列視窗,裡面的命令和linux下基本一致。
首先進入ffmpeg的原始碼目錄:
cd E:
cd ffmpeg-2.5.6
然後執行configure
./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:ffmpeg"
這一步到這裡會報如下錯:
從提示上看是編譯器檢測失敗了,莫方,繼續看看config.log檔案,可以看到是在連結的時候失敗了。原因是在msys的目錄下有一個Link.exe檔案,這一步我們使用了這個檔案,而不是使用vs的連結檔案,解決方法很簡單;
將C:/MinGW/msys.1.0/bin/link.exe隨便改個名字,編譯完後ffmpeg記得該回來就好了(防止哪天用到mingw的時候找不到link.exe)
現在繼續configure,依次執行以下命令:
./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:ffmpeg"
make
make install
三、除錯程式碼
編譯完成後便可在E盤根目錄看到一個ffmpeg資料夾,裡面有lib和dll檔案,使用vs2013建立一個工程,呼叫簡單的ffmpeg函式,vs引用Lib檔案的方法請自行百度,這裡不做闡述。
除錯效果如下:
(圖片是偷來的,我自己用的是2013的,因為懶不想截圖了。
這裡需要注意的是:請勿將ffmpeg的原始碼刪除,因為除錯的時候需要用到他們。
相關推薦
從零開始學習音視訊程式設計技術(35) windows下編譯並除錯ffmpeg
前面介紹了Linux下編譯ffmpeg的方法,考慮到大部分時候測試ffmpeg功能都是使用的windows系統(至少我是這樣的),因此將戰場重新轉移到windows上。 前面寫了那麼多的程式碼,但都只是簡單的呼叫了ffmpeg的API,並不知道他內部是如何實現的。如果可
從零開始學習音視訊程式設計技術(四) FFMPEG的使用
零開始學習音視訊程式設計技術(四) FFMPEG的使用 音視訊開發中最常做的就是編解碼的操作了,以H.264為例:如果想要自己實現編碼h.264,需要對H.264非常的瞭解,首先需要檢視H.264的文件,這個文件好像說是三百多頁(本人並沒有看過)。 想到這
從零開始學習音視訊程式設計技術(一) 視訊格式講解(學習筆記)
/* 該型別部落格為學習時載錄筆記,加上自己對一些不理解部分自己的理解。會涉及其他博主的博文的摘錄,會標註出處 */ ==========================================================================
從零開始學習音視訊程式設計技術(二) 音訊格式講解
1. 音訊簡介 前面我們說過視訊有一個每秒鐘採集多少張的概念,這就叫做視訊的幀率。 和視訊的幀率一樣的道理,聲音也有一個頻率,叫做取樣率。 人對頻率的識別範圍是 20HZ - 20000HZ, 如果每秒鐘能對聲音做 20000 個取樣, 回放
從零開始學習音視訊程式設計技術(七) FFMPEG Qt視訊播放器之SDL的使用
前面介紹了使用FFMPEG+Qt解碼視訊並顯示。 現在我們就著手給它加上聲音播放。 播放聲音有很多種方式: 以windows系統為例,可以使用如下方法播放音訊: 1.直接呼叫系統API的wavein、waveout等函式 2.使用directsound播放
從零開始學習音視訊程式設計技術(一) 視訊格式講解
所謂視訊,其實就是將一張一張的圖片連續的放出來,就像放幻燈片一樣,由於人眼的惰性,因此只要圖片的數量足夠多,就會覺得是連續的動作。 所以,只需要將一張一張的圖片儲存下來,這樣就可以構成一個視訊了。 但是,由於目前網路和儲存空間的限制,直接儲存圖片顯然不可行。
【轉】從零開始學習音視訊程式設計技術(二) 音訊格式講解
轉自:http://blog.yundiantech.com/?log=blog&id=5 1. 音訊簡介 前面我們說過視訊有一個每秒鐘採集多少張的概念,這就叫做視訊的幀率。 和視訊的幀率一樣的道理,聲音也有一個頻率,叫做取樣率。
【轉】從零開始學習音視訊程式設計技術(一) 視訊格式講解
轉自:http://blog.yundiantech.com/?log=blog&id=4 所謂視訊,其實就是將一張一張的圖片連續的放出來,就像放幻燈片一樣,由於人眼的惰性,因此只要圖片的數量足夠多,就會覺得是連續的動作。 所以,只需要將一張一張的圖片儲存下來
從零開始學習音視訊程式設計技術(八)FFMPEG Qt視訊播放器之音視訊同步
前面分別講解了: 現在我們就將視訊和音訊合併,並讓聲音和畫面同步。 加入音訊的部分就不做講解了,這裡主要講下聲音和視訊同步的步驟。 首先剛開始播放的時候通過av_gettime()獲取系統主時鐘,記錄下來。 以後便不斷呼叫av_gettime()獲取系統時鐘
從零開始學習音視訊程式設計技術(34) Linux篇之編譯ffmpeg
水了這麼多篇,是時候開始幹正事了。Linux基礎知識已經掌握了,現在可以開始編譯ffmpeg了:一、下載ffmpeg首先下載ffmpeg的原始碼,ffmpeg所有版本原始碼下載地址:截至本文編寫時,ffmpeg最新版本是3.3,但我們還是一如既然的使用2.5.6.二、編譯f
從零開始學習音視訊程式設計技術之初出茅廬
原文連結 近來,直播越來越火,因此很多人也想開始學習音視訊程式設計技術的相關知識。 因此本人決定將畢生所學有關音視訊方面的知識記錄於此供初學者學習之用。 本教程針對初學者,從零開始學習視訊程式設計技術,最終向大師級進發。學習完本教程,你將掌握基
系列部落格---從零開始學習音視訊程式設計技術
本文章所涉及的到內容均為轉發,看完一篇文章在此處貼上一個連結的方式生成,主要是以此來督促自己循序漸進的學習和積累,文獻內容其實並不高深,並且內容也不見得完全正確,因此有認為不妥的地方,我會盡量修改,當然是以ps方式提出。在學有縮成之後會開始自己原創的音視訊部落格。 內容從零開始,慢慢深入(在每篇
從零開始學習音視訊程式設計技術--編碼詳解
現在音視訊如此火爆,作為一枚專業的程式媛哪能不懂音視訊的開發呢,所以踏上了音視訊研究之路。對於ios來說音視訊編解碼主要有兩種編解碼框架FFmpeg和蘋果ios8以後開放的VideoToolBox,FFmpeg是基於CPU進行編解碼的,俗稱軟編碼,而VideoT
從零開始學習比特幣開發(七)-P2P網路建立流程之生成地址對並連線到指定地址
本節繼續講解比特幣P2P網路建立流程,這節講解的執行緒為’ThreadOpenAddedConnections’,它的作用是生成地址對並連線到指定地址。 本文可以結合比特幣系統啟動的的第12步的講解來看,可以更加系統的瞭解比特幣系統啟動的過程。 P2P 網路的建立是在比特幣系統啟動的第
從零開始學習比特幣開發(四)--網路初始化,載入區塊鏈和錢包,匯入區塊啟動節點
寫在前面: 本篇文章接續 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 以及從零開始學習區塊鏈技術(一)–從原始碼編譯比特幣 如果這篇文章看不明白,請務必先閱讀之前的文章
從零開始學習微信小程式(二)
wx.navigateTo()與wx.redirectTo()的區別 區別一 wx.navigateTo()表示的是從一個頁面跳轉到另一個頁面,會在另一個頁面中出現可返回之前頁面的按鈕,另一個頁面與之前頁面的關係為子頁面與父頁面的關係 wx.redirectTo()表示
從零開始學習比特幣開發(九)--P2P 網路建立之訊息處理中篇
P2P 網路的建立是在系統啟動的第 12 步,最後時刻呼叫 CConnman::Start 方法開始的。 恭喜你越來越接近比特幣的核心了,在上篇中,我們主要講解了比特幣的訊息處理執行緒,接下來,在下篇中,將以具體的比特幣訊息即比特幣協義分析為主。針對比特幣的協義
從零開始學習音視頻編程技術(三) 開發環境搭建(Qt4.86手動設置環境,主要就是設置g++和qmake,比較透徹,附下載鏈接)
路徑 details 分享 baidu 末尾 是我 其中 找到 source 1.先下載安裝Qt 我們使用的版本是4.8。 可以自行百度下載也可以從下面的網盤地址下載: Qt庫和編譯器下載: 鏈接:http://pan.baidu.com/s/1hrUxLIG 密碼
從零開始學習Redis之管道技術
Redis是一種基於客戶端-服務端模型以及請求/響應協議的TCP服務。這意味著通常情況下一個請求會遵循以下步驟:客戶端向服務端傳送一個查詢請求,並監聽Socket返回,通常是以阻塞模式,等待服務
從零開始學習比特幣開發(十一)-建立錢包
比特幣使用者最關心除了交易之外就是地址、錢包、私鑰了,交易、地址、錢包、私鑰這些不同概念之間具有內在的聯絡,要了解交易必須先要了解地址、錢包、私鑰這幾個概念,從本章開始,我們開始學習這一部分內容。 建立錢包整體流程 前面我們提到 RPC 的概念,RPC 是 re