1. 程式人生 > >一步步實現windows版ijkplayer系列文章之四——windows下編譯ijkplyer版ffmpeg

一步步實現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進行『移花接木』,現將過程記錄如下:

  1. github上將官方ffmpeg fork一份到自己的賬戶。
  2. 在本地將ijkplayer-ffmpeg倉庫clone下來:

     https://github.com/Bilibili/FFmpeg.git
  3. 跳轉到ijkplayer-ffmpeg 根目錄:

     cd root_path_of_ijkplayer-ffmpeg
  4. 將ijkplayer指定的tag檢出。

     git checkout ff3.4--ijk0.8.7--20180103--001 -B ijkplayer       
  5. 刪除本地倉庫的origin部分:

     git remote rm origin
  6. 將官方ffmpeg origin新增到本地ijkplayer-ffmpeg:

     git remote add origin https://github.com/harlanc/FFmpeg.git
  7. 重新命名本地branch ijkplayer

    git branch -m ijkplayer-temp
  8. 將更新後的遠端倉庫拉取到本地:

     git fetch
  9. 將官方ffmpeg的3.4.4版本檢出:

     git checkout n3.4.4 -B ijkplayer
  10. 最後將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檔案打包成一個動態庫,最後沒有成功,先繼續往前走吧,最關鍵的部分還沒到,朝目標又近了一步,加油。