Skip to content

fuba/tv-viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TV Viewer

日本のデジタルテレビ(地上波・BS・CS)をWebブラウザで視聴できるリアルタイムストリーミングシステム

概要

このプロジェクトは、Mirakurunを使用して日本のデジタルテレビ放送を受信し、Webブラウザでリアルタイム視聴を可能にするシステムです。MPEG2-TSストリームをHLS(HTTP Live Streaming)形式に変換し、HLS.jsを使用してブラウザで再生します。

主要機能

✅ 実装済み機能

  • 📺 リアルタイム視聴

    • 地上波デジタル放送対応
    • BSデジタル放送対応(28チャンネル)
    • 🆕 CSデジタル放送対応(50サービス)
    • リアルタイムMPEG2-TS → HLS変換
    • NVENC/H.264ハードウェアエンコーディング
  • 🎮 ユーザーインターフェース

    • モダンなWebUI(Svelte + Tailwind CSS)
    • 📱 レスポンシブデザイン(モバイル・タブレット対応)
    • タブ切り替えチャンネル選択(地上波・BS・CS)
    • 放送局名の正確な表示(TBSチャンネル1、フジテレビONEなど)
    • タイプ別カラーコーディング(地上波:緑、BS:青、🆕 CS:紫)
    • 🆕 iPhoneインライン再生対応
    • 🆕 ストリーム選択UI(映像・音声トラック切り替え)
  • 🔧 デバッグ・監視機能

    • 🆕 改善されたデバッグUI(専用ログパネル)
    • FFmpegリアルタイムログ表示
    • エンコーディングプロセス監視
    • API健全性チェック
    • アプリケーションログとFFmpegログの分離表示
  • ⚡ パフォーマンス

    • 最適化されたFFmpeg設定
    • 🆕 CS放送高速分析(20秒 → 0.5秒)
    • 効率的なHLSセグメント管理(2秒セグメント)
    • 🆕 複数チャンネル同時エンコーディング(最大3ch)
    • NVENC(RTX 3080)ハードウェア加速対応

技術スタック

バックエンド

  • Go 1.21: 高性能なAPIサーバー
  • Gin Framework: RESTful API
  • FFmpeg: MPEG2-TS → HLS エンコーディング
  • SQLite: 設定・データ管理

フロントエンド

  • Svelte: モダンなWebフレームワーク
  • TypeScript: 型安全な開発
  • Tailwind CSS: ユーティリティファーストCSS
  • HLS.js: ブラウザHLS再生

インフラ

  • Docker & Docker Compose: コンテナ化
  • NVIDIA Container Toolkit: GPU コンテナサポート
  • Nginx: リバースプロキシ
  • Host Networking: 低レイテンシー通信
  • NVENC: NVIDIA GPUハードウェアエンコーディング

システム構成

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Mirakurun     │───▶│   TV Viewer      │───▶│  Web Browser    │
│  (TV Tuner)     │    │   Backend        │    │   (HLS.js)      │
│                 │    │                  │    │                 │
│ MPEG2-TS Stream │    │ Go + FFmpeg      │    │ Svelte Frontend │
└─────────────────┘    │ HLS Transcoding  │    └─────────────────┘
                       └──────────────────┘

クイックスタート

前提条件

  • Docker & Docker Compose
  • Mirakurunサーバーが稼働中(localhost:40772
  • (オプション)NVIDIA GPU + NVIDIA Container Toolkit(NVENC使用時)

起動方法

# リポジトリをクローン
git clone <your-repo-url>
cd tv-viewer

# コンテナをビルド・起動
docker compose up -d

# GPU搭載システムでNVENCを使用する場合
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d

# フロントエンドにアクセス
open http://localhost:3001

環境変数

# docker-compose.yml で設定済み
MIRAKURUN_URL=http://localhost:40772
PORT=18088

API仕様

エンドポイント

Method Endpoint 説明
GET /api/health 健全性チェック
GET /api/channels チャンネル一覧取得
GET /api/channels/{id}/stream ストリーミング開始
GET /api/logs/{channel} FFmpegログ取得
GET /api/sessions アクティブセッション一覧
POST /api/sessions/stop-all 全セッション停止

NVENC ハードウェアエンコーディング

Method Endpoint 説明
GET /api/nvenc/status NVENCステータス確認
POST /api/nvenc/toggle NVENC有効/無効切替

HLSストリーミング

Method Endpoint 説明
GET /api/stream/{channel}/playlist.m3u8 HLSプレイリスト
GET /api/stream/{channel}/segment{n}.ts HLSセグメント
GET /api/stream/{channel}/subtitles.ass 字幕ファイル

ストリーム選択

Method Endpoint 説明
GET /api/channels/{id}/stream-info ストリーム情報取得
POST /api/channels/{id}/select-streams ストリーム選択変更

NVENC ハードウェアエンコーディング

機能

  • NVIDIA GPU 自動検出: RTX/GTX シリーズで自動有効化
  • コーデック選択: H.264 または H.265(HEVC)
  • 品質設定: High/Medium/Low プリセット
  • CPU 負荷減: 15-30% → 10-12% にCPU使用率削減

使用方法

# GPU対応で起動
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d

# NVENC ステータス確認
curl http://localhost:18088/api/nvenc/status

# H.265 を有効にする場合
export USE_HEVC=true
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d

パフォーマンス

項目 CPUエンコード NVENC H.264 NVENC H.265
CPU使用率 15-30% 10-12% 10-12%
GPU使用率 0% 1-5% 1-5%
GPUメモリ 0MB 272MB 330MB
圧縮効率 基準 基準 +15-25%
画質 最高

ストリーム選択機能

概要

デジタル放送には複数の映像・音声トラックが含まれていることがあります。本機能により、視聴中にリアルタイムでトラックを切り替えることができます。

使用方法

  1. チャンネルを選択してストリーミングを開始
  2. 「ストリーム選択」ボタンをクリック
  3. ドロップダウンメニューから希望の映像・音声トラックを選択
  4. 「ストリームを切り替え」ボタンで適用

機能詳細

  • 映像ストリーム: 解像度、ビットレート、言語情報を表示
  • 音声ストリーム: チャンネル数、サンプリングレート、ビットレート、言語を表示
  • 自動選択: デフォルトでは最初のトラックを自動選択
  • リアルタイム切り替え: 選択変更時にストリームを再起動して即座に反映

対応チャンネル

地上波デジタル放送

  • NHK総合、NHK Eテレ
  • 日本テレビ、テレビ朝日、TBS、テレビ東京、フジテレビ
  • その他地域局

BSデジタル放送(28チャンネル)

  • NHK BS、NHK BS プレミアム
  • BS朝日、BS-TBS、BSテレ東、BSフジ
  • BS日テレ、その他専門チャンネル

制限事項

  • CSチャンネルは現在無効化(セグメンテーション違反回避)
  • 同時エンコーディング数制限(デフォルト:1)

トラブルシューティング

よくある問題

問題: playlist not ready エラー

# FFmpeg解析時間の調整で解決済み
# analyzeduration: 地上波5秒、BS10秒に最適化

問題: Invalid frame dimensions 0x0

# 正常動作: 日本のデジタル放送の初期化時の一時的現象
# 数秒後に正常なエンコーディングが開始されます

問題: Docker コンテナが起動しない

# ポート競合確認
docker compose logs
netstat -tlnp | grep :3001

ログ確認

# バックエンドログ
docker logs tv-viewer-backend-1 -f

# フロントエンドログ  
docker logs tv-viewer-frontend-1 -f

# FFmpegログ(ブラウザ内)
# デバッグモードを有効にして確認

開発履歴

詳細な開発履歴と実装ノートは DEVELOPMENT.md を参照してください。

ライセンス

This project is licensed under CC0 (Creative Commons Zero).

謝辞

  • Mirakurun - デジタル放送受信
  • FFmpeg - メディア変換・ストリーミング
  • HLS.js - ブラウザHLS再生

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published