はじめに
Jellyfinの話題があまり無いので書きました。
特に、TVのライブ視聴については皆無と言って良いです。
Jellyfin 12.0がリリースされた事もあり、紹介したいと思います。
Jellyfinとは
本題では無いので短く(AIの要約)
Jellyfin(ジェリーフィン)とは、自宅のパソコンやサーバーに保存した動画・音楽・写真などのメディアファイルを整理し、スマホやタブレット、テレビなどの外部デバイスからストリーミング再生できる完全無料のオープンソース・メディアサーバーソフトウェアです。
環境と構築方法
以下の記事が丁寧に解説されています。
ただし、ルーターのポート開放の設定以降は蛇足ですので必要ありません。
Jellyfin は基本、外部公開は推奨していません。
外部から使いたい場合は、VPN(TailScale推奨)を使います。
Jellyfin のTVインターフェース
動画再生と並んで下記のような TV のライブ配信と録画機能があります。
Jellyfin のTVインターフェースの構成は以下の様になっています。
Jellyfin 自体に TV 放送波を受信する機能はありませんから、
ネットワーク経由でストリームデータ(主にMPEG-TS形式など)を受け取る必要があります。
チューナーからTSストリームを渡す方法は大きく2つあります。
米国等では、HDHomeRunが規格化されており自動もしくは設定で取得できますが、
日本ではお馴染みのスクランブル(B-CAS)が掛けられており機能する機器はありません。
もう一つの方法は、仮想チューナーを使って自分で渡す方法です。
ですので、やろうと思えば、TS抜き環境 が必須になります。
なお、TSストリームは放送波のままでは無く、
スクランブルの解除 ⇒ サービスIDでの分離
まで行っている必要があります。
サブチャンネルがある場合を考えてもらうと解り易いと思います。
番組表を受ける為のインターフェースもあります。
これは、リアルタイムに参照されるのではなく、一週間分の全チャネル分を一度に受け取ります。
受け取ったデータはデータベース(SQLlite)でチャンネル情報とマージ(突合)されます。
注目としては、録画や予約管理が Jellyfin 側にあることです。
(プラグインを使えば、外出しにすることは可能なようです)
TS抜き環境での Jellyfin のライブ視聴の方法
いくつか方法があります。
- Mirakurun
- EDCB/Jellyfin Bridge
- 自分で作る
Mirakurun
Mirakrun は環境が無いので試していませんが、APIが実装されているそうなので、そのまま設定で使用できるはずです。
仕様の中に、以下の記載があります。
- IPTV サーバー (M3U8 プレイリスト, XMLTV)
EDCB-JellyfinDVR-bridge
EDCB をバックに、Jellyfin のインターフェースを実装する方法です。
単にTV視聴のインターフェースだけでなく、Jellyfinのプラグイン(.dll)としても作られており、
録画機能をJellyfinではなく、EDCB側で管理するようになっているようです。
なお、録画予約が Jellyfin 側で出来て便利かどうかは、実際に使っていないので分かりません。
少なくとも番組表はお世辞にも見やすいとは言えません。
自分で作る場合でも一から全てを作るのは難しいので、既に録画環境があれば、
それを利用するのが一番手っ取り早く簡単な方法です。
動作確認
動作確認は、詳細が見たかったので、自分で作ったものを利用しました。
こちらも、基盤として EDCB 環境を利用しています。
使ってみて、まず正常に動きません。
正確には、動かなかったのではなく10分経過しないと再生が開始されませんでした。
原因は、Jellyfin が FFmpeg に対して指示するパラメータが不適切だったからです。
よくある事なら製作者が見逃すはずは無い事象だと思います。
理由は推測ですが、TSストリームを流した際、切りの良い所で渡している訳では無いので、最初の解析(FFprobe)で失敗するとパラメータに、-probesize 1G が付加される為のようです。
TSストリームが1Gbyte溜まるのに必要な時間とほぼ一致します。
1Gbyte > 17 Mbps * 8bit * n 秒 ⇒ n ≒ 471秒(約8分)
本来なら設定で解消したいところですが、仕組みが無いので仕方なく FFmpeg のラッパーを作成して、そこでパラメーターを置き換えました。
これで、5秒程度で映像が配信されるようになりました。
以降は、安定して視聴できてます。
それ以外に気が付いた点は、「ストリームの共有許可」という設定があります。
複数のクライアントに複製したTSストリームを流すプロキシのような働きをするものです。
これを オン にしておくとチューナーに対して、TSストリームの転送前に、HEAD リクエストを送ってきます。
HEAD リクエストには何も処理をせず、OK(200)を返すだけです。
逆に、オフ にすると HEAD リクエストの代わりに ffprobe による解析を行います。
チューナーが2回起動される事になるので、チャネル切り替え時に遅延が生じます。
オン のままが良いでしょう。
Jellyfin を使うと、録画済フォルダも一緒に管理、視聴できます。
おわりに
改めて考えてみれば、非常にシンプルだなあと感じます。
日本のTV視聴環境を考えるとその不便さとガラパゴス性が分かります。
