困ったことに
未だ、ネクストスケープ配信事業本部 Advent Calendar 2016 に空いている日がある・・・
前回と同じく、これはそんな空き日を埋める小ネタの話。
今回もまた、恐らく大半以上の人にとって知る必要のない小ネタです。
そもそもShakaPackagerとは?
GoogleがGithubで公開している、MPEG-DASHのパッケージャです。
https://github.com/google/shaka-packager
mp4ファイルをMPEG-DASHで配信できるフォーマットに変換するツール、と言うと分かりやすいでしょうか。
パッケージングだけでなく、WidevineDRMで暗号化出来たり、mp4からApple HLSの作成も出来たりします。
専門的になりますが、暗号化の際にAES-CBCモードが使えたりして何気に最先端です。
そんなShakaPackagerですが
何故か、Windows用のバイナリが配布されていません。Linux用とMacOSX用のバイナリしか配布されていません。
READMEとか読むと、Dockerでやれば?、みたいな事が書いてあります。
と言う事で自分でビルドしてみます
-
何はなくとも、コンパイラーとかリンカーが必要なのでVisualStudioをインストールします
https://www.visualstudio.com/ja/downloads/
ここからCommunity Editionをダウンロードして、インストールの際にC++の環境を忘れずにチェックしてインストールします。
-
ShakaPackagerをビルドするディレクトリを適当に、C:\shaka\srcとかに決めます
-
C:\shakaにGoogleのビルド用ツールのdepot_toolsをダウンロードします
cd c:\shaka
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git .\depot_tools\
4. c:\shaka\srcをgithubのリポジトリに設定します
depot_tools\gclient config https://github.com/google/shaka-packager.git --name=src --unmanaged
5. ここでちょっと一息
ビルドするのは、x86向けですか?それともx64向けですか?
もしもx64向けにビルドする場合は、
set GYP_DEFINES=target_arch=x64
の環境変数設定が必要です。尚、x64向けのビルドは色々と下ごしらえが面倒なので、ここではx86用のビルドを前提に話を進めます。
x86向けにビルドするのなら
set GYP_DEFINES=target_arch=x86
になりますが、この設定はしなくてもx86用のビルド設定は勝手にされるので、する必要はないと思います。
6. ソースファイルを同期する
depot_tools\gclient sync
7. ここでまた一息
どうも日本語環境でビルドしようとすると、ビルドの途中でコケるのでOSの言語設定を英語にします。
自分はWin7しか環境が無いので、Win7の場合だと
ここで
こんな風にシステムロケールを変更します。
8. ビルドする
リリースビルドをするのなら
cd src
..\depot_tools\ninja -C "out\Release" -k 100
デバッグビルドをするのなら
cd src
..\depot_tools\ninja -C "out\Debug" -k 100
です。
x64用ビルドの際は
cd src
..\depot_tools\ninja -C "out\Release_x64" -k 100
..\depot_tools\ninja -C "out\Debug_x64" -k 100
みたいなコマンドでビルドするのですが、大量のエラー扱いされるワーニングが出てコンパイルが通らないので、
out\Release_X64
out\Debug_x64
の配下の *.ninja ファイル内の cflags に設定してある /WX を /WX- に変えておいた方が良いと思います。
それから、どうも gclient は gclient sync の際に環境変数を見て、x86向けとx64向けのソースファイルを取り分けている様なので
x86向けとx64向けのソースは分けて置いたほうが良いかなあ、とか思います。
と、ここまで書いておいて何ですが
https://ci.appveyor.com/project/shaka/shaka-packager
で自動ビルドがされていて、packager.exeだけが欲しいなら、ここからダウンロードした方が早いです。(笑)