黄脳エンジニアメモ

仕事や趣味やらで調べたり試したりした情報をただただ書き並べてるだけ

*

[GStreamer]WindowsのGStreamer1.0をcerberoでビルドする

      2018/03/24

 ビルド方法の情報が不十分

本家GStreamerにビルドの説明ページで下記がある。
https://gstreamer.freedesktop.org/documentation/installing/building-from-source-using-cerbero.html
実際のGstreamerのcerberoは下のGitHubに格納されている。
https://github.com/GStreamer/cerbero
いずれにも必要な環境などの説明があるが結局不明瞭な部分があってどちらも不親切な状況。
ここでは、確実に動作した手順をなるべく省略せずに記載する。また、なんのためにその作業を行うのか、結果なにが行われるのかなど。詳細を追記していく予定。
現在は全体の流れを文章でしか書いてないが、他の情報を参考にうまくできなかった方々も経験者なら役に立つはずだ。

2018/03/24 更新

まず必要なものをダウンロードしてインストール

Python2.7

目的はcerberoがPythonでできているようでさらに最新のPython3では動かないようで2.7入れるみたい。もしPython3を使っている環境の場合は気をつけないといけない。
URL: https://www.python.org/downloads/
ファイル: python-2.7.14.msi
インストール先:C:\Python27
選択:インストール先以外すべてデフォルト

Git

目的:最初にcerberoをgitでとってくるのに利用し、cerberoがGstreamerで必要なソースをとってくるのにも利用している。wgetで取得する場合もありそう。このGit入れるとMinGWも内蔵しているのでそれが使えそうだが今回は試してない。
URL:  https://git-scm.com/download/win
ファイル: Git-2.16.1-64-bit.exe
インストール先:C:\Git
選択:
SelectComponents → GitLFSだけいれた
スタートメニューGit入れるのやめた
編集エディタはvimにした
Adjusting your PATH environment ではむやみに動かないように Use Git from Git Bash only にしてみた
HTTPS設定は OpenSSL使うとした。
line endiong conversions は “Checkout as-is, Commit as-is”
terminal emulator は MinTTYのままにした
extra option設定はそのまま(file system caching / Git Credentioan Manager )

CMake

目的:マルチプラットホームのmake環境で今回はWindowsでmakeさせるために利用
URL: https://cmake.org/download/
ファイル:cmake-3.10.2-win64-x64.msi
インストール先:デフォルト
選択:Add  CMake to the system PATH for curent user にしてWindowsの1人のユーザだけで使う設定にした(絶対ではないはず)

Wix35

目的:Windows用のインストーラーを作るための機能らしいです。2011年のバージョンで今は3.10になっているが本家ご指定なので。
URL:http://wix.codeplex.com/releases/view/60102
ファイル:Wix35.msi
インストール先:デフォルト
選択:VisualStudioがないと警告るが続行させる

Microsoft SDK

目的:Windows用のコンパイラなどの環境を作るため。VisualStudioがあればいらなそうな気がするが。今回VSがない環境で試したので。ただし本家ご指定の7.1はWindows10などに入らないので8を入れる。
URL:https://developer.microsoft.com/ja-jp/windows/downloads/windows-8-sdk
ファイル:sdksetup.exe
インストール先:デフォルト
選択:なし

Windows Driver Kit

目的:DirectShowなどの入出力に必要なかんじ、こちらも本家では7.1ご指定だが、Windows10に入らないので新しいのを。
URL:https://developer.microsoft.com/ja-jp/windows/hardware/license-terms-enterprise-wdk-1703
わかりにくいが「Install WDK for Windows 10, version 1703」というのを入れてみた
ファイル:wdksetup.exe
インストール先:デフォルト
選択:なし

MinGW/MSYS

目的:Windowsでlinuxな環境を提供するもの。
URL:https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
ファイル:mingw-get-setup.exe
インストール先:C:\MinGW
選択:インストール後にMinGW Installerを起動して下記を選ぶ
mingw-developper-toolkit / mingw32-base / msys-base をチェック
メニューから下記を選んで
Intallation > ApplyChanges
[Apply]

cerberoの環境設定

環境変数の設定

この環境変数をWindows側でやってしまうとよくわからなくなるので、今回はMinGWのターミナル(bash)で設定をするようにしてWindowsにごみが残らないようにする。

以降の操作はMinGWのターミナル上で行う。ターミナルは、C:\MinGW\msys\1.0\msys.batで起動できる。

python Git などのPATHを設定するので下記のように実行する。

$ echo 'export PATH="$PATH:/c/Python27:/c/Git/bin:/c/MinGW/bin/"' > ~/.profile

vimなどエディタ編集できる場合は上記ではなく下記のように~/.profileに直接記入してもよい

export PATH="$PATH:/c/Python27:/c/Git/bin:/c/MinGW/bin/"

有効にするために下記のように実行する。

$ source ~/.profile

gitのアクセスのアカウントを設定

buildするターゲットによってはgitにアカウント(メールアドレスと氏名)の設定が必要になるので設定しておく。

$ git config --global user.email "xxxx@xxx.xxx.jp"
$ git config --global user.name "Xxxx Xxxxx"

cerberoをインストールする(ビルドのバージョン指定も可能)

cerberoは、https://github.com/GStreamer/cerberoにあるのでgitで取得する

$ cd ~
$ git clone https://github.com/GStreamer/cerbero

上記ではGit上の最新版を取得することになる。もし、過去のバージョンのGStreamerをビルトしたい場合、git clone にブランチ指定のパラメータ-bでバージョン番号を指定する。なぜこれだけでいいかというと、各バージョンのcerberoの中にある recipes/custom.py に GStreamer のバージョンが設定されているからだ。これでGStreamer必要なバージョンがダウンロードされてビルドされる。

$ cd ~
$ git clone -b 1.14 https://github.com/GStreamer/cerbero

gitがうまくいかないときはgit関連のサイトをみて動くようにする。例えばproxyサーバ経由しなければいけない環境など。

上記がうまくいけば ~/cerberoというフォルダにダウンロードされる。参考までに下記のようなフォルダなどが作成される。

$ cd ~/cerbero $ ls -1F LICENSE.LGPL
 MANIFEST.in.in
 Makefile
 README
 build/
 cerbero/
 cerbero-uninstalled*
 config/
 data/
 packages/
 recipes/
 setup.py
 test/
 tools/

cerberoの初期構築

cerbero運用に必要なモジュールを初期構築する。
ターミナル(C:\MinGW\msys\1.0\msys.bat)を起動して下記のコマンドラインを実行する。

設定ファイルがないとエラーになるので ~/.cerbero/cerbero.cbc を作っておく

$ mkdir ~/.cerbero
$ touch ~/.cerbero/cerbero.cbc

環境にCPUの余力があるのであればcerbero.cbcを下記の内容にすればマルチスレッドでコンパイルされる

allow_parallel_build=True
num_of_cpus=4

なぜかcerbero-uninstalledシェルスクリプトを使う。構築方法を書いたサイトによってはcerbero-uninstalledをcerberoにリネームするなどしているがcerberoというディレクトリもあるため、混同しないようにここではオリジナルのファイル名のまま利用する。

$ cd ~/cerbero
$ ./cerbero-uninstalled bootstrap

これは、かなり時間がかかるがじっくり待つ。完了すると下記のようなパッケージがfetch extract configure compile install post_install gen_library_file という順に処理しインストールされる。

  • [(1/15) mingw-runtime ]
  • [(2/15) gettext ]
  • [(3/15) libiconv ]
  • [(4/15) autoconf ]
  • [(5/15) gettext-tools ]
  • [(6/15) gettext-m4 ]
  • [(7/15) automake ]
  • [(8/15) m4 ]
  • [(9/15) libtool ]
  • [(10/15) pkg-config ]
  • [(11/15) orc-tool ]
  • [(12/15) gtk-doc-lite ]
  • [(13/15) gperf ]
  • [(14/15) intltool ]
  • [(15/15) yasm ]
Windows2012R2のエラー回避

AWSなどではWindows2012サーバで作業を行うことがあるかもしれないが、下記のようなエラーになってしまう。これは .\cerbero\utils\__init__.py が2012ServerR2をサポートしていないためだ。

$ ./cerbero-uninstalled bootstrap
Traceback (most recent call last):
  File "./cerbero-uninstalled", line 8, in 
    from cerbero.main import main
  File ".\cerbero\main.py", line 19, in 
    from cerbero import hacks
  File ".\cerbero\hacks.py", line 132, in 
    from cerbero.utils.shell import call as shell_call
  File ".\cerbero\utils\shell.py", line 45, in 
    PLATFORM = system_info()[0]
  File ".\cerbero\utils\__init__.py", line 288, in system_info
    raise FatalError("Windows version '%s' not supported" % win32_ver)
cerbero.errors.FatalError: Fatal Error: Windows version '2012ServerR2' not supported

~/cerbero/cerbero/utils/__init__.pyの下記の部分に行を追加する。

        dmap = {'xp': DistroVersion.WINDOWS_XP,
                'vista': DistroVersion.WINDOWS_VISTA,
                '7': DistroVersion.WINDOWS_7,
                'post2008Server': DistroVersion.WINDOWS_8,
                '8': DistroVersion.WINDOWS_8,
                'post2012Server': DistroVersion.WINDOWS_8_1,
                '8.1': DistroVersion.WINDOWS_8_1,
                '10': DistroVersion.WINDOWS_10}

ここに2012ServerR2も追加する。

        dmap = {'xp': DistroVersion.WINDOWS_XP,
                'vista': DistroVersion.WINDOWS_VISTA,
                '7': DistroVersion.WINDOWS_7,
                'post2008Server': DistroVersion.WINDOWS_8,
                '8': DistroVersion.WINDOWS_8,
                'post2012Server': DistroVersion.WINDOWS_8_1,
                '2012ServerR2': DistroVersion.WINDOWS_8_1,
                '8.1': DistroVersion.WINDOWS_8_1,
                '10': DistroVersion.WINDOWS_10}

Gstremerのビルド

cerberoは指定したレシピでgitから必要なソースなどをダウンロードしてきてコンパイルを行うことができる。

ターミナル(C:\MinGW\msys\1.0\msys.bat)を起動して下記のコマンドラインを実行する。

$ ./cerbero-uninstalled build gstreamer-1.0

成功すれば ~/cerbero/build/dist/windows_x86_64 のディレクトリにビルトされた環境が作成される。

他のプラグインや追加機能も同様にビルトできる、下記のように作りたいレシピを指定する(ちなみにレシピは~/cerbero/recipes/*.recipe にある)。

$ ./cerbero-uninstalled build gst-plugins-base-1.0
$ ./cerbero-uninstalled build gst-plugins-good-1.0
$ ./cerbero-uninstalled build gst-plugins-bad-1.0
$ ./cerbero-uninstalled build gst-plugins-ugly-1.0
$ ./cerbero-uninstalled build gst-libav-1.0
$ ./cerbero-uninstalled build gst-rtsp-server-1.0
$ ./cerbero-uninstalled build gst-editing-services-1.0
$ .cerbero-uninstalled build gst-transcoder
.
.

これらのすべてのビルトは試していないので環境上不足があるかもしれない。trancecoderはPython3がないとエラーになったのでPython3が必要そうだ。

パッケージの作成

cerberoではWindowsのインストーラーパッケージも生成できるようだがまだ試していない。そもそもビルトしたいのは、特定のモジュールだけ最新を使いたいなどがあるはずなので、~/cerbero/build/dist/windows_x86_64 から必要なものを取り出して使えばよい。

動かし方はマニュアルによれば下記。

$ ./cerbero-uninstalled package gstreamer-1.0

パッケージ名は下記が指定できるようだ(cerbero/packages/gstreamer-1.0/gstreamer-1.0.packageに記述されている)

  • gstreamer-1.0-core
  • gstreamer-1.0-system
  • gstreamer-1.0-playback
  • gstreamer-1.0-codecs
  • gstreamer-1.0-effects
  • gstreamer-1.0-net
  • gstreamer-1.0-visualizers
  • gstreamer-1.0-codecs-gpl
  • gstreamer-1.0-codecs-restricted
  • gstreamer-1.0-net-restricted
  • gstreamer-1.0-dvd
  • gstreamer-1.0-libav
  • gstreamer-1.0-encoding
  • gstreamer-1.0-capture
  • gstreamer-1.0-editing
  • gstreamer-1.0-devtools
  • vsintegration-1.0
  • gstreamer-1.0-vs-templates

参考情報

本家のGStreamer の cerbero の説明(間違いはないが説明が不十分)

https://github.com/GStreamer/cerbero

 

 - Gstreamer, 動画処理 , , ,

  関連記事

関連記事はありませんでした