Skip to content
さきゅばすの召喚の仕方(ビルド方法とちょっとした技術ドキュメント)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md Update README.md Dec 28, 2019
arch.jpg
filter.jpg
frontend.jpg

README.md

さきゅばすの召喚の仕方

あるいは、ビルド方法とちょっとした技術ドキュメント。

もう最後にビルドしたのが何年か前も思い出せないので、とりあえずビルドできるだけです。ビルドできるところまでは確認しましたが、動かして最後まで走りきるかどうかはちょっと確信がもてない。たぶん、無理だと思う。

開発を引き継ぎたい人へ

以下のどのチャンネルでも構わないので、ご連絡ください:

(2chは規制で書けないことが稀によくあるのでちょっと勘弁してください)

開発を引き継ぐと次の特典がえられます:

  • github Orgnizationの管理者権限
    • ソースコードへのコミット権限
    • 公式サイト編集権限
  • OSDNプロジェクトの管理者権限
    • 昔使ってて最近ほとんど使ってない。実質休眠状態です。
  • github/OSDNをやめて他に行くなどしてももちろんOKです

さきゅばすは基本的にGPLv3かBSD-2-Clauseでデュアルライセンスされているオープンソース・ソフトウェアですので、そこだけご注意を。

引き継ぐ時に確実にやらないといけないこと

saccubus.dllとSaccubus3のffmpegに互換性がない

Saccubus3のffmpegはSaccubus2ベースですが、saccubus.dllはSaccubus1ベースなので、互換性がありません。

解決策としては、次の2つがあります:

  • Saccubus3ブランチをSaccubus1ブランチをベースに変更する
    • rebaseでたぶんすごい苦労すると思います
  • saccubus.dllを書き換え、Saccubus3のffmpegに対応させる
    • 全く仕様を覚えてないので、ソースコードの解読が必要

フロントエンドが最新のニコニコ動画APIに対応してない

がんばれ。

saccubus.dllの使ってるSDLが古い

今使ってるのがSDL1.2で、今の最新盤はSDL2で、そのうちobsoletedになりビルドすら出来なくなるかも…。

全体構造図

全体の構造はこんな感じです:

arch.jpg

他にもあったかもしれないが、もう忘れた。

ビルド方法各論

ffmpeg

さきゅばすのffmpegは、オリジナルのffmpegにちょっとしたパッチを入れたものです。そのため自分でビルドする必要があります。

なお、ffmpegのライセンスが下記の手順でビルドするとGPLv3になるので、さきゅばすはffmpegだけはGPLv3になります。

ソースコードのclone

git clone git@github.com:Saccubus/ffmpeg.git
cd ffmpeg

ffmpegの大本を最新版にする

まずは、ffmpegの最新版に追従させましょう。とにかくビルドだけしたい人はここは読み飛ばしてください。

# ffmpegディレクトリ下で
git checkout master

# 大本のリポジトリを追加し、情報を取得する
git remote add upstream https://git.ffmpeg.org/ffmpeg.git
git fetch upstream

# ローカルリポジトリのmasterブランチを、大本のmasterブランチに追従させる
git pull upstream master --ff-only

# https://github.com/Saccubus/ffmpeg/tree/master に反映
git push origin master

さきゅばすパッチの当たったffmpegのソースを生成する

さきゅばす用のパッチは、gitのrebaseを使って管理しています。一つ上の手順を飛ばした場合は、こちらも飛ばして大丈夫です。

# Saccubus3 ブランチに移動
git checkout Saccubus3

# masterブランチからrebase
git rebase master
## この時conflictが起こったら…がんばれ。

# https://github.com/Saccubus/ffmpeg/tree/Saccubus3 にpush
# この時、--forceをつけないと親子関係がない(遠い親戚ぐらいになる)ため弾かれる。
# もしこの時の--forceで何かを壊してしまった場合、次に作るtagからリカバリしてください。
git push origin Saccubus3 --force

# 成功したら、後でトラブった時のためにtagをつけてpushしておく
git tag Saccubus3-20191109
git push origin Saccubus3-20191109

mergeだけでなんとかしようとした時期もあったのですが、やたらコンフリクトしてつらいのでやめました。ちなみにですが、Saccubus{1,2,3}ブランチすべてで同じ操作で最新版ffmpegに追従させることができます。ただ、Saccubus1ブランチはコンフリクトを解消するのはたぶんかなり難しいでしょう。

ffmpegのクロスコンパイル方法

さきゅばすのwindows用ffmpegバイナリは、クロスコンパイラを使ってLinuxから生成されています。

ffmpegのクロスコンパイル・ヘルパのcloneとrebase

windows用ffmpegの全部入りバイナリを作るためのヘルパを提供してくれる人がいるので、その人の成果に乗っかります。

具体的に言うと、ffmpegを最新版にしたのと同じことをします。

# clone
git checkout git@github.com:Saccubus/ffmpeg-windows-build-helpers.git
cd ffmpeg-windows-build-helpers

# ローカルリポジトリのmasterブランチを、大本のmasterブランチに追従させる
git remote add upstream git@github.com:rdp/ffmpeg-windows-build-helpers.gi
git checkout master
git pull upstream master --ff-only
git push origin master

# saccubus3リポジトリでrebase、push
git checkout saccubus3
git rebase master
## ffmpeg同様、ここでconflictする事があります。その時はがんばれ。

git push origin saccubus3 --force

# 後のために一応タグをつけて保存
git tag saccubus3-20191109
git push origin saccubus3-20191109
ヘルパを使ってクロスコンパイルする

やっとこれでビルドが出来ます。

# ffmpeg-windows-build-helpersのディレクトリで
git checkout saccubus3
bash compile_saccubus.sh

二時間ぐらい掛かるかな。

うまくいくと、sandbox/win64/ffmpeg_git/の下にffmpeg.exeが出来上がるはずです。

% cd sandbox/win64/ffmpeg_git/

% ls ffmpeg.exe
-rwxrwxr-x 1 kaede kaede 88M Nov  9 06:09 ffmpeg.exe

% file ffmpeg.exe
ffmpeg.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

フロントエンド

いわゆるGUI部分です。

OpenJDKの最新版をとりあえず入れておいてください。

git checkout git@github.com:Saccubus/Saccubus3.git
cd Saccubus3/frontend

# とりあえず起動したい
./gradlew run

# jarを作りたい
./gradlew build
java -jar build/libs/jp.osdn.saccubus-3.0-all.jar

他の./gradlewのコマンドに関しては公式サイトを見てください。

gradleでビルドできる関係上、開発にはIntelliJ Ideaがそのまま使えます。

フロントエンド

nicovideo(E).dll/saccubus.dll

コメントをフレームに描きこむ機能を担う部分です。

ffmpegからは独立したDLL(Dynamic Link Library)として存在しており、ffmpegのうち、さきゅばすのために当てたパッチの部分が実行時にこいつをdlopen()して読み込み・実行します。ffmpegと一緒にするとさすがに開発もビルドも大変だったので、このような形になりました。

こちらもLinuxでクロスコンパイルできます(Ubuntu 19.04)。Windowsでもできるはず(未確認)。

# 必要なライブラリを入れる
sudo apt install build-essential mingw-w64 cmake

cmakeを使ってビルドしているので、開発にはCLionがそのまま使えます。

git checkout git@github.com:Saccubus/Saccubus3.git
cd Saccubus3/filter
# windows用ビルドにつかうフォルダの作成
mkdir build
cd build

# windows向けにクロスコンパイル
cmake -DCMAKE_TOOLCHAIN_FILE=../mingw64-cross.cmake ..
make

# windowsでビルドする時は普通にこれでいいはず
cmake ..
make

こんな画面が出たらビルド成功。

ビルド成功

上で作ったbuildフォルダにできるsaccubus.dllがフィルタの実体です。

% ls
total 6.9M
....
-rwxrwxr-x  1 kaede kaede 3.4M Nov 10 12:48 saccubus.dll
% file saccubus.dll
saccubus.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows

(おまけ) saccubus.github.io

さきゅばす公式サイトgithub pages で管理しています。

You can’t perform that action at this time.