0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JellyfinでのTVライブ視聴

0
Posted at

はじめに

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秒程度で映像が配信されるようになりました。

以降は、安定して視聴できてます。

Screenshot_20260915_121415_org.mozilla.firefox.jpg

それ以外に気が付いた点は、「ストリームの共有許可」という設定があります。
複数のクライアントに複製したTSストリームを流すプロキシのような働きをするものです。
これを オン にしておくとチューナーに対して、TSストリームの転送前に、HEAD リクエストを送ってきます。
HEAD リクエストには何も処理をせず、OK(200)を返すだけです。
逆に、オフ にすると HEAD リクエストの代わりに ffprobe による解析を行います。
チューナーが2回起動される事になるので、チャネル切り替え時に遅延が生じます。
オン のままが良いでしょう。

Jellyfin を使うと、録画済フォルダも一緒に管理、視聴できます。

おわりに

改めて考えてみれば、非常にシンプルだなあと感じます。
日本のTV視聴環境を考えるとその不便さとガラパゴス性が分かります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?