一步步實現windows版ijkplayer系列文章之四——windows下編譯ijkplyer版ffmpeg
windows下編譯ijkplyer版ffmpeg
ijkplayer版本ffmpeg原始碼說明
ijkplayer使用了ffmpeg 3.4 release(接下來將此版本ffmpeg叫做ijkplayer-ffmpeg),ijkplayer fork版本最後一個官方的commit詳細資訊如下:
提交:
01e291a592452f27b3a4e811536aaaf94096e244 [01e291a]
父級:
03351cce88
作者:
Mark Thompson <[email protected]>
日期:
2017年10月15日 GMT+8 下午7:45:15
ijkplayer團隊在此基礎上做了不少的改動,同時官方的3.4 release也在做更新,最近的一個3.4小版本release是3.4.4,時間在2018年7月18號。把ijkplayer的FFmpeg fork版本拿到windows下面編譯一直編譯不過,拿官方的3.4最新程式碼卻能編譯成功,所以首先需要把兩個branch進行一下merge。
merge Ijkplayer-ffmpeg 到 ffmpeg3.4.4
ijkplayer-ffmpeg fork自 官方的ffmpeg,ijkplayer-ffmpeg可以提交pull request到官方ffmpeg,這不是我們自己能控制的。網上搜索了相關的資料,git如此強大,可以對兩個fork的branch進行『移花接木』,現將過程記錄如下:
- github上將官方ffmpeg fork一份到自己的賬戶。
在本地將ijkplayer-ffmpeg倉庫clone下來:
https://github.com/Bilibili/FFmpeg.git
跳轉到ijkplayer-ffmpeg 根目錄:
cd root_path_of_ijkplayer-ffmpeg
將ijkplayer指定的tag檢出。
git checkout ff3.4--ijk0.8.7--20180103--001 -B ijkplayer
刪除本地倉庫的origin部分:
git remote rm origin
將官方ffmpeg origin新增到本地ijkplayer-ffmpeg:
git remote add origin https://github.com/harlanc/FFmpeg.git
重新命名本地branch ijkplayer
git branch -m ijkplayer-temp
將更新後的遠端倉庫拉取到本地:
git fetch
將官方ffmpeg的3.4.4版本檢出:
git checkout n3.4.4 -B ijkplayer
最後將ijkplayer-temp merge到官方ffmpeg n3.4.4中:
git merge ijkplayer-temp
在WinGW中編譯ijkplayer-ffmpeg
將merge後的branch拷貝到windows環境中,同前面介紹的編譯ffmpeg4.0.2一樣進行編譯,發現ijkplayer更新的ffmpeg程式碼存在不少問題,有一些bug,也有的缺失了windows部分的程式碼,做了一些改動,也有可能有問題,但最後編譯通過了(具體可以看我的github)。ijkplayer-ffmpeg的android平臺下,最終ffmpeg部分是生成了一個so動態庫,libijkffmpeg.so,而且這個庫還很小。使用ffmpeg的configure編譯出來後是很多的dll和lib,想像ijkplayer一樣將需要的.o檔案打包成一個動態庫,最後沒有成功,先繼續往前走吧,最關鍵的部分還沒到,朝目標又近了一步,加油。