198 lines
6.1 KiB
Markdown
198 lines
6.1 KiB
Markdown
# Jellyfin HTPC Client & YouTube Receiver
|
|
|
|
Een snelle, lichtgewicht HTPC client ontworpen voor Linux mini-PC's (x86_64). Integreert met **Jellyfin** voor het streamen van films/series en biedt volledige ondersteuning voor **Yatse** en het delen van **YouTube** video's rechtstreeks vanuit de YouTube mobiele app.
|
|
|
|
---
|
|
|
|
## 🌟 Belangrijkste Functies
|
|
|
|
1. **Jellyfin Remote Player**:
|
|
- Registreert zich via WebSocket direct bij de Jellyfin server (`https://thuus.bnhmeijer.nl/jellyfin` of lokaal IP).
|
|
- Verschijnt automatisch als "Cast / Remote Speler" in de Jellyfin app en Yatse.
|
|
- Stuurt realtime voortgang, speelduur en hervatting terug naar Jellyfin.
|
|
|
|
2. **Yatse & Kodi Remote Ondersteuning**:
|
|
- Bevat een geëmuleerde **Kodi JSON-RPC server** (standaard HTTP poort `8080` & WebSocket `9090`).
|
|
- Yatse kan de HTPC toevoegen als Kodi mediacenter voor volledige controle: Play/Pause, Seek, Volume, Mute, OSD notificaties.
|
|
|
|
3. **YouTube Delen vanuit de YouTube App**:
|
|
- **Via Yatse**: Tik in de YouTube app op *Delen* $\rightarrow$ *Yatse* $\rightarrow$ de video speelt direct af op het grote scherm!
|
|
- **Via Web Interface / API**: Open `http://<htpc-ip>:8097/` op je telefoon om een link te plakken of de speler te bedienen.
|
|
- Automatische metadata-extractie (titel, uploader, speelduur) en stream extractie via `yt-dlp`.
|
|
|
|
4. **Hardware-versnelde MPV Video Engine**:
|
|
- Gestuurd via MPV IPC Unix socket.
|
|
- Automatische GPU decodering (`--hwdec=auto` voor Intel QuickSync / AMD VA-API / Nvidia NVDEC).
|
|
- Minimale geheugenvoetprint (< 40MB RAM).
|
|
|
|
---
|
|
|
|
## 🏗️ Architectuur
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph Mobile ["Telefoon / Tablet"]
|
|
YT[YouTube App] -->|Delen naar Yatse| Yatse[Yatse Remote App]
|
|
JFApp[Jellyfin Mobiel] -->|Cast naar HTPC| JFSrv[Jellyfin Server]
|
|
Browser[Mobiele Browser] -->|Plak YouTube Link| WebAPI[Web Remote :8097]
|
|
end
|
|
|
|
subgraph HTPC ["HTPC (x86_64 Linux)"]
|
|
subgraph Remotes
|
|
KodiRPC["Kodi JSON-RPC Server (:8080 / :9090)"]
|
|
WebAPI
|
|
end
|
|
|
|
subgraph Core ["jellyfin-htpc-client (Python 3.12)"]
|
|
JFClient["Jellyfin Client Session (WebSocket)"]
|
|
YTParser["YouTube Parser & yt-dlp"]
|
|
MPVControl["MPV IPC Controller"]
|
|
end
|
|
|
|
subgraph Playback ["Media Speler"]
|
|
MPV["MPV Video Player (GPU / VA-API)"]
|
|
end
|
|
end
|
|
|
|
Yatse -->|JSON-RPC| KodiRPC
|
|
JFSrv -->|WebSocket Remote Control| JFClient
|
|
KodiRPC --> MPVControl
|
|
WebAPI --> MPVControl
|
|
JFClient --> MPVControl
|
|
YTParser --> MPVControl
|
|
MPVControl --> MPV
|
|
```
|
|
|
|
---
|
|
|
|
## 🐳 Lokaal Testen met Docker
|
|
|
|
Je kunt de client direct lokaal testen met Docker en Docker Compose:
|
|
|
|
```bash
|
|
# 1. Start de container (lokaal)
|
|
docker compose up -d
|
|
|
|
# 2. Bekijk de logs
|
|
docker compose logs -f
|
|
|
|
# 3. Open de Web Remote in je browser:
|
|
# http://localhost:8097/
|
|
#
|
|
# 4. Of test Yatse vanaf je telefoon op hetzelfde Wi-Fi netwerk:
|
|
# Voeg Kodi toe met het IP-adres van je laptop op poort 8080!
|
|
```
|
|
|
|
### Display / X11 Doorkoppeling (Optioneel):
|
|
Als je wilt dat het MPV-videovenster op het scherm van je laptop verschijnt, geef Docker dan eenmalig toegang tot X11:
|
|
```bash
|
|
xhost +local:root
|
|
docker compose up -d
|
|
```
|
|
*Draai je zonder beeldscherm of op een headless server? De client detecteert dit automatisch en valt terug op headless mode (`--vo=null --ao=null`), of start handmatig met `MPV_VO=null docker compose up -d`.*
|
|
|
|
---
|
|
|
|
## 📦 Installatie op de HTPC Bare-Metal (Aanbevolen voor TV)
|
|
|
|
|
|
```bash
|
|
git clone https://git.bnhmeijer.nl/bart/jellyfin-client.git
|
|
cd jellyfin-client
|
|
chmod +x install.sh
|
|
sudo ./install.sh
|
|
```
|
|
|
|
Het script installeert automatisch de benodigde pakketten (`mpv`, `yt-dlp`, `python3-venv`), maakt `/opt/jellyfin-client` aan met een virtuele omgeving en installeert de systemd service.
|
|
|
|
---
|
|
|
|
## ⚙️ Configuratie
|
|
|
|
Bewerk `/etc/jellyfin-client/config.yaml` (of `config.yaml` in de projectmap):
|
|
|
|
```yaml
|
|
jellyfin:
|
|
server_url: "https://thuus.bnhmeijer.nl/jellyfin" # of lokaal: http://10.2.0.4:8096/jellyfin
|
|
username: "bart"
|
|
password: "jouw_wachtwoord"
|
|
client_name: "Jellyfin HTPC Client"
|
|
device_name: "HTPC Woonkamer"
|
|
device_id: "htpc-woonkamer-01"
|
|
|
|
player:
|
|
mpv_path: "mpv"
|
|
ipc_socket: "/tmp/mpv-jellyfin.sock"
|
|
hwdec: "auto" # 'auto', 'vaapi' (Intel/AMD) of 'nvdec' (Nvidia)
|
|
vo: "gpu"
|
|
fullscreen: true
|
|
audio_device: "auto"
|
|
|
|
kodi_rpc:
|
|
enabled: true
|
|
http_port: 8080 # Poort voor Yatse Kodi-verbinding
|
|
ws_port: 9090
|
|
|
|
web_api:
|
|
enabled: true
|
|
host: "0.0.0.0"
|
|
port: 8097 # Web Remote UI & REST API
|
|
```
|
|
|
|
---
|
|
|
|
## 📱 Yatse Verbinden & Gebruiken
|
|
|
|
### Optie 1: Als Kodi Speler (Beste ervaring voor YouTube delen)
|
|
1. Open **Yatse** op je Android telefoon.
|
|
2. Ga naar **Instellingen** $\rightarrow$ **Hosts beheren** $\rightarrow$ **+** (Host toevoegen).
|
|
3. Kies **Kodi**.
|
|
4. Vul het IP-adres van je HTPC in en poort `8080`.
|
|
5. Yatse detecteert direct de speler.
|
|
6. **YouTube afspelen**: Ga in de officiële YouTube app naar een video $\rightarrow$ druk op **Delen** $\rightarrow$ selecteer **Yatse** $\rightarrow$ de video start direct op je HTPC!
|
|
|
|
### Optie 2: Als Jellyfin Speler
|
|
1. Voeg in Yatse je **Jellyfin server** toe (`https://thuus.bnhmeijer.nl/jellyfin`).
|
|
2. Tik rechtsboven op het Cast-icoon.
|
|
3. Selecteer **HTPC Woonkamer** als afspeeldoel.
|
|
4. Elke film of serie die je nu kiest in Yatse speelt synchroon af via MPV op de HTPC.
|
|
|
|
---
|
|
|
|
## 🌐 Web Remote & Directe API
|
|
|
|
Open op elk apparaat in je netwerk de browser:
|
|
```
|
|
http://<htpc-ip>:8097/
|
|
```
|
|
Hier kun je een YouTube URL invoeren, op "Play on TV" drukken en speelbediening uitvoeren (Play/Pause, -15s/+15s, Volume).
|
|
|
|
### REST Endpoints
|
|
- `POST /api/play` - `{"url": "https://www.youtube.com/watch?v=..."}`
|
|
- `POST /api/playpause`
|
|
- `POST /api/stop`
|
|
- `POST /api/seek` - `{"seconds": 15}`
|
|
- `POST /api/volume` - `{"volume": 80}`
|
|
- `GET /api/status`
|
|
|
|
---
|
|
|
|
## 🛠️ Service Beheer
|
|
|
|
```bash
|
|
# Service starten en automatisch inschakelen bij opstarten
|
|
sudo systemctl enable --now jellyfin-client
|
|
|
|
# Status en logs bekijken
|
|
sudo systemctl status jellyfin-client
|
|
sudo journalctl -u jellyfin-client -f
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Tests Uitvoeren
|
|
|
|
```bash
|
|
.venv/bin/pytest -v
|
|
```
|