Android 14対応のテレビボックスを買ってみた

Android 14対応のテレビボックスを買ってみた

これまでオーディオ用のネットワークメディアプレーヤーとして、長くVolumioを使用してきました。Raspberry Pi Zeroと安価なI2S DACの組み合わせですが、音質は耳の遠くなりかけたおっさんには十分すぎるほどです。ただ、Volumio自体が最近ではサブスクリプション型の有料オプションを強く推しており、無料ユーザーとしては少し違和感と居心地の悪さを感じていました。
そこで、Volumioから離れて別のオープンソース系メディアプレーヤーに乗り換えることを検討していたのですが、機材をどうするかを考えたときAndroidテレビボックスが有力な代替候補として気になる存在になりました。最近は安価なテレビボックスでも以前より強力なSoCを搭載したモデルが登場しており、本物のAndroid 14を採用する機種も増えています。そのため、オーディオプレーヤー・メディアプレーヤーとしても十分実用的になってきたと感じています。
従来のAndroidでは48kHz/16bitへの強制リサンプリングがかかり、オーディオ再生には向かないという欠点がありましたが、Android 14以降ではUSB DACのサポートが拡張され、この不可解な強制リサンプリングが回避できるようになりました(※すべてのデバイスで無条件に対応するわけではありません)。これにより、超低価格のAndroidデバイスでもロスレス再生が可能となり、オーディオマニアの方々からも軽視されない存在になりつつあるといえるでしょう。

テレビボックス

今回は、Amlogic製のS905X5MというSoCを搭載したテレビボックスを探しました。Amlogicというと、これまでは低性能チップの代名詞のような印象がありましたが、S905X5およびS905X5Mは従来とは一線を画しています。
特にこの第6世代S9シリーズのSoCは、製造プロセスが6nmでTDPが5Wという省電力設計のため、大掛かりな冷却機構を備えていない安価な小型テレビボックスでも熱による性能低下を起こしにくく、安定した動作が期待できます。
それでいて、同価格帯で採用例の多いAllwinner H616, H618(28nm)と比べると、実に2倍以上の処理性能を誇ります。もちろん、AllwinnerにもH728のようにS905X5やS905X5Mを上回る性能を持つチップがあり、性能に応じた価格で販売されています。しかし、Allwinnerのチップは実際のパフォーマンスがスペックほど出ないことも多く、H728は発熱が大きいため高温時に性能が低下する懸念もあります。
さらに上位にはRockchip RK3588やNVIDIA Tegra X1+などを搭載したAIボックス的な製品も存在しますが、これらは価格がAmlogic S905X5M搭載機の5倍から一桁違います。コストパフォーマンスを重視するなら、2025年後半時点でのベストチョイスはAmlogic S905X5Mだと判断しました。また、この新チップを採用したテレビボックスは比較的新しいモデルが多く、Android 14搭載という条件も満たしやすい点が魅力です。

なお、ハードウエアが良くても安価な中華テレビボックスはビルトインのソフトウエアが期待に及ばないことが多々あります。ただし、AndroidのようなメジャーなOSであればユーザー自身で改善できます。(この点については次回以降)

AliExpress商品画像 12,053円 5,297円
(2025年10月30日 の参考価格)
AliExpressのブラックフライデーセール数週間前の月末にリンクを作成したため、記事掲載時には価格がやや高めに表示されているかもしれません。通常時やセール時には、4GBメモリ・32GBストレージモデルが約5,000円前後まで下がることが多いです。それより大幅に高い場合は、セール前などの一時的な価格調整期間の可能性があるため、少し待ってから購入するのがおすすめです。
なお、「SoCがAmlogic S905X5またはS905X5Mであること」が非常に重要です。Amlogic製チップ搭載のTV-Boxは多数ありますが、S905X5より下位のSoCでは動作が遅く、快適な操作性を期待できません。また、USB DACを使用する場合は、OSがAndroid 14以上であることを必ず確認してください。
最下位のバリアントは大幅に安いですが、2GBメモリでは動作のもたつきが大きいことが予想されるため4GB以上のメモリを搭載したバリアントを購入することをお薦めします。なお、公式にはS905X5Mは4GB、S905X5は8GBまでのサポートとなっています。
このRCA出力付きUSB DACは、購入時にAliExpressで最安の1つでした。リンク作成時はブラックフライデーセールのため見せかけの価格が吊り上がって高めで表示されている可能性があります。通常期では1500円前後の筈です。 USB DACではありますが、使用されているチップなど詳しい情報が一切不明の怪しい製品といえます。

Android 14対応のテレビボックスを買ってみた 1
AliExpressで単品(送料無料)購入しましたが、配送はエスポ便になり、1週間かからず到着しました。最近は配送がエスポ便になることが多いのですが、非常に早く届くので助かります。

Android 14対応のテレビボックスを買ってみた 2
白いビニール袋の中には黒い箱が入っていました。X88 Proシリーズには複数のモデルがありますが、Amlogic S905X5Mを搭載したモデルは「X88 Pro X5M」という名称になります。

Android 14対応のテレビボックスを買ってみた 3
箱の裏面を見ると、やや大きく潰れていましたが、中身には問題なさそうです。ラベルには「RAM: 4G」「ROM: 32G」「OS: Android 14.0」と記載されており、注文内容どおりの仕様でした。

Android 14対応のテレビボックスを買ってみた 4
黒い箱のフタを開けると、左側にテレビボックス本体、右側にアクセサリ類が収められている箱状の仕切りが見えます。

Android 14対応のテレビボックスを買ってみた 5
内容物は写真の通りです。左がテレビボックス本体、中央がリモコン、右手前がACアダプタ(USプラグ)、右奥がHDMIケーブル、そしてマニュアルです。

Android 14対応のテレビボックスを買ってみた 6
テレビボックスの上面には「X88 PRO X5M」と型番が印字されています。全面が樹脂製で、表面仕上げに高級感はありません。

Android 14対応のテレビボックスを買ってみた 7
背面には入出力端子が集中しています。左から順にDC5V電源、SPDIF、HDMI、RJ45 (有線LAN)、コンポジットAV出力です。

Android 14対応のテレビボックスを買ってみた 8
左側面にはUSBポートが2つとmicroSDカードスロットがあります。右側面には何もありません。

Android 14対応のテレビボックスを買ってみた 9
底面には放熱用の穴が空けられています。4つの足はやや柔らかい樹脂素材で、設置面を傷つけにくくなっています。

Android 14対応のテレビボックスを買ってみた 10
テレビボックス本体の重量は106gでした。最近のスマートフォンの半分ほどで、非常に軽量です。実際に手に取ると、空のプラスチックケースのように軽く感じます。

Android 14対応のテレビボックスを買ってみた 11
リモコンの重さは電池なしで46g、電池を入れると69gになります。

Android 14対応のテレビボックスを買ってみた 12
ACアダプタはUSプラグ仕様ですが、日本のコンセントでも抜け落ちにくい爪に穴が開いているタイプです。出力は5V/2A (最大10W)です。

Android 14対応のテレビボックスを買ってみた 13
付属のHDMIケーブルはやや安っぽい作りで、4K非対応でした。このケーブルを使ってテレビボックスを4Kテレビに接続したところ、解像度の設定で1080pまでしか選択できず「4K対応のテレビボックスというのは嘘だったのか?」と思いました。しかし、手持ちの4K対応HDMIケーブルに交換したところ、4K解像度が選択可能になり正常に表示されました。したがって、この付属ケーブルは使用しない方が無難です。

Android 14対応のテレビボックスを買ってみた 14
リモコンは多くのテレビボックスで採用されている汎用品のようです。通常操作に加え、右上のマウスボタンで「選択モード」と「マウスモード」を切り替えられ、白いリング状の方向キーでマウスポインタを移動できます。 ただし、実際の操作感はあまり良くなく、USBマウスを併用した方が快適です。つまり、リモコンは主に選択操作、マウスはポインタ移動用として使い分けるのがおすすめです。
購入時にリモコンの種類を変更できる場合もありますが、写真のものは最も安価なタイプです。

Android 14対応のテレビボックスを買ってみた 15
このリモコンは単4電池2本で動作します。電池は付属していません。

Android 14対応のテレビボックスを買ってみた 16
テレビボックス本体の一辺は約10cmです。

Android 14対応のテレビボックスを買ってみた 17
本体の厚みは18mmで、さらに約4mmの足が飛び出ています。

USB DAC

テレビボックスにはSPDIF(光デジタル出力)があったため、SPDIF対応のDACも同時期に注文しました。しかし、そのDACは普通郵便扱いで第三国経由の発送となったようで、1か月以上経った現在も未着です。
3週間ほど待っても届かなかった時点でしびれを切らせ、改めて購入を検討しましたが、SPDIF DACは評判が良くないため、USB DACを購入することにしました。SPDIF DACは1,000円以下で購入できる点は魅力ですが、オーディオマニアからの評価は低めです。
一方、RCA出力対応のUSB DACは2,000円前後からありますが、一般的には5,000円以上が多い印象です。中華製品では「高級DACチップ搭載」と謳われていても真偽が不明なものが多く、5,000円以上を出すのはためらわれました。
そこで今回は、RCA出力対応で群を抜いて安い(約1500円)ノーブランドUSB DACを購入しました。搭載されているチップの記載は一切ありません。

Android 14対応のテレビボックスを買ってみた 18
今回もエスポ便で届きました。写真ではビニール袋の左上が破れているように見えますが、実際には破れていません。

Android 14対応のテレビボックスを買ってみた 19
袋の中には製品の箱が入っており、今回は潰れもなくきれいな状態でした。

Android 14対応のテレビボックスを買ってみた 20
箱の中には底面に薄いスポンジシートが1枚敷かれているだけで、緩衝材は他にはありませんでした。USBケーブルとDAC本体が透明なビニール袋に入っていました。

Android 14対応のテレビボックスを買ってみた 21
内容物はUSBケーブル(A-B)、USB DAC本体、三つ折りの英語マニュアル1枚です。

Android 14対応のテレビボックスを買ってみた 22
DAC本体の側面には何もありません。シンプルなデザインです。

Android 14対応のテレビボックスを買ってみた 23
このDACは入力がUSB(Type-B)のみで、電源と音声データ入力を兼ねています。写真で見えているSPDIF端子は出力専用です。その右側には同軸のコンポジット出力端子があります。

Android 14対応のテレビボックスを買ってみた 24
反対側にはRCAステレオ出力(左右)と3.5mmヘッドホン出力があります。どのようなヘッドホンアンプが内蔵されているかは不明ですが、どのようなアンプであってもボリュームが無いため使い勝手は良くなさそうです。

使用レポートについては、次回の記事で紹介します。

関連記事:

Jellyfinで作るメディアサーバ

Jellyfinで作るメディアサーバ

がとらぼでは過去にFreeBSDでPlex Media ServerVolumioのライブラリ管理をメディアサーバに任せるの記事でPlex Media Serverを紹介しました。Plex Media Serverは導入が簡単で多くのプラットフォームに対応し、当時としては先進的かつ洗練されたUIを備えた高機能なメディアサーバでした。多くの機能を無料で利用できたことも魅力です。 しかし、Plexがネットアカウントによる集中管理を強化し、有料機能を強く推すようになったことで、次第に不満を感じるユーザーも増えています。 クローズドなネットワーク環境でも利用できるオープンソースのメディアサーバを求める人々の間で注目を集めているのが、今回紹介する Jellyfin です。 Jellyfinは動画に強い構成を持っていますが、音楽専用サーバを探している場合は、LMS(Lyrion Music Server / 旧Logitech Media Server)を選ぶのも良いでしょう。 ただし、「がとらぼ」の中の人は、メディアサーバのWeb UIではなくネットワークメディアプレーヤーで利用する方針のため、LMSの強みである音楽ライブラリとの親和性を重視せず、今回はJellyfinを導入することにしました。

インストールの事前準備

Jellyfinの導入は非常に簡単です。特にLinux系OSでは、コマンド1行で完了します。
今回はシングルボードコンピュータ「Orange Pi Zero 3」に、Armbian(Debianベース)のイメージを焼いたmicroSDカードを使用しました。rootアカウント(初期パスワード1234)でSSHログインし、まずはネットワーク設定だけを行います。ネットワーク設定のデフォルトはDHCPですが、メディアサーバはIPアドレスを固定しておくのが望ましいためです。
最近のDebian系ではネットワークをnetplanで設定しますが、Armbianではarmbian-configを使えば簡単にネットワーク設定を行うことも可能です。armbian-configを使っても実際のネットワーク設定はnetplanでなので/etc/netplan下に設定が作られます。ただし、armbian-configではIPv6設定ができない場合があり、設定項目にIPv6がない場合はnetplan用の設定ファイルを直接修正・作成する必要があります。IPv4の設定だけarmbian-configで行い、作成された/etc/netplan下の設定ファイルにIPv6の設定を追加するのが簡単です。

事前準備として、動画や音楽ファイルを保存するストレージを用意しておく必要があります。シングルボードコンピュータの場合はUSBメモリやUSB接続のSSD/HDDが一般的です。PCであれば既存の内蔵ストレージを利用し、メディア用のディレクトリを決めておけば十分でしょう。
今回は、USBメモリをシングルボードコンピュータに接続し、メディアファイルの保存先として使用することにしました。

USBメモリを自動的にマウントする方法はいくつかありますが、今回はUSBメモリのデバイスUUIDを指定してマウントする方法を採用します。

まず、USBメモリのUUIDを確認します。ここでは、USBメモリが /dev/sda として認識されているものとします。もし認識デバイスが不明な場合は、USBメモリを接続した後に dmesg コマンドを実行し、最後の数行を確認します。そこで /dev/sda や /dev/sdb、/dev/sdc といったデバイス名が表示されていれば、それ(sdb, sdc)が対象のデバイスです。

# ls -al /dev/disk/by-uuid/ | grep sda
lrwxrwxrwx 1 root root  10 Oct  9 20:59 35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a -> ../../sda1

この例では、35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a が目的のディスクUUIDです。
※この文字列はデバイスごとに異なります。この記事に記載された値をコピーして使用しないでください。

次に、USBメモリのマウント先ディレクトリを作成します。パスは任意ですが、ここでは /mnt/media とします。

# mkdir /mnt/media
エディタで/etc/fstabを編集
# vim /etc/fstab

(次の1行を追加)
UUID=35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a /mnt/media ext4 defaults 0 0

設定が完了しても、/etc/fstabへの変更は即時反映されません。通常はシステム再起動後に有効になります。
システムを再起動せずに、すぐにマウントを反映させたい場合は、以下のコマンドを実行します。

# systemctl daemon-reload
# sudo mount -a

これでUSBメモリがマウントされました。/etc/fstabに設定したため、次回以降の再起動時も自動的にマウントされます。

Jellyfinのインストール

Jellyfinの公式インストールドキュメントに従って手順を進めれば、問題なく導入できます。スクリプト実行時に多くのファイルをインターネットからダウンロードするため、ネット接続は必須です。

インストールスクリプトはシステムのOSやCPUアーキテクチャを自動判別し、最適なファイルやパッケージを導入します。
ただし、2025年10月現在、Debian 13(Trixie)ではCPUアーキテクチャに関係なくJellyfinが正常に起動しない不具合が報告されています。
Orange Pi Zero 3(arm64環境)でもTrixie上では起動できず、Debian 12(Bookworm)を使用したところ正常に動作しました。

以下は、Bookworm環境での実行例です。
なお、rootユーザーで実行していますが、コマンドにsudoが含まれているため、rootでなくても問題ありません。

    _             _    _                             __  __ _    _      _
   /_\  _ _ _ __ | |__(_)__ _ _ _ ___ _  _ _ _  ___ / _|/ _(_)__(_)__ _| |
  / _ \| '_| '  \| '_ \ / _` | ' \___| || | ' \/ _ \  _|  _| / _| / _` | |
 /_/ \_\_| |_|_|_|_.__/_\__,_|_||_|   \_,_|_||_\___/_| |_| |_\__|_\__,_|_|

 v25.11 rolling for Orange Pi Zero3 running Armbian Linux 6.12.47-current-sunxi64

 Packages:     Debian stable (bookworm), possible distro upgrade (trixie)
 Updates:      Kernel upgrade enabled and 3 packages available for upgrade
 Support:      DIY (custom image)
 IPv4:         (LAN) 192.168.11.64 (WAN) 255.255.255.256
 IPv6:         20zz:zzz:zzz:zzz:yyyy:yyyy:yyyy:yyyy

 Performance:

 Load:         14%               Uptime:       4 min
 Memory usage: 16% of 971M
 CPU temp:     44°C              Usage of /:   7% of 29G
 RX today:     17 KiB
 Commands:

 Configuration : armbian-config
 Upgrade       : armbian-upgrade
 Monitoring    : htop


root@orangepizero3:~# curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0> Determining optimal repository settings.
100 10841  100 10841    0     0  10602      0  0:00:01  0:00:01 --:--:-- 10618

Found the following details from '/etc/os-release':
  Real OS:            debian
  Repository OS:      debian
  Repository Release: bookworm
  CPU Architecture:   arm64
If this looks correct, press <Enter> now to continue installing Jellyfin.

> Fetching repository signing key.

> Installing Jellyfin repository into APT.
Types: deb
URIs: https://repo.jellyfin.org/debian
Suites: bookworm
Components: main
Architectures: arm64
Signed-By: /etc/apt/keyrings/jellyfin.gpg

> Updating APT repositories.
Hit:1 http://security.debian.org bookworm-security InRelease
Hit:2 http://deb.debian.org/debian bookworm InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Hit:4 http://deb.debian.org/debian bookworm-backports InRelease
Hit:5 https://github.armbian.com/configng stable InRelease
Get:7 https://repo.jellyfin.org/debian bookworm InRelease [10.6 kB]
Get:8 https://repo.jellyfin.org/debian bookworm/main arm64 Packages [5,056 B]
Hit:6 http://mirrors.bfsu.edu.cn/armbian bookworm InRelease
Fetched 15.7 kB in 3s (4,567 B/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

> Installing Jellyfin.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1 libogg0
  libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libwebp7
  libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
Suggested packages:
  libbluray-bdj opus-tools opencl-icd
Recommended packages:
  libaacs0
The following NEW packages will be installed:
  jellyfin jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1
  libogg0 libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7
  libwebp7 libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded.
Need to get 106 MB of archives.
After this operation, 324 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 libudfread0 arm64 1.1.2-1 [15.7 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libicu72 arm64 72.1-3+deb12u1 [9,202 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 libxml2 arm64 2.9.14+dfsg-1.3~deb12u4 [620 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 libbluray2 arm64 1:1.3.4-1 [124 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 libmp3lame0 arm64 3.100-6 [357 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 libmpg123-0 arm64 1.31.2-1+deb12u1 [141 kB]
Get:7 http://deb.debian.org/debian bookworm/main arm64 libogg0 arm64 1.3.5-3 [23.0 kB]
Get:8 http://deb.debian.org/debian bookworm/main arm64 libvorbis0a arm64 1.3.7-1 [86.2 kB]
Get:9 http://deb.debian.org/debian bookworm/main arm64 libvorbisfile3 arm64 1.3.7-1 [25.4 kB]
Get:10 http://deb.debian.org/debian bookworm/main arm64 libopenmpt0 arm64 0.6.9-1 [622 kB]
Get:11 http://deb.debian.org/debian bookworm/main arm64 libopus0 arm64 1.3.1-3 [176 kB]
Get:12 http://deb.debian.org/debian bookworm/main arm64 libtheora0 arm64 1.1.1+dfsg.1-16.1+deb12u1 [144 kB]
Get:13 http://deb.debian.org/debian bookworm/main arm64 libvorbisenc2 arm64 1.3.7-1 [80.4 kB]
Get:14 http://deb.debian.org/debian bookworm/main arm64 libvpx7 arm64 1.12.0-1+deb12u4 [892 kB]
Get:15 http://deb.debian.org/debian bookworm/main arm64 libwebp7 arm64 1.2.4-0.2+deb12u1 [260 kB]
Get:16 http://deb.debian.org/debian bookworm/main arm64 libwebpmux3 arm64 1.2.4-0.2+deb12u1 [109 kB]
Get:17 http://deb.debian.org/debian bookworm/main arm64 libx264-164 arm64 2:0.164.3095+gitbaee400-3 [443 kB]
Get:18 http://deb.debian.org/debian bookworm/main arm64 libnuma1 arm64 2.0.16-1 [20.3 kB]
Get:19 http://deb.debian.org/debian bookworm/main arm64 libx265-199 arm64 3.5-2+b1 [603 kB]
Get:20 http://deb.debian.org/debian bookworm/main arm64 libzvbi-common all 0.2.41-1 [69.7 kB]
Get:21 http://deb.debian.org/debian bookworm/main arm64 libzvbi0 arm64 0.2.41-1 [258 kB]
Get:22 http://deb.debian.org/debian bookworm/main arm64 ocl-icd-libopencl1 arm64 2.3.1-1 [42.1 kB]
Get:23 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-server arm64 10.10.7+deb12 [43.3 MB]
Get:24 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-web all 10.10.7+deb12 [32.8 MB]
Get:25 https://sgp1.mirror.jellyfin.org/files/debian bookworm/main arm64 jellyfin-ffmpeg7 arm64 7.1.2-2-bookworm [15.4 MB]
Get:26 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin all 10.10.7+deb12 [2,434 B]
Fetched 106 MB in 32s (3,327 kB/s)
Selecting previously unselected package jellyfin-server.
(Reading database ... 39006 files and directories currently installed.)
Preparing to unpack .../00-jellyfin-server_10.10.7+deb12_arm64.deb ...
Unpacking jellyfin-server (10.10.7+deb12) ...
Selecting previously unselected package jellyfin-web.
Preparing to unpack .../01-jellyfin-web_10.10.7+deb12_all.deb ...
Unpacking jellyfin-web (10.10.7+deb12) ...
Selecting previously unselected package libudfread0:arm64.
Preparing to unpack .../02-libudfread0_1.1.2-1_arm64.deb ...
Unpacking libudfread0:arm64 (1.1.2-1) ...
Selecting previously unselected package libicu72:arm64.
Preparing to unpack .../03-libicu72_72.1-3+deb12u1_arm64.deb ...
Unpacking libicu72:arm64 (72.1-3+deb12u1) ...
Selecting previously unselected package libxml2:arm64.
Preparing to unpack .../04-libxml2_2.9.14+dfsg-1.3~deb12u4_arm64.deb ...
Unpacking libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Selecting previously unselected package libbluray2:arm64.
Preparing to unpack .../05-libbluray2_1%3a1.3.4-1_arm64.deb ...
Unpacking libbluray2:arm64 (1:1.3.4-1) ...
Selecting previously unselected package libmp3lame0:arm64.
Preparing to unpack .../06-libmp3lame0_3.100-6_arm64.deb ...
Unpacking libmp3lame0:arm64 (3.100-6) ...
Selecting previously unselected package libmpg123-0:arm64.
Preparing to unpack .../07-libmpg123-0_1.31.2-1+deb12u1_arm64.deb ...
Unpacking libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Selecting previously unselected package libogg0:arm64.
Preparing to unpack .../08-libogg0_1.3.5-3_arm64.deb ...
Unpacking libogg0:arm64 (1.3.5-3) ...
Selecting previously unselected package libvorbis0a:arm64.
Preparing to unpack .../09-libvorbis0a_1.3.7-1_arm64.deb ...
Unpacking libvorbis0a:arm64 (1.3.7-1) ...
Selecting previously unselected package libvorbisfile3:arm64.
Preparing to unpack .../10-libvorbisfile3_1.3.7-1_arm64.deb ...
Unpacking libvorbisfile3:arm64 (1.3.7-1) ...
Selecting previously unselected package libopenmpt0:arm64.
Preparing to unpack .../11-libopenmpt0_0.6.9-1_arm64.deb ...
Unpacking libopenmpt0:arm64 (0.6.9-1) ...
Selecting previously unselected package libopus0:arm64.
Preparing to unpack .../12-libopus0_1.3.1-3_arm64.deb ...
Unpacking libopus0:arm64 (1.3.1-3) ...
Selecting previously unselected package libtheora0:arm64.
Preparing to unpack .../13-libtheora0_1.1.1+dfsg.1-16.1+deb12u1_arm64.deb ...
Unpacking libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Selecting previously unselected package libvorbisenc2:arm64.
Preparing to unpack .../14-libvorbisenc2_1.3.7-1_arm64.deb ...
Unpacking libvorbisenc2:arm64 (1.3.7-1) ...
Selecting previously unselected package libvpx7:arm64.
Preparing to unpack .../15-libvpx7_1.12.0-1+deb12u4_arm64.deb ...
Unpacking libvpx7:arm64 (1.12.0-1+deb12u4) ...
Selecting previously unselected package libwebp7:arm64.
Preparing to unpack .../16-libwebp7_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libwebpmux3:arm64.
Preparing to unpack .../17-libwebpmux3_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libx264-164:arm64.
Preparing to unpack .../18-libx264-164_2%3a0.164.3095+gitbaee400-3_arm64.deb ...
Unpacking libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Selecting previously unselected package libnuma1:arm64.
Preparing to unpack .../19-libnuma1_2.0.16-1_arm64.deb ...
Unpacking libnuma1:arm64 (2.0.16-1) ...
Selecting previously unselected package libx265-199:arm64.
Preparing to unpack .../20-libx265-199_3.5-2+b1_arm64.deb ...
Unpacking libx265-199:arm64 (3.5-2+b1) ...
Selecting previously unselected package libzvbi-common.
Preparing to unpack .../21-libzvbi-common_0.2.41-1_all.deb ...
Unpacking libzvbi-common (0.2.41-1) ...
Selecting previously unselected package libzvbi0:arm64.
Preparing to unpack .../22-libzvbi0_0.2.41-1_arm64.deb ...
Unpacking libzvbi0:arm64 (0.2.41-1) ...
Selecting previously unselected package ocl-icd-libopencl1:arm64.
Preparing to unpack .../23-ocl-icd-libopencl1_2.3.1-1_arm64.deb ...
Unpacking ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Selecting previously unselected package jellyfin-ffmpeg7.
Preparing to unpack .../24-jellyfin-ffmpeg7_7.1.2-2-bookworm_arm64.deb ...
Unpacking jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Selecting previously unselected package jellyfin.
Preparing to unpack .../25-jellyfin_10.10.7+deb12_all.deb ...
Unpacking jellyfin (10.10.7+deb12) ...
Setting up libudfread0:arm64 (1.1.2-1) ...
Setting up jellyfin-web (10.10.7+deb12) ...
Setting up libicu72:arm64 (72.1-3+deb12u1) ...
Setting up libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Setting up libogg0:arm64 (1.3.5-3) ...
Setting up libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Setting up jellyfin-server (10.10.7+deb12) ...
Created symlink /etc/systemd/system/multi-user.target.wants/jellyfin.service → /lib/systemd/system/jellyfin.service.
Setting up libopus0:arm64 (1.3.1-3) ...
Setting up libvorbis0a:arm64 (1.3.7-1) ...
Setting up libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libnuma1:arm64 (2.0.16-1) ...
Setting up ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Setting up libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Setting up libvpx7:arm64 (1.12.0-1+deb12u4) ...
Setting up libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Setting up libzvbi-common (0.2.41-1) ...
Setting up libmp3lame0:arm64 (3.100-6) ...
Setting up libvorbisenc2:arm64 (1.3.7-1) ...
Setting up libzvbi0:arm64 (0.2.41-1) ...
Setting up libvorbisfile3:arm64 (1.3.7-1) ...
Setting up libx265-199:arm64 (3.5-2+b1) ...
Setting up libbluray2:arm64 (1:1.3.4-1) ...
Setting up libopenmpt0:arm64 (0.6.9-1) ...
Setting up jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Setting up jellyfin (10.10.7+deb12) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u13) ...

> Waiting 15 seconds for Jellyfin to fully start up.

-------------------------------------------------------------------------------
● jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             └─jellyfin.service.conf
     Active: active (running) since Thu 2025-10-09 21:35:13 JST; 26s ago
   Main PID: 3951 (jellyfin)
      Tasks: 35 (limit: 982)
     Memory: 134.9M
        CPU: 34.836s
     CGroup: /system.slice/jellyfin.service
             ├─3951 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg
             └─4043 /usr/lib/jellyfin-ffmpeg/ffmpeg -hide_banner -f lavfi -i nullsrc=s=1x1:d=10000 -f null -

Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vaapi with option Action t…ilable
Oct 09 21:35:36 orangepizero3 mpp[4039]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vulkan with option Action …ilable
Oct 09 21:35:36 orangepizero3 mpp[4040]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 mpp[4041]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [INF] Available hwaccel types: ["cuda", "drm", "…kmpp"]
Oct 09 21:35:36 orangepizero3 mpp[4042]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:37 orangepizero3 mpp[4043]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean Transcode Directory Completed after …econds
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean up collections and playlists Complet…econds
Hint: Some lines were ellipsized, use -l to show in full.
-------------------------------------------------------------------------------

You should see the service as 'active (running)' above. If not, use https://jellyfin.org/contact to find us for troubleshooting.

You can access your new instance now at http://192.168.11.64:8096 in your web browser to finish setting up Jellyfin.

Thank you for installing Jellyfin, and happy watching!

インストールには少し時間がかかりますが、必要なパッケージの導入からサービス登録・起動まで自動で行われます。本当にコマンド1行の実行で完了しました。
表示される内容の内、必ず確認しておくべきものは黄色にしています。 実行結果の最後にブラウザでアクセスするためのURLが表示されるのでそれをコピペでブラウザを開きます。192.168.11.64:8096は「がとらぼ」のLAN環境での例なのでこのままコピーしないでください。

Jellyfinの設定

Jellyfinの設定はWebブラウザから行います。
ブラウザで http://JellyfinのホストIPアドレス:8096 を開きます。初期設定時だけでなく、今後アクセスする際も常にポート「8096」を指定する必要がある点に注意してください。

Jellyfinで作るメディアサーバ 1
初回アクセス時には初期設定ウィザードが表示されます。このウィザードで行う設定は、後からいつでも変更可能です。 最初に表示されるのは言語選択画面ですが、ブラウザの言語設定により自動的に日本語表示になっているため、ここでは確認程度の選択なのかもしれません。選択欄の初期値は英語なので「日本語」を選択し、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 2
続いて、最初のユーザー登録を行います。このユーザーが管理者となります。初期値は「jellyfin」ですが、任意のユーザー名に変更可能です。パスワードを2回入力し、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 3
メディアライブラリ(動画や音楽ファイルの保存場所)を1つ以上登録します。SSHなどでホストにアクセスし、USBメモリ上のディレクトリを作成してから、そのディレクトリを選択します。

Jellyfinで作るメディアサーバ 4
メディアライブラリの追加・設定画面です。Jellyfinではコンテンツタイプの指定が非常に重要です。 「音楽」を選ぶ場合は、公式のディレクトリ構成と命名規則に従う必要があります。これまで利用していたメディアサーバでは求められなかったルールなので、最初は少し戸惑います。
なお、コンテンツタイプには「映画」「(TV)番組」「ブック」(電子書籍・オーディオブック)などもあり、それぞれ独自の命名規則があります。
「がとらぼ」の中の人はこの規則が少々面倒に感じたため、命名規則が不要な「ミュージックビデオ」にするか、あるいはメタデータ取得を気にせず「音楽」として設定する予定です。

Jellyfinで作るメディアサーバ 5
Jellyfinでは複数のライブラリを作成できます。異なるコンテンツタイプごとに分けたり、同じタイプでも複数に分割することも可能です。ライブラリが大きくなりすぎるとスキャンや更新に時間がかかるため、分割管理できるのは利点です。

Jellyfinで作るメディアサーバ 6
ライブラリごとにメタデータの言語を設定できます。日本語文字コード(S-JIS, EUC, UTF-8)の扱いが完全に自動かどうかは不明ですが、日本語メタデータの扱いにも一定の対応があるようです。

Jellyfinで作るメディアサーバ 7
リモートアクセスの設定は特に変更せず、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 8
これで初期設定は完了です。「完了」をクリックします。

Jellyfinで作るメディアサーバ 9
ログイン画面が表示されます。
先ほど登録したアカウント情報でサインインします。家庭内LANのみで使用する場合は「ログイン状態を保存する」にチェックを入れておくと便利です。 ただし、ネットワークメディアプレーヤー経由で利用する場合は、頻繁にログインする機会はないため、どちらでも問題ありません。

Jellyfinで作るメディアサーバ 10
ダッシュボードのメイン画面です。「マイメディア」に登録済みのライブラリが表示され、「・・に最近追加された」には新しく登録されたフォルダが並びます。ただし、この欄の表示期間や件数の仕様は不明です。この時点で20フォルダ以上登録(ライブラリのスキャンも)していても、3つしか表示されませんでした。(後に15以上表示されました)
画面左上のハンバーガーメニュー「」をクリックするとメニューが開きます。

Jellyfinで作るメディアサーバ 11
メニュー表示時の画面です。主に利用するのは「ダッシュボード」と「設定」です。初期設定で思い通りにいかなかった項目の修正・追加・削除はこの2つで行います。特に「ダッシュボード」はメディアサーバの管理操作で使用する重要な項目です。(次)

Jellyfinで作るメディアサーバ 12
ダッシュボードでは、ライブラリの追加・削除後にスキャンを実行する際によく利用します。
個別ライブラリの更新は、「ダッシュボード」内の「ライブラリ」メニューから対象を選択して行います。
また意外なことに、「プラグイン」は「設定」ではなくこの「ダッシュボード」にあります。導入済みプラグインの管理は「プラグイン」から、新規追加は「カタログ」から行います。機能拡張系のプラグインがもう少し増えるとより魅力的になるでしょう。

Jellyfinで作るメディアサーバ 13
ここからは設定画面ではなく、再生用のライブラリ表示画面です。つまり、WebブラウザでJellyfinをメディアプレーヤーとして利用する際の画面です。動作確認目的として使う場面が多いでしょう。
以下は、コンテンツタイプ「ミュージックビデオ」のライブラリを表示した例です。フォルダ内の動画から自動生成されたサムネイルが表示され、それぞれをクリックすると中身が表示されます。(次)

Jellyfinで作るメディアサーバ 14
選択したフォルダ内にある楽曲やビデオファイルの一覧が表示されます。

Jellyfinで作るメディアサーバ 15
「ミュージックビデオ」の場合、ファイルを選択すると再生画面に切り替わります。(次)
「音楽」の場合は、フォルダを開いた時点でこの画面に似た楽曲リストが表示されます。

Jellyfinで作るメディアサーバ 16
個別のビデオ・楽曲の再生画面です。あくまでJellyfinのWeb UI上での再生であり、音声や映像が出力されるのはブラウザを操作しているPCやモバイルデバイス側です。
ネットワークメディアプレーヤーで再生する場合、このWeb画面の操作とネットワーク・メディアプレーヤーの動作は連動しないので注意が必要です。

Plex Media Serverに比べてやや癖はありますが、クローズド環境で使える高機能なメディアサーバがきわめて簡単に導入できました。Web UIの見た目は地味ですが、これはあくまで管理操作用なので大きな問題ではありません。
次回以降は、このメディアサーバと組み合わせて使用する新しいネットワークメディアプレーヤーを紹介する予定です。
実際には、先にネットワークメディアプレーヤーをVolumioから別のものに変更したことがきっかけで新しいメディアサーバ(今回のJellyfin)を導入したため、順序としては逆になります。 また、Jellyfin導入前にNAS+DLNAサーバの「openmediavault」も試したので、機会があればそちらの紹介も行いたいと思います。(ただしomvの記事は掲載しないかもしれません)

2025年11月16日追記:
Jellyfin 10.11.*からサービス起動時に特定のディレクトリの容量チェックが入るようになり、容量が想定に満たない場合はサービスが起動しなくなっています。/tmp (シングルボードコンピュータ用Debianはメモリディスクであることが多いです)と、 /var/log/jellyfin (シングルボードコンピュータ用Debianでは /var/log がzramのようなメモリディスク等で低容量であることが多いです)と /var/lib/jellyfin (これはあまり問題にならないかと思われます)
/tmp はtmpfsで割り当てられているでしょうから容量を4GB以上に変更します。 /var/log は容量が少なくても、 /var/log/jellyfin は容量の多いファイルシステムのディレクトリにシンボリックリンクで対応可能です。

Up