PS:何をするにしても、実践が最も重要であり、実際に体験して得た経験は、適当に技術記事を読むことでは得られないものです。
最近のプロジェクトでは、動画再生が必要になる可能性があり、後で rtsp プロトコルの動画再生もサポートする必要があるかもしれません。いろいろ考えた結果、B 站のオープンソースの ijkplayer をコンパイルすることにしました。ijkplayer は ffmpeg に基づいた軽量のクロスプラットフォームプレーヤーで、Android と iOS で使用できます。コンパイルすることで、より多くのフォーマットをサポートできます。ffmpeg がサポートするフォーマットであれば、ijkplayer もサポートすると言えます。
最初は Cygwin を使ってコンパイルを試みましたが、so ファイルを生成する際にエラーが発生し、途中で多くの問題に直面しました。そのため、Ubuntu 環境で ijkplayer をコンパイルすることに決めました。Ubuntu 環境でのコンパイルは基本的に問題なく、コンパイルプロセスは以下の通りです:
- 準備
- 環境変数の設定
- 必要なコンポーネントのインストール
- 正式なコンパイル
- ijkplayer の実行
準備#
VMware 仮想マシンをインストールし、Ubuntu システムをインストールします。VMware をインストールした後、仮想マシンを作成し、典型的なインストールモードを選択します。以下の図のように:
次に「次へ」をクリックし、ダウンロードしたシステムイメージを選択します。以下の図のように:
正しく選択すると、イメージ情報が表示されます。私が選んだのは Ubuntu 64 ビット 18.04 です。その後「次へ」をクリックします。以下の図のように:
ユーザー名、パスワードなどの情報を入力し、「次へ」をクリックします。以下の図のように:
仮想マシンの名前と仮想マシンをインストールする場所を入力し、「次へ」をクリックします:
仮想マシンのディスクサイズを設定します。ディスクパフォーマンスを低下させないために、ディスクを単一ファイルとして保存することを選択し、「次へ」をクリックします。以下の図のように:
これで Ubuntu 仮想マシンの作成が完了しました。「完了」をクリックし、Ubuntu のインストールが完了するのを待ち、設定したパスワードを入力すれば Ubuntu システムに入れます。以下の図のように:
さらに、Linux バージョンの Android SDK と NDK をダウンロードする必要があります。ここで選択したのはそれぞれ android-sdk_r24.4.1-linux.tgz と android-ndk-r10e-linux-x86_64.zip です。ダウンロード後、以下のコマンドを使用してファイルを解凍できます:
unzip xxx.zip
tar -xvf xxx.tgz
NDK ディレクトリを仮想マシンの共有ディレクトリに置かないように注意してください。コンパイルが順調に進むように、NDK ディレクトリは Ubuntu のシステムディレクトリ、つまり /home/ ユーザー名 の下に置く必要があります。
環境変数の設定#
Ubuntu の /home/ ユーザー名 / にて、Ctrl+h を押して .bashrc ファイルを表示し、SDK と NDK の環境変数を設定します。以下を参考にしてください:
NDK=/home/jzman/android/android-ndk-r10e
export NDK
ADB=/home/jzman/android/android-sdk-linux/platform-tools
export ADB
# ANDROID_NDK と ANDROID_SDK のパス
ANDROID_NDK=/home/jzman/android/android-ndk-r10e
export ANDROID_NDK
ANDROID_SDK=/home/jzman/android/android-sdk-linux
export ANDROID_SDK
# PATH に追加
PATH=${PATH}:${NDK}:${ADB}:${ANDROID_NDK}:${ANDROID_SDK}
設定が完了したら .bashrc を保存して閉じ、Terminal を開いて ndk-build -v を入力し、ndk が正しく設定されているか確認します。以下のようなログが表示されれば設定成功です:
jzman@ubuntu:~$ ndk-build -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
必要なコンポーネントのインストール#
以下のコマンドを順に入力して git、yasm、make を更新およびインストールします:
sudo apt-get update
sudo apt install git
sudo apt install yasm
sudo apt install make
git --version と make -v を使用して git と make ツールが正しくインストールされているか確認します。成功すれば対応するバージョン番号が表示されます。以下を参考にしてください:
jzman@ubuntu:~$ git --version
git version 2.17.1
jzman@ubuntu:~$ make -v
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
jzman@ubuntu:~$
正式なコンパイル#
// ijkplayer のソースコードをクローン
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer
cd ijkplayer
git checkout -B latest k0.8.8
// より軽量な module-lite.sh を使用
cd ijkplayer/config
rm module.sh
ln -s module-lite module.sh
// ffmpeg のソースコードをダウンロード
cd ijkplayer
./init-android
// ffmpeg をコンパイル
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
// ijkplayer をコンパイルし、so ファイルを生成
cd ijkplayer/android
./compile-ijk.sh all
https をサポートする場合は、コンパイル時に以下のコマンドを実行します:
cd ijkplayer
./init-android-openssl.sh(https をサポート)
cd ijkplayer/android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
コンパイルが成功すると、ijkplayer/android の下に対応する Android プロジェクトが生成されます。以下の図のように:
各 abi ライブラリの中を確認し、ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/libs の下に対応する so ファイルが生成されているかを確認します。arm64 の例として、以下の図のように:
ijkplayer の実行#
Android Studio を使用してコンパイル生成された Android プロジェクトを開き、実行したスクリーンショットは以下の通りです:
ijkPlayer のコンパイルはこれで終了です。疑問があればコメントしてください。