日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Mac全量编译ijkplayer生成Android库

發布時間:2024/4/15 Android 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mac全量编译ijkplayer生成Android库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ijkplayer編譯

Pangu-Immortal (Pangu-Immortal) · GitHub

GitHub地址:GitHub - bilibili/ijkplayer: Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

最近做新人培訓,講了下編譯過程,發現很多人拉不下代碼,也編譯不過去。我用一臺新電腦重新梳理了一個新環境會遇到哪些坑,這里簡單記錄一下完整的內容和踩過的坑。

1. 環境準備

# install homebrew, git, yasm ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install git brew install yasm
  • Android SDK(官網下)
  • 不受支持的 NDK 下載(android-ndk-r14b,官方使用的r10。這里不能高于r14b,否則編譯不過)?

2. 設置環境

在你的環境變量里面加入路徑

open .bash_profile編輯好了保存,生效用下面命令,這里針對的當前窗口的上下文 source .bash_profile

環境變量很簡單,如果不會可以隨意搜索就能找到答案。

3.下載ijk代碼

? ? ? ?這個需要安裝git,可以參考網上各種教程,比較簡單。我的mac因為之前安裝了git的桌面客戶端,所以就有了git環境,不需要額外配置。

# 克隆到ijkplayer-android目錄 git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android# 進入ijkplayer-android目錄 cd ijkplayer-android # 檢出最新版本 git checkout -B latest k0.8.8

4.編譯前選擇你的配置,就是自動化編譯時的一些配置選項,比如支持什么協議啊,支持什么音視頻類型等,

官方提供了三個模板給我們使用:

  • module-default.sh:默認,如果你喜歡更多類型可以用這個;
  • module-lite-hevc.sh:如果您更喜歡較小的二進制大小的編解碼器/格式(包括hevc功能)
  • module-lite.sh:如果您更喜歡較小的二進制大小的編解碼器/格式(默認情況下)

使用的時候如下:

cd config rm module.sh ln -s module-default.sh module.sh

5.初始化FFMPEG

./init-android.sh

這個是下載FFMPEG的源碼,下載過程會很慢。下載過程中extra\ffmpeg文件夾的內容會變化。

如果視頻播放需要支持Https協議,還需要執行如下命令:

./init-android-openssl.sh

終端如果不配置代理會很慢,電腦開了VPN和終端是兩回事,終端依然不走代理流量,除非是代理全部流量。

# 打開terminal,使用代理。例如,這里只是舉個例子,IP和端口用自己的。export http_proxy=http://127.0.0.1:50122 export https_proxy=http://127.0.0.1:50122 export ALL_PROXY=socks5://127.0.0.1:50121

6.編譯

cd android/contrib

執行清除命令,然后編譯需要的so,這里的all是生成所有版本的,如果只需要對應版本的,可以把all替換成armv7a等你需要的版本。編譯需要很長時間。

編譯openssl

./compile-openssl.sh clean ./compile-openssl.sh all

編譯ffmpeg

./compile-ffmpeg.sh clean ./compile-ffmpeg.sh all

在編譯ffmpeg的時候出現Unknown option "--disable-ffserver"錯誤.

因為:ffmpeg4.0刪了ffserver

-------------------------------------------------------------------------------------------------------------

將config/module.sh中的

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda"?

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"

注釋了就可以了......

--------------------------------------------------------------------------------------------------------------

在module.sh 最底部增加以下兩行

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

-------------------------------------------------------------------------------------------------------------

?? 提示NDK環境問題時請注意:(ijk只認 ANDROID_NDK,ANDROID_SDK 兩個字段)

You must define ANDROID_NDK, ANDROID_SDK before starting.
They must point to your NDK and SDK directories.

需要特殊的配置,并非環境配置不對。。

需要額外增加一個:

在原來環境變量的基礎上,必須增加這兩行。因為ijk比較老了,識別老的方式。 # export ANDROID_SDK=<your sdk path> # export ANDROID_NDK=<your ndk path>

# NDK
export ANDROID_NDK=/Users/qihao/android-ndk-r14b/

# SDK
ANDROID_HOME=/Users/qihao/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/tools
export ANDROID_SDK=/Users/qihao/Library/Android/sdk

編譯0.8.8版本的ijk,./compile-ffmpeg.sh all,出現了linux/perf_event.h: No such file or directory

# 在moule.sh文件加入如下兩句即可: export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"# 然后clean一下再編譯。 ./compile-ffmpeg.sh clean ./compile-ffmpeg.sh all

看最后一行,有一句提示:運行如下腳本編譯成so庫。

Pangu-Immortal (Pangu-Immortal) · GitHub

cd .. 退到上一級目錄,看一眼,有個compile-ijk.sh文件。# to continue to build ijkplayer, run script below, sh compile-ijk.sh 不帶all只有v7a全版本 ./compile-ijk.sh all

7.到此就算編譯完成了。然后找到ijkplayer目錄使用Android studio打開即可。


關于如何運行android studio集成ijkplayer

Pangu-Immortal (Pangu-Immortal) · GitHub

  • 1.導入到你的項目中

android studio打開你的項目,File- Import Module…選擇ijkplayer的anroid/ijkplayer目錄,ijk-example依賴所有庫,所以導入后所有項目都會導入到你的項目中。

  • 2.將android/ijkplayer目錄下的tools文件夾也拷貝到自己項目的根目錄下。
  • 3. 在ijkplayer-java\src\main\目錄下新建一個名為jniLibs的文件夾,將各個ijkplayer-xxx目錄中的\src\main\libs目錄下的文件夾拷貝到jniLibs文件夾中,如:ijkplayer–armv7a的該目錄下包含armeabi-v7a這個文件夾,其中包含了該平臺對應的.so文件,如果希望包含所有平臺的,就將所有ijkplayer-xxx下的全部拷過來,如果只希望某幾個平臺的,就只拷貝它們的。
  • 4.將ijkplayer-xxx的目錄全部從項目中刪除掉,只保留ijkplayer-example、ijkplayer-java、ijkplayer-exo以及tools文件夾,其中ijkplayer-example依賴于后面幾個。

  • 5.將ijkplayer-example修改為Module的形式,因為ijkplayer-example本身是一個application工程,默認不生成aar文件,且里面的資源互相依賴,難以像舊版本通過復制所需的幾個java文件到自己工程中的方式來使用,所以不如將整個ijkplayer-example轉換為我們工程的一個Module。具體方法是:
先修改ijkplayer-example目錄下的build.gradle文件,如下:apply plugin: 'com.android.library'android {// http://tools.android.com/tech-docs/new-build-system/tips//noinspection GroovyAssignabilityCheckcompileSdkVersion rootProject.ext.compileSdkVersion//noinspection GroovyAssignabilityCheckbuildToolsVersion rootProject.ext.buildToolsVersionbuildToolsVersion '25.0.0'lintOptions {abortOnError false}defaultConfig {minSdkVersion 9targetSdkVersion rootProject.ext.targetSdkVersionversionCode rootProject.ext.versionCodeversionName rootProject.ext.versionName}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}}dependencies {compile fileTree(include: ['*.jar'], dir: 'libs')compile 'com.android.support:appcompat-v7:25.0.0'compile 'com.android.support:preference-v7:23.0.1'compile 'com.android.support:support-annotations:23.0.1'compile 'com.squareup:otto:1.3.8'compile project(':ijkplayer-java')compile project(':ijkplayer-exo')}

注意:

  • apply plugin: ‘com.android.application’要改為apply plugin: ‘com.android.library’
  • applicationId “tv.danmaku.ijk.media.example”這句要去掉
  • compile ‘com.android.support:appcompat-v7:25.0.0’
  • compile ‘com.android.support:preference-v7:23.0.1’
  • compile ‘com.android.support:support-annotations:23.0.1’
  • compile ‘com.squareup:otto:1.3.8’
  • 這幾個修改為自己安裝的版本。

    • 6.在ijkplayer-example根目錄下增加一個gradle.properties文件,內容如下:
    POM_NAME=ijkplayer-examplePOM_ARTIFACT_ID=ijkplayer-examplePOM_PACKAGING=aar
    • 7.在自己的項目中添加依賴項,完成上述操作,點擊async gradle即可。

    其他錯誤:

    如果出現

    Error:(3) Error retrieving parent for item: No resource found that matches the given name ‘android:TextAppearance.Material.Widget.Button.Borderless.Colored’.

    如上類似錯誤,那是幾個項目的sdk版本不同引起的,四個項目包含你自己的項目的compileSdkVersion 、

    buildToolsVersion、targetSdkVersion和compile ‘com.android.support:appcompat-v7:25.0.0’ 幾個版本必須要統一,如果不統一會出現各種問題。

    以上就是本文的全部內容,希望對大家的學習有所幫助。

    總結

    以上是生活随笔為你收集整理的Mac全量编译ijkplayer生成Android库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。