
皆さんは自宅で番組したテレビ番組をどのように再生していますか?普通はHDDレコーダーで番組録画して、HDDレコーダーで再生すると思います。
でも、複数テレビを持っている家庭だと、HDDレコーダーが無い部屋(テレビ)で録画番組を再生したいと思ったことは無いでしょうか?

HDDレコーダーはリビングのテレビに繋がってるんだよね。
リビングのテレビは家族が占有してるし、今日は録画番組を見るのを諦めるしかないなー(自分の部屋でゲームでもしよ)。

高価なDLNA対応機器を購入しないと見れないね。諦めよう(自分の部屋でゲームでもしよ)。
こんな気持ちになった方。自宅サーバを構築しましょう。
そして、自宅サーバでテレビ番組録画とDLNA配信システムを構築しましょう。DLNAの再生機器はPS3/PS4、液晶テレビ、Raspberry pi、Apple TV、Android TV、Fire TV Stick、Kodi等で代用できます!
本記事ではServiioをDockerで構築する方法をご紹介します(Serviioの使い方について解説しません) 。「 Dockerで構築する」というのがミソです。Dockerで構築することによって、サーバ環境を汚さずにDLNAサーバを構築できます。また、将来別サーバに移行する際もカンタンにスイッチできるのでおススメです。
Contents
DLNAとは

Digital Living Network Alliance(略称:DLNA(ディーエルエヌエイ))は、家電、モバイル、およびパーソナルコンピュータ産業における異メーカー間の機器の相互接続を容易にするために2003年6月に結成された非営利業界団体(米国、オレゴン州)であり、同団体が提唱するガイドラインである。結成当初はDigital Home Working Group(略称:DHWG)と名乗っていたが、2004年6月に現在の名称に変更された。
Wikipediaより
要するに、テレビやHDDレコーダー等のAV家電、パソコンやサーバー、NAS、あるいはスマホ / タブレット端末等に保存されているデジタルコンテンツを、異なるメーカー/機器で共有できるようにするためのガイドラインです。DLNAを使えば、ネットワークを通じて音楽・動画・写真を機器を問わず楽しむことができます。
そのため、DLNAサーバを構築することで、サーバ内の録画番組を別の機器(例えば、PS3/PS4、液晶テレビ、Raspberry pi、Apple TV、Android TV、Fire TV Stick、Kodi等)で視聴することが可能になります。
DLNAサーバアプリとしては、Serviio以外にも有名どころとしてPLEXやps3 media serverがあります。
インストール手順

前提
git、dockerおよびdocker-composeがインストールされていることが前提です。
もし、まだインストールしていない場合はこちらを参照してインストールしましょう。
私と同じ環境で構築される場合、構築で躓いた際にサポートできると思います。メモリ8GB以上を選択すればエンコード等しても性能的に問題はないと思います。Windows10マシンですが、私はUbuntuを上書きインストールして自宅サーバを構築しています。
GitHubリポジトリからファイルのクローンを作成
GitHubリポジトリから以下のコマンドでServiio関連の資材をダウンロードします。
1 |
git clone https://github.com/riftbit/docker-serviio |
すると、 docker-serviioというディレクトリができます 。
docker-compose.yml
docker-compose.ymlを作成します。
1 2 |
cd docker-serviio emacs docker-compose.yml |
以下の内容をdocker-compose.ymlファイルにコピー&ペーストします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: '3' services: serviio: build: context: . container_name: my-serviio ports: - "23423:23423/tcp" - "8895:8895/tcp" - "1900:1900/udp" volumes: - ./library:/opt/serviio/library - ./plugins:/opt/serviio/plugins - ./log:/opt/serviio/log - /media/tv_record:/media/tv_record environment: - PUID=1001 - PGID=115 - TZ="Asia/Tokyo" |
オリジナルのdocker-compose.ymlでも良いですが、私は少し修正しています。
volumes
15行目はメディアが格納されているライブラリを指定します。
私の環境では、/media/tv_recordに録画ファイルが格納されています。サーバ環境に合わせて修正してください。
environment
17行目と18行目の環境変数は、コンテナ内での実行ユーザIDとグループIDを指定します。これを設定しないとコンテナ内のrootユーザでのファイルが出来上がるので、ファイルを消す際にてこずります。Dockerを操作するユーザIDとグループIDを確認して指定しておきます。
1 2 3 4 5 |
# PUID確認 id -u # PGID確認 id -g |
19行目はタイムゾーンの設定です。
コンテナ起動
以下のコマンドでコンテナを起動します。
1 |
docker-compose up -d |
1~2分待って、 https://<IPaddress>:23423/console にブラウザでアクセスし、管理画面が表示されれば成功です。
使い方はインターネットでぐぐってもらえればたくさん出てきます。
まとめ

DockerでServiioを構築する方法について紹介しました。録画システムと組み合わせるとLAN内ならいつでもどこでも録画番組が見れるため、非常に便利になります。もちろん、DLNAアプリをインストールすればスマホでも再生可能です。
これでまた便利になりました!
他にもいろいろなサービス導入方法をご紹介しています。よかったら参考にしてください。
コメント
ここの自宅サーバーの情報を元に私が以前より構築したかった環境(EPGStation+VPN+vaapiエンコード+DLNAサーバー)を実現することが出来ました。
分かりやすい情報の提供ありがとうございます。
ところでこのページのdocker-compose.ymlですが、コンテナ起動すると
“neither an image nor a build context specified”
のようなメッセージが表示されました。
image: riftbit/serviio
のような一文がdocker-compose.ymlに必要かと思うので御確認下さい。
また、私の環境だとServiioコンソールにはアクセス出来るけどDLNAサーバーとして動作しなかったので、下記も併せて実施しました。
– docker-compose.ymlに「image: riftbit/serviio」を追加
– Serviioコンソールの状態→ネットワーク設定で実デバイス(eno1)指定
dockerのバージョンは下記です。
– Docker version 20.10.2, build 20.10.2-0ubuntu1~20.04.2
– docker-compose version 1.25.0, build unknown
誰かのお役に立てれば幸いです。
>nukinoさん
ご報告ありがとうございます!
私の記事が参考になって、嬉しく思います。
さて、ご指摘の部分ですが、確認したところdocker-compose.ymlの記載のミスがありましたm_ _m
記事を修正しましたので、もし機会があれば再度お試しくださいませ。
ちなみに、デバイス指定は私の環境では不要でした。
情報提供ありがとうございます:)
たまに記事作成時のコピペミスがあるので、見つけたらコメントして貰えると助かります>_<
こもね様
返信&記事の修正ありがとうございます。
修正されたdocker-compose.ymlで試してみましたが、コンテナ起動しようとしても、そんなbuild pathはないというエラーになります。
DockerのComposeファイル・リファレンスを軽く見た感じ、buildのcontextオプションはDockerfileのパスを指定するぽいので
context : .
と指定しないとダメでした。
(記載のGitHubレポジトリではdocker-compose.ymlとDockerfileは同じ階層に居てるので…)
ただ、上記でやってもServiioコンソールにはアクセス出来るけどDLNAサーバーとして動作しない状況に変化はありませんでした(^^ゞ
そういえば、先の対策は誤記がありまして
– docker-compose.ymlに「network_mode: “host”」を追加
– Serviioコンソールの状態→ネットワーク設定で実デバイス(eno1)指定
です。
ウチの環境ではDockerのブリッジネットワークドライバが上手く動作しない場合があるようです(T.T)
contextはDockerfileの相対パスを記述します。
手元のログだとこれでできてるんですが、リポジトリの構成が変わったのかもしれませんね。
現在のリポジトリの構成に合わせて、docker-compose.ymlの方も修正しておきました。
image指定でも同じ結果なので、お好きな方でどうぞ:)