Emby はPCやスマートフォンなど多くのプラットフォームに対応したメディアサーバーです。ウェブブラウザーからストリーミング再生可能なので、実質アプリ不要のシステムでもあります。今回はこのEmbyをUbuntuにインストールする方法を紹介しましょう。
.NET Coreベースのメディアサーバー
Emby は.NET Coreで開発されているメディアサーバーであり、次の機能を有しています。
ウェブブラウザー経由でのコンテンツ再生やサーバ管理
iOSやAndroid、Windows向けのモバイルアプリ
Android TV/Amazon Fire TV/Chromecast/Roku/Xboxなどのメディアデバイス向けアプリ
各種コンテンツメタデータデータベースへの対応
マルチユーザーやペアレンタルコントロール機能
プラグインによる機能拡張
REST API
ウェブブラウザー用のクライントはJavaScriptで開発されています。そのため、モダンでなおかつJavaScriptエンジンが載っているウェブブラウザーがあれば、クライアントアプリは不要です。
図1 ウェブブラウザーベースのクライアント
また有料サービスであるEmby Premiere に登録すると、オフライン再生や各アプリのフル機能の有効化、クラウド同期・バックアップなど各種便利な機能もついてきます。
今回はUbuntuにEmbyをインストールし、ウェブブラウザーやモバイルデバイスからアクセスする方法を紹介しましょう。
Emby Serverのインストール
Emby ServerはLinuxだけでなくWindows、Mac、FreeBSD、各種NASなど、各種プラットフォーム をサポートしています。インストール方法もパッケージをダウンロードしてきてインストールするだけとかなりシンプルです。
Ubuntuの場合もdebファイルをダウンロードしてきてそれをインストールするだけ で完結します。しかしながらUbuntuリポジトリ外のバイナリパッケージをサーバーに直接インストールすることには心理的抵抗があるかもしれません。そこで第521回 で紹介したLXDコンテナの中に閉じ込めてしまいましょう[1] 。
LXDの初期設定は完了しているものとします。次の手順でEmby用のコンテナを作成しましょう。
$ lxc launch ubuntu:18.04 emby
emby を作成中
emby を起動中
$ lxc config device add emby port8096 proxy listen=tcp:0.0.0.0:8096 connect=tcp:localhost:8096
Embyでは8096番ポートを使用しているため、LXDホストの外からEmbyコンテナにアクセスできるよう、8096番ポートをホストの8096番に紐づけています。
次にEmbyサーバーをダウンロードしてインストールします。
$ lxc exec emby -- wget -P /root \
https://github.com/MediaBrowser/Emby.Releases/releases/download/3.5.2.0/emby-server-deb_3.5.2.0_amd64.deb
$ lxc exec emby -- apt install /root/emby-server-deb_3.5.2.0_amd64.deb
インストールされるのは主に/opt/emby-server
以下であり、それ以外に設定ファイルとして/etc/emby-server.conf
や/usr/lib/systemd/system/emby-server.service
などがインストールされます。前者はEmby Server起動時の環境変数を設定しているだけです。どの値がどのように使われているかは/opt/emby-server/bin/emby-server
の内容やこちらのコメント を参照してください。
Emby Serverを起動するユーザーとしてembyユーザーとembyグループが自動的に作成されます。また、/var/lib/emby
以下にさまざまなメタデータが保存されます。
Emby Serverへのアクセスと設定
まずはウェブブラウザーでアクセスしてみます。標準で使用しているポート番号は8096ですので、ブラウザーのアドレスバーに「http://localhost:8096」と入力してください。「 localhost」の部分はEmby Serverが動いているマシンか、上記手順でポートマッピングしているのならLXDホストのアドレスを指定します。
図2 表示言語の選択。ただし日本語化は作業者募集中の状態
図3 アカウントの作成
Emby上では任意の数のアカウントを作成できます。アカウントごとに表示できるライブラリーを変更することも可能です。
Emby Connect を使えば、複数のメディアサーバーにシングルアカウントでログインすることも可能になります。とりあえずEmbyを使ってみたい場合は、気にしなくていいでしょう。
図4 メディアライブラリーの登録。あとで登録するので今は何もしない
図5 メタデータの言語。主に字幕の選択などに使われる
図6 外部からのアクセスの許可。許可しないとメディアサーバーとしての意味を失う
図7 Privacy policyとTerm of Serviceの確認
図8 初期設定の完了
初期設定が完了すると、サーバーの管理画面が表示されます。
図9 WAN側のIPアドレスも表示されるので注意
起動した状態だと何も再生できないので、適宜メディアライブラリーを追加します。Emby Server上に任意のディレクトリを作成し、そこに再生したいファイルなどを配置します。その後、サーバー設定画面の「Library」から次のように設定します。
図10 「 Add Media Library」を選択
図11 「 Contenty type」を選択し「Display name」を設定した上で「Folders」をクリック
Emby Server上の複数のディレクトリをライブラリーとして登録できます。たとえばNextcloudサーバー上のディレクトリを指定すれば、Nextcloud上にアップロードしたファイルをEmbyから配信することも可能になるのです。
また「Optional Network Paths 」という機能も存在します。クライアントがメディアに直接アクセスできるような状態にある場合(SMB経由でアクセスできるなど)にこのパスを設定しておくと、クライアントはストリーミング再生時にEmbyを介することなく直接アクセスします。
ライブラリーを登録したら、Web UIの左上にあるホームボタンからメディアライブラリーのトップ画面にアクセスしましょう。今回の例だと「/home/ubuntu/Movie」以下にあるファイルが表示されるはずです。
図12 カバーなどはメディアによって適宜調整・表示される
これで無事に配信できるようになりました。試しに何か再生してみると良いでしょう。Chrome/ChromiumであればChromecastに転送することも可能です。
図13 ブラウザー上で再生が可能
Emby Serverへは、スマートフォンからもアクセス可能です。たとえばAndroidアプリ をインストールし、初回起動時にURLを指定するだけで、Emby Serverのコンテンツを閲覧できるようになります。
ただしスマートフォンアプリ上での1分以上の再生は別途アプリ内購入システムにより機能を有効化する必要があります。Chromecastは特に制限はないので、購入しない限りはChromecast専用アプリ程度に思っておけば良いでしょう。たんにスマートフォンでストリーミング再生したいだけであれば、Chromeを立ち上げてそこからアクセスする手もあります[2] 。
トランスコーディング設定
Emby Serverはハードウェアを利用したトランスコーディング にも実験的ではあるものの対応しています。第532回 ではLXDの中でVAAPIを使う方法を紹介しました。そこで、Emby ServerのLXDコンテナにもGPUを見せることで、VAAPIを利用したトランスコーディングに対応させてみましょう。
$ lxc config device add emby gpu gpu gid=44
デバイス gpu が emby に追加されました
これでGPUがEmby Serverからも見えるようになりました。そして、サーバー設定画面の「Transcoding」から次のように設定します。
図14 トランスコーディングの設定
実際にブラウザーがサポートしていない形式の動画で試してみると良いでしょう。
UPnPの対応
PlayStation 3のようなURL入力画面のないDLNAクライアントからアクセスできるよう、EmbyはUPnP/SSDPにも対応しています。具体的には「239.255.255.250:1900/UDP」へとマルチキャストされた問い合わせに応答したり、「 239.255.255.250:1900」へと自分自身を公告します。
LXDは3.x以降のより新しいバージョンにおいてUDPのポートマッピング(proxyデバイス)をサポートしているものの、Ubuntu 18.04 LTSに標準で提供されているLXD 3.0では未対応です。自分でiptablesなどを記述するという手もありますが、若干面倒です。そこで今回はMACアドレスの異なるネットワークサブインターフェースを作成できるmacvlanを用いて、ホストのネットワークインターフェースにサブインターフェースを追加し、それをコンテナの中で使うことにしましょう。
あらかじめ先ほど作っていたポートマッピングを削除しておきます。
$ lxc config device remove emby port8096
デバイス port8096 が emby から削除されました
次にホストのインターフェース「enp0s31f6」を親に持つサブインターフェースeth1を作成し、それをコンテナの中で見えるようにします。
$ lxc config device add emby eth1 nic name=eth1 nictype=macvlan parent=enp0s31f6
デバイス eth1 が emby に追加されました
最初の「eth1」は追加するデバイスの名前です。自由に付けてかまいません。「 name=eth1」がコンテナの中から見える名前で、「 nictype=macvlan」でインターフェースの種別を指定します。「 parent=enp0s31f6」はmacvlanの場合に親となるインターフェースの名前です。各ホストで異なるため、適切な名前を選択してください。基本的に他のマシンからアクセス可能な一般的なネットワークインターフェースであれば、どれでもかまいません。
これでコンテナ側にeth1が追加されました。
$ lxc exec emby ip addr show eth1
12: eth1@if3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:16:3e:f9:a4:29 brd ff:ff:ff:ff:ff:ff link-netnsid 0
IPアドレスが割り振られていないので、DHCPv4でアドレスを取得するように設定しましょう。最近のUbuntuは「/etc/network/interfaces」ではなく「/etc/netplan」以下を編集して設定します。今回は「/etc/netplan/70-eth1.yaml」を作成し、次のように設定しましょう。
network:
version: 2
ethernets:
eth1:
dhcp4: true
設定結果を適用します。もちろん「netplan try
」で試験的に適用する方法でもかまいません。
$ lxc exec emby netplan apply
$ lxc exec emby ip addr show eth1
12: eth1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:f9:a4:29 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.41/24 brd 192.168.0.255 scope global dynamic eth1
valid_lft 86366sec preferred_lft 86366sec
inet6 fe80::216:3eff:fef9:a429/64 scope link
valid_lft forever preferred_lft forever
無事にIPアドレスが割り振られました。ネットワーク設定が変わった場合、一度Embyを再起動する必要があります。サーバー設定画面のトップページから「Restart」ボタンを押してもいいですし、次のように直接再起動する方法もあります。
$ lxc exec emby systemctl restart emby-server.service
またサーバー設定画面の「DLNA」から「Default user」を設定してください。これを設定しておかないとDLNAクライアントによってはサーバーを見つけられないことがあります。
あとはDLNAクライアントを立ち上げるだけで、自動的にEmby Serverを検出してくれるはずです。