仕様

JpsonicのDLNA機能(v109.1.0)

JpsonicではDLNAの日本語索引/ソート/フレーズ検索/音声入力経由の検索をサポートしています。

Sonic系サーバのWeb画面ではDLNAと表記されていますが、正確にはUPnPです。

JpsonicのDLNAについて

純DNLAの記事を検索していてこの記事に流れ着いた方や、Subsonicを知らない若い方向けに簡単に説明します。

Subsonicとは
Subsonicとは老舗のミュージックストリーミングサーバの一つです。
このカテゴリではPlexやKodiも有名です。

ローカルの楽曲管理から次第にネットワーク移行したサーバと異なり、Subsonicは当初からWANでの使用を想定されていました。
そのため外部から接続し楽曲情報を操作するための仕様が早期から成熟し普及していたという特徴があります。

外部接続のための通信仕様がきっちり設計されているということは、内部も相応の設計がされているということです。
そのため設計に一貫性があり、機能の追加や改変が行いやすいというメリットがあります。
また汎用/動画向けサーバと異なり、もっともデータ構造が複雑な楽曲管理にフォーカスされたメタ処理設計がされています。

これらのメリットを活かして日本語特化処理を追加したのがJpsonicです。
Subsonicは汎用性が高い設計をしているため、海外には派生サーバがたくさんあります。

一方PlexやKodiとは異なり、SubsonicのDLNA機能はどちらかというと後付けで、おまけ程度の品質です。

JpsonicのDLNA機能は、SubsonicのDLNA機能を再構成しブラウジング性能を大幅拡張したものです。
既にSubsonicアプリよりもDLNAクライアントを利用した方が便利な機能編成になっています。

  • 豊富な表示項目。オプションで個別にON/OFF可能なため、ユーザの求める使用感に合わせた表示が可能
  • 索引/ソート/検索が日本語用に書き換えてあり、日本の音楽を整理するのであれば世界最強
  • プレイリストやポッドキャストといった機能もDLNAから利用可能
  • ミュージックフォルダ単位で公開するディレクトリを指定可能
  • Subsonicよりも高速。DLNAサーバは小型低機能という傾向のものが多いがJpsonicは日本語処理を行ってなお速い

Subsonicをご存知の方の視点では、JpsonicのDLNA部分は元と違うものが追加されている、というイメージが近いです。

設定・仕様の概要

DLNAの設定は「設定 > DLNA」のページで行います。

設定は以下の4つのグループに分けられます。

  • DLNAの基本設定
  • 表示する項目
  • 表示のオプション
  • アクセス制御

DLNAの基本設定

DLNAの基本設定を行います。
この項目はAirsonicと同じ設定項目です。

DLNA サーバを有効にする DLNA サーバを使用する場合ONにします。ルータ上でONにしないでください。
メディアサーバ名 クライアントに表示される任意のサーバ名
LAN サーバアドレス クライアントがJpsonicにリソースアクセスするためのURL
LAN サーバアドレスについて
簡単に言えば、ブラウザからアクセスするときのURLの頭を入力すればOKです。

Sonic系サーバはDLNAサーバとして稼働可能ですが、サーバがネットワーク上のどこで稼働しているかを意識する必要があります。
間にプロクシやエイリアスが挟まれることが多いサーバであるためです。

Sonic系サーバ自身は外部からどのようなURLでアクセスされるかわかりません。
ですので、インターフェースになっているLAN サーバアドレスを指定します。
(DLNAサーバでは珍しいですが、大抵のWeb系サーバにはこの項目があります)
サーバが見えるのにカバーアートが見えないような場合、LAN サーバアドレスの指定が誤っている可能性があります。

ポートについて

DLNA起動ポートオプションを変更可能です。

ポートの競合が起こる場合、ファイアウォールの設定と合わせる場合、Dockerでエクスポートする際などに使用します。
逆に言うと、動作確認をする場合はファイアウォールをオフにしJpsonicは特に何も設定せず単体起動するのがシンプルです。

このサイトではDocker上の使用手順をサポートしていませんが、以下の記事が参考になるかもしれません。

表示する項目

クライアントからブラウジングする際に、どの表示項目を使用するか設定します。

いくつかの項目は、表示名が共通となっています。これはそのうちいずれかを使用することを想定しているためです。表示名は共通ですが、動作を比較して確認するため同時表示が可能です。

使用時に必要なものをロードします。使用しないものをオフにすると、トップ階層の表示やリフレッシュが早くなります。

表示項目の概要

様々なニーズに対応するため、このような設定がなく分類をフォルダでまとめているサーバもあります。
確かに初期設定は楽です。

しかしそのような表示の仕方をしてしまうと「階層が増える」というデメリットがあります。
またどれだけ多機能であっても自分が使うものがそのうち数種の場合かえって使いづらくなります。

昔と違いスマホからの閲覧というニーズが大きくなっているため、古典的な表示方法では対応しきれない可能性があります。
そのため分類を統合してフォルダ化するようなことはなく、単機能の項目を徐々に後付けしていくという方法をとります。
既に実装されたものについて後から仕様が変わるということはありません。

項目名 概要
索引 Web画面の索引と同じ、索引/アーティスト/アルバム/楽曲の4階層表示。
全てのミュージックフォルダを統合して作成したファイルベースの英/日索引
索引(ID3) Web画面の索引とは異なりID3タグで索引とツリー構造を作成。
フォルダ ミュージックフォルダ毎のエクスプローラ風のフォルダ表示
ミュージックフォルダが一つしかない場合、アーティスト階層から表示
ミュージックフォルダが複数の場合、ミュージックフォルダ階層から表示
アルバムアーティスト(フォルダ別) ID3タグのアルバムアーティスト名の一覧。
ミュージックフォルダ/アーティスト/アルバム/楽曲の4階層表示。
アルバムアーティスト(ID3) ID3タグのアルバムアーティスト名の一覧。
アーティスト/アルバム/楽曲の3階層表示。
アルバム(ID3) ID3タグのアルバム名の一覧。アルバム/楽曲の2階層表示。
プレイリスト ユーザが任意に作成したプレイリスト。編集はWeb画面、Subosonicクライアントアプリ、インポートで行う。プレイリスト/楽曲の2階層表示。
ジャンル / アルバム ID3タグのジャンル一覧と、そのタグに関連付けられたアルバム
(アルバムの最初の子楽曲のジャンルが採用される。Sonic系サーバの仕様)
ジャンル/アルバム/楽曲の3階層表示。
ジャンル / 楽曲 ID3タグのジャンル一覧と、そのタグに関連付けられた楽曲。
ジャンル/楽曲の2階層表示。
最近追加されたアルバム スキャンされた順にアルバムを列挙。アルバム/楽曲の2階層表示。
最近タグ変更されたアルバム(ID3) タグ編集された順にアルバムを列挙。アルバム/楽曲の2階層表示。
ランダムリスト (楽曲すべて) 楽曲を50件ランダム表示(クライアントはリフレッシュ機能が必須)
動画、ポッドキャスト、オーディオブックは除外され楽曲のみ
項目名直下に楽曲を1階層表示。
ランダムリスト (アルバム別) アルバムを50件ランダム表示(クライアントはリフレッシュ機能が必須)
アルバム/楽曲の2階層表示。
ランダムリスト(アーティスト別) 一階層目がID3のアルバムアーティスト一覧、二階層目はアルバムアーティストに対応したランダムリスト(クライアントはリフレッシュ機能が必須)
動画、ポッドキャスト、オーディオブックは除外され楽曲のみ
ランダムリスト (ミュージックフォルダ/アーティスト別) 一階層目がミュージックフォルダから開始される。その他はランダムリスト(アーティスト別)と同じ仕様
ポッドキャスト Web画面でユーザが任意に登録したポッドキャスト。チャンネル/エピソードの2階層表示。
その他の情報
  • もし一つしか選択されていない場合、最初から展開された状態で表示します。例えばアルバムアーティストのみが使用可能に設定されている場合、トップ階層に直接アーティストの一覧が表示されます。
  • 索引のカスタマイズが可能です
  • ソートと索引の仕様にあるように、ソート順が変更可能な項目があります。
  • ランダムリストでデータ重複が発生することはありません。アルゴリズムはプラットフォームに依存しますが、Linuxサーバであれば/dev/randomからシードを取得し/dev/urandomで乱数を生成します。クライアントアプリでシャッフルするよりもいわゆる「バラける」結果になります。
  • 索引は最長2分キャッシュされます。スキャン、メディアフォルダーのアクセス許可の変更、音楽フォルダーの設定の変更後は、自動的にクリアされます。
  • 楽曲管理における「ファイル構造」と「タグ」の概念が曖昧な場合画面の表示仕様の概要という参考資料があります

表示のオプション

ジャンルの件数を表示 「guestユーザーで公開する音楽フォルダを設定する」がOFFの場合には、ジャンルごとの件数を表示可能です。リアルタイムのカウントではなく、あらかじめ収集した統計情報を利用するためです。
ランダムリストの最大サイズ ランダムリスト系の表示項目の最大サイズを指定することができます。デフォルトでは50件で、9999件まで指定が可能です。

アクセス制御

「guest」ユーザーで公開する音楽フォルダを設定することが可能です。
guestユーザーはadminと同じ予約アカウントの一つで、必要時に自動生成されます。
設定 > ユーザ の画面の「ユーザを選択」という項目でguestを指定し、使用する音楽フォルダをクリックし保存します。

プレイリストのアクセス制御に関する注意点

デフォルトではサーバ上のすべてのプレイリストが閲覧可能です。
guestユーザーによるフォルダ制御をONにした場合には、他者に公開されているプレイリストのみ閲覧可能になります。

SubsonicアプリやのWeb画面で使用するプレイリストと、DLNA経由のプレイリストでは権限の仕様に違いがあります。

Web画面/REST(スマホ)のプレイリスト ユーザが視聴可能な楽曲のみにアクセス可能です。例を上げると以下のような動きです。

  • アカウントAが、ミュージックフォルダAに対してアクセス可能
  • アカウントBが、ミュージックフォルダAとミュージックフォルダBに対してアクセス可能
  • アカウントBが、ミュージックフォルダAとミュージックフォルダBに存在する楽曲が混在したプレイリストを作成して公開
  • アカウントAはプレイリストの内容は全て閲覧可能だが、ミュージックフォルダBに存在する楽曲は再生できない
DLNAのプレイリスト 公開されているプレイリストに含まれる楽曲はどのクライアントからでも全てアクセスが可能です。

これはDLNAのリソースアクセスがアカウント毎ではなく、anonymousアクセスで受付けIPごとにプレイヤを作成するという仕様をしているためです。
(どちらかというとDLNAのプレイリストはShareに近い機能と考えられます)

コンテンツの並び順について

基本的に以下のように並びます。

今後オプションが追加される可能性はありますが、既に実装済みの動きが変更されるということはありません。
他の機能も大抵そうですが、後発の追加機能はすべてユーザの選択式になります。

表示項目 ソート規則
アーティスト 辞書順
アルバム アルバムのみで単純列挙する場合は辞書順
アーティストの配下のアルバムはデフォルトでリリース順(辞書順に変更可能)
アルバムの配下の曲はトラック順
プレイリスト 辞書順。プレイリスト内の曲順はWeb画面で管理
ジャンル デフォルトで件数の多いものから表示(辞書順に変更可能)
ジャンル配下の楽曲は、アルバムアーティスト辞書順 / アルバム辞書順 / トラック順
ポッドキャスト 辞書順。エピソードは新着順

カバーアートについて

アーティスト / アルバム / 曲 / プレイリスト / ポッドキャスト はカバーアートが利用可能です。

表示項目 ソート規則
アーティスト ID3系統の表示項目ではそのアーティストのいずれかのアルバムのカバーアートが使用されます。
(LastFMのカバーアートが外部から取得不可能な場合の元々の仕様)
File Structure系統の表示項目ではアーティスト画像を使用しない
アルバム 最初の子の埋め込み画像がベース
アルバム内で共通(元々の仕様。負荷対策)
プレイリスト 4つ以上のアルバムが含まれる場合、4分割スタイルの画像を自動生成、それ以下は代表のアルバム
ポッドキャスト 提供元の画像

以下はBubbleUPnPの表示例です。

カバーアートのスライダーサンプルを表示

カバーアートをどこまで扱うかはクライアントアプリの仕様によります。
BubbleUPnPであればJpsonicが意図したカバーアートを全て利用可能です。

アーティストの画像については、利用可能な新たな外部のサービスに対応すれば改善可能です。
ただし現段階ではJpsonic全体の機能優先度としてはそれほど高くありません。
この部分をすぐになんとかしたいという方はAirsonicに要望を出すか、AirsonicにPRして機能追加してください。

検索の仕様について

Service Template Version 1.01 for UPnP Version 1.0 に準じたメッセージ解析を行い、Subsonicのモデルにマッピングした検索を行います。
検索方式はフレーズ検索で、解説はJpsonicの検索仕様(v109.0.0)にあります。

Subsonicアプリと異なり、どのような検索結果が返るかは、そのクライアントアプリが行う検索の仕様に依存します。
BubbleUPnPの例でいえば、画面上で表示している箇所によって検索クエリや結果の表示は多少変化します。

  • 「Search」で画面上部から入力するワード検索が利用可能、その横にあるマイクボタンから音声入力も利用可能
  • 例えばジャンルの階層でジャンルを検索すると、「Current folder」としてジャンルを検索できたりもする
  • 検索を転用している「Show Album」「Album by …」「Tracs by …」といったジャンプ機能も利用可能
  • 動画と音楽の検索は別に行われる(動画がなければ検索結果には返りません)。例えば同名のmp3とmp4の楽曲ファイルがあれば、MusicとMovieで個別表示されます
  • 何を検索するにしても一般的なDLNAサーバより高速です

全てのUPnPメッセージを忠実に解析しているわけではありません。
一般的な楽曲管理ソフトであればこの程度だろう、という仕様範囲をカバーしBubbleUPnPで動作確認しています。
仕様を網羅するほど細かい条件設定ができるクライアントソフトが流通していないためです。

推奨クライアントと稼働例

Jpsonicの開発時に動作確認に使用されているクライアントと稼働例をいくつかご紹介します。
選定基準は主に「ユーザがキャッシュコントロールがしやすいか」「デフォルトで勝手なソートをかけないか」といった点です。

相性抜群なのは、BubbleUPnPです。
フリーソフトでよいものを探しましたがありませんでした。

Google Play ギフトカードがコンビニで買えるので、カード持ってない学生さんでも気軽に買える範囲かな・・・と思います。
クライアントアプリにはかなりの「良しあし」があります。
国内外の多くのヘビーユーザが「良し」に上げる代表格のアプリなのでハズレはないと思います。
色々なサーバに対して上手にブラウジングできるため末永く使えます。

Androidアプリ : BubbleUPnP

BubbleUPnPのAndroid版です。

機能的にはMediaMonkeyもBubbleUPnPも必要十分ですが、巷ではBubbleUPnPの方が評価は高目かと思います。
なおJpsonicの使用するUPnPライブラリはBubbleUPnPと同じものであり、親和性は最も高いです。

Jpsonicのトップノードはこのように表示されます。

BubbleUPnPの設定項目は非常に多く、通信量の設定を変更できたりします。
(Jpsonicはこれに対応可能な実装がされています。)
件数が多くても一瞬で表示しているように見えます。

またスマホアプリとしては珍しくサーバーサイド検索に対応しています。
日本語での検索と音声入力の両方が使用可能です。
カバーアートもJpsonicが出力しているものは全て表示可能です。

デザイン的には日本人好きしそうなパステルカラーでまとめられています。
配色のテーマは何種か用意されており切り替えが可能です。

ギャップレス再生にも対応しています。

私が知る限り、最も使いやすいであろうAndroidアプリです。
UIは日本語翻訳されていませんが、個人的にはそれより優先される機能はたくさんあり、そしてそれらは概ね満たされていると感じています。

Windowsアプリ : MediaMonkey

MediaMonkey

長命定番なソフトですので、楽曲管理をしている方の間でも知名度はトップクラスの部類のソフトです。

この記事を執筆時点でちょうど最新版がリリースされていたところ。
現在メジャーバージョン4ですが、並行して時期バージョン5の開発も行われているとのこと。

PC上のディスプレイで使いやすい、項目ごとのフィルタ機能が便利です。
スマホアプリよりも多くの情報をコントロール可能です。

AKBのようにアーティスト名が多数登録されているアルバムを開くとこのように。

ジャンル分類もこのように。
ジャンルをクリックして、その中からアーティストをクリックしてという確認が簡単です。
マルチジャンルで管理しているようなライブラリの場合、表示面積が広いPCアプリはAndroidアプリよりも確認が容易です。

デザインは好き好きですが、スキン機能やメッセージの多言語化といった機能も備えています。
ただしカバーアートの処理が謎仕様です。

Androidアプリ : MediaMonkey
MediaMonkeyのAndroid版です。

一通り問題なくブラウジングが行えます。
またギャップレス再生にも対応しています。

スキン機能やメッセージの多言語化といった機能は見当たりません。
またプレイキューが謎仕様です。シャッフルは使いづらいです。

MediaMonkeyはキャッシュを使う箇所が限定的であり、BubbleUPnPは任意でリフレッシュが可能です。
どちらもデフォルトで勝手なソートをかけません。

クライアントの独自のソートついて

DLNAのクライアントは独自のソートを行うものが多いため、その点は留意してください。
意図した表示の通りにならなければクライアントの仕様です。

日本語の場合、データがサーバにある以上クライアントで正確なソートは不可能です。
(サーバが読みや並び順を送出するという非効率な設計をしない限り。)
そのためソートを勝手に行うクライアントとJpsonicは相性が悪いです。

MusicBeeのように、GUI上でソート設定を全て除外してもなおWindowsネイティブのソート順にするソフトもあります。
そのような場合は外部連携時の機能欠損は諦め、ローカルルールで管理するためのソフトとして考えるしかありません。

Google Chromecastについて

Jpsonic/AirsonicはGoogle Chromecastのプロトコルに対応していますが、稼働させるには相応のネットワーク知識が必要です。
これに対するサポートは当面行いません。
(情報自体はAirsonicのissuesにあると思います。)

RESTやDLNAといった仕様とは技術系統が異なる毛色のものであり、ユーザー層は別物であると考えている為です。
多くのオープンソース開発者と同じように、私も極端なベンダーロックインは避ける傾向があります。

(Podcastはipod発祥といえばそうなのですが、UPnP仕様上は抽象化可能であり、たかがBroadcastメディアの一種というのが私の考え方)

更新履歴

何か機能更新をしてこの記事を書き換えたときに以下に追記します。

v109.1.0
フォルダ別のアーティスト一覧を追加したため追記
v109.0.0
検索仕様が変更されたため解説を修正
v107.2.0
ランダムリスト (ミュージックフォルダ/アーティスト別)を追加
UPnPが送信するコンテナのクラスを改善。アプリによってはアイコンや表示高が適切なものに変更される
UPnP検索でアーティスト/作曲家をキーとして使用した検索がスキップされる不具合を修正
File Structureのアーティスト画像を使用しないように修正されたため解説を修正
v107.0.0
起動オプションにDLNAポートの変更が追加されたため解説を修正
表示項目に索引(ID3)とランダムリスト (アーティスト別)を追加
キャッシュ仕様が変更されたため付記 : 表示する項目に解説を追加
表示のオプションに関する解説を追加
アクセス制御に関する解説を追加
v106.1.0
UPnPの表示項目が増えたため、表示項目や並び順に関して追記
カバーアートの不具合対応を行ったためカバーアートに関する説明を追記
UPnP検索に対応したため説明を追記
索引のキャッシュ仕様を変更したため追記
カバーアートの表示について注意点を追記
v106.0.0
DLNAのフォルダ展開速度を高速化
表示項目「索引」「最近追加されたアルバム」を追加。表示項目のON/OFF切り替えに対応
検索が正しく動作するよう修正
ジャンルのアイテム数を表示するオプションを追加
v105.2.0
DLNA機能の日本語サポート開始
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

仕様
起動オプションとシャットダウン(v110.0.0)

Jpsonicの起動オプションに関する注意点です。

仕様
画面の表示仕様の概要(v105.1.0)

画面とタグの照応関係を解説します。

仕様
Jpsonicのタグ仕様(v105.1.0)

JpsonicのID3タグ仕様についてです。