JavaでAirPlayサーバ

ZOOMやGoogle Hangoutsでのミーティングが増える今日この頃だけど、今までのようにホワイトボードでささっと書いて済ませたいときも多い。さて、どうするかと思ったときに思いつくのが、iPadとかで書いてそれを画面共有とかできればなという感じかと思う。Macを使っていれば、AirPlayで送れば良いので話が早いのだが、WindowsやLinuxのときにはどうしたものかとなる。ググって調べると、古い情報が多く、試しても動かないものも多いし…。

ということで、今回試したのはjava-airplay-serverというもの。ただ、これだと、自分で実装しないといけないので、試すのはjava-airplay-server-examplesの方です。動かすには、Gradle 6くらいが必要らしい(Gralde 4だとコンパイルできなかった…) いくつかサンプルがあるけど、tcp-forwarderを動かします。

$ git clone https://github.com/serezhka/java-airplay-server-examples.git
$ cd java-airplay-server-examples/tcp-forwarder/
$ gradle bootRun

として、別なターミナルを開いて、

$ ffplay -f h264 -codec:v h264 -i tcp://localhost:5002

とすれば、準備完了です。あとは、iPadから画面ミラーリングを選択するとsrzhkaと表示されるので、それを選択すれば表示される。(一応表示されるけど、iPad Proを使って試した私の環境だと、そこそこ遅延がある感じでした…使えなくはないと思うけど)

JUL->Log4J2でログを出す

FessではLog4J2を利用しているが、Java標準のロギングのjava.util.loggingのログをLog4J2経由で出せていなかった…。なので、メモがてらに。

やらなきゃならないこととしては、依存関係にorg.apache.logging.log4j:log4j-julをまずは追加する。

あとは、起動時のシステムプロパティに以下を追加する。

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

とすれば、Log4J2で指定したものでログが出てくる。詳しいことはここを参照。

AdoptOpenJDKをパッケージで入れる

ここの情報によると、AdoptOpenJDKでようやくオフィシャルなRPMとDEBファイルが提供されるようになったらしい。というわけで、Ubuntu 18.04に入れてみる。

# wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
# echo deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ bionic main > /etc/apt/sources.list.d/adoptopenjdk.list
# apt-get update
# apt-get install adoptopenjdk-11-hotspot

という感じで簡単にインストールできる。

$ java -version
 openjdk version "11.0.3" 2019-04-16
 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
 OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)

デフォルトが変わらないようであれば

# update-alternatives --config java

をして切り替える。