一步步實現windows版ijkplayer系列文章之四——windows下編譯ijkplyer版ffmpeg


一步步實現windows版ijkplayer系列文章之一——Windows10平台編譯ffmpeg 4.0.2,生成ffplay
一步步實現windows版ijkplayer系列文章之二——Ijkplayer播放器源碼分析之音視頻輸出——視頻篇
一步步實現windows版ijkplayer系列文章之三——Ijkplayer播放器源碼分析之音視頻輸出——音頻篇
一步步實現windows版ijkplayer系列文章之四——windows下編譯ijkplyer版ffmpeg
一步步實現windows版ijkplayer系列文章之五——使用automake一步步生成makefile
一步步實現windows版ijkplayer系列文章之六——SDL2源碼分析之OpenGL ES在windows上的渲染過程
一步步實現windows版ijkplayer系列文章之七——終結篇(附源碼)

windows下編譯ijkplyer版ffmpeg

ijkplayer版本ffmpeg源碼說明

ijkplayer使用了ffmpeg 3.4 release(接下來將此版本ffmpeg叫做ijkplayer-ffmpeg),ijkplayer fork版本最后一個官方的commit詳細信息如下:

提交:
01e291a592452f27b3a4e811536aaaf94096e244 [01e291a]
父級:
03351cce88
作者:
Mark Thompson <sw@jkqxz.net>
日期:
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  
    

最終的結果沒有沖突,直接將代碼commit和push即可。

在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文件打包成一個動態庫,最后沒有成功,先繼續往前走吧,最關鍵的部分還沒到,朝目標又近了一步,加油。

參考

Combining two git repositories


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM