diff --git a/README.md b/README.md index de602ec..01c5599 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,8 @@ nodecast-tv is a modern, web-based IPTV player featuring Live TV, EPG, Movies (V ## Screenshots
- Screenshot 2 Screenshot 1 + Screenshot 2 Screenshot 3 Screenshot 4
@@ -87,6 +87,36 @@ You can run nodecast-tv easily using Docker. The application will be available at `http://localhost:3000`. + +### Hardware Acceleration Setup + +To enable hardware transcoding (NVENC, QSV, VAAPI), you must expose your host's GPU to the container. + +**1. Intel (QSV) & AMD (VAAPI)** +Update your `docker-compose.yml` to map the DRI devices and add necessary groups (often required for permission): +```yaml + devices: + - /dev/dri:/dev/dri # Required for VAAPI/QuickSync/AMF (Linux) + # group_add: # Optional: Needed mainly if you run as non-root + # - "video" # Run on host: getent group video + # - "render" # Run on host: getent group render +``` + +**2. NVIDIA (NVENC)** +Ensure you have the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) installed on your host, then update your `docker-compose.yml`: +```yaml + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] +``` + +**Verify:** +After restarting the container, go to **Settings -> Transcoding**. The **Hardware Detection** status should list your GPU (e.g., "NVIDIA GPU Detected" or "VAAPI Available"). + ### Usage 1. Go to **Settings** -> **Content Sources**. @@ -95,42 +125,29 @@ The application will be available at `http://localhost:3000`. 4. Navigate to **Live TV**, **Movies**, or **Series** to browse your content. -## Browser Codec Support +## Browser Codec Support & Transcoding -nodecast-tv is a web-based application. By default, **video decoding is handled by your browser**. However, nodecast-tv includes optional **server-side transcoding** to convert incompatible codecs (HEVC, Dolby) to browser-friendly formats (H.264, AAC). +nodecast-tv is a web-based application. By default, **video decoding is handled by your browser**. However, the built-in **smart transcoding system** automatically converts incompatible media (e.g., HEVC video, Dolby audio) into browser-friendly formats using FFmpeg. -Without transcoding enabled, codec support depends on what your browser can decode natively: +**Codec Compatibility Table:** | Codec | Chrome | Firefox | Safari | Edge | |-------|--------|---------|--------|------| | **H.264 (AVC)** | ✅ | ✅ | ✅ | ✅ | -| **H.265 (HEVC)** | ❌¹ | ❌ | ✅ | ⚠️² | -| **VP9** | ✅ | ✅ | ⚠️³ | ✅ | +| **H.265 (HEVC)** | Auto-Transcode | Auto-Transcode | ✅ | ⚠️ | | **AV1** | ✅ | ✅ | ❌ | ✅ | | **AAC Audio** | ✅ | ✅ | ✅ | ✅ | -| **AC3/EAC3 (Dolby)** | ❌ | ❌ | ✅ | ❌ | -| **MP3 Audio** | ✅ | ✅ | ✅ | ✅ | +| **AC3/EAC3 (Dolby)** | Auto-Transcode | Auto-Transcode | ✅ | Auto-Transcode | -**Notes:** -1. Chrome may support HEVC on macOS with hardware decoder -2. Edge requires the paid "HEVC Video Extensions" from Microsoft Store ($0.99) -3. Safari VP9 support varies by device/version +> **⚠️ Note:** Edge requires the [HEVC Video Extensions](https://apps.microsoft.com/store/detail/hevc-video-extensions/9NMZLZ57R3T7) from the Microsoft Store to play H.265 (HEVC) natively. If missing, Auto-Transcode will handle it. **If a stream doesn't play:** -- The stream codec may not be supported by your browser -- Try a different browser (Safari for HEVC/Dolby, Chrome/Edge for VP9/AV1) -- Check if your IPTV provider offers alternative stream formats -- For Dolby audio issues, enable **"Force Audio Transcode"** in Settings → Transcoding +1. Ensure **"Auto Transcode"** is enabled in **Settings → Transcoding**. +2. If you have video but no audio, check that **"Force Audio Transcode"** is enabled (it should trigger automatically). +3. If buffering persists, try switching the **Hardware Encoder** setting or reducing the **Max Transcode Resolution**. -### Audio Transcoding - -For streams with Dolby Digital (AC3/EAC3) audio that browsers can't decode natively: - -1. Install FFmpeg support: `npm install ffmpeg-static` (included as optional dependency) -2. Enable **"Force Audio Transcode"** in Settings → Transcoding → Stream Processing -3. Audio will be transcoded to AAC while video passes through unchanged - -**Note:** For ad-stitched live streams (like Pluto TV), transcoding may struggle to keep up. These streams typically use AAC audio already, so the built-in HLS discontinuity handling manages audio transitions without transcoding. +**Note on Ad-Stitched Streams:** +For channels like Pluto TV, the player handles audio discontinuities automatically. Transcoding is rarely needed unless the base codec is incompatible. ## Supported Stream Types @@ -188,22 +205,21 @@ All transcoding and stream processing settings are found in **Settings → Trans | Symptom | Likely Cause | Solution | |---------|--------------|----------| | Black screen, `Access-Control-Allow-Origin` error | CORS blocked | Enable **"Force Backend Proxy"** in Settings → Transcoding | -| Black screen with `MEDIA_ERR_DECODE` or `fragParsingError` | Unsupported codec (likely HEVC) | Try a different browser (see Codec Support table) | -| Loading forever (no error) | Decoder hung on unsupported codec | Try Safari or Edge; stream likely uses HEVC | +| Black screen with `MEDIA_ERR_DECODE` | Unsupported codec (HEVC/VP9) | Ensure **"Auto Transcode"** is enabled | +| Loading forever (no error) | Browser decoder stuck | Enable **"Force Video Transcode"** (overrides Auto detection) | ### No Audio (Video Plays Fine) | Symptom | Likely Cause | Solution | |---------|--------------|----------| -| No audio at all | Dolby/AC3/EAC3 audio | Enable **"Force Audio Transcode"** in Settings → Transcoding | -| No audio on some channels | Codec mismatch | Try Safari (best Dolby support) or enable transcoding | +| No audio at all | Dolby/AC3/EAC3 audio | Enable **"Force Audio Transcode"** (overrides Auto detection) | | Audio out of sync | Stream encoding issue | Try changing stream format to TS in Settings | ### Buffering Issues | Symptom | Likely Cause | Solution | |---------|--------------|----------| -| Constant buffering | Slow network or provider | Try TS format instead of HLS in Settings | +| Constant buffering | Slow network or weak GPU | 1. Lower **Max Resolution** (e.g. to 720p)
2. Try **TS** format instead of HLS | ### HTTPS / Reverse Proxy Issues @@ -242,59 +258,14 @@ location / { } ``` -### IPTV Middleware (m3u-editor, dispatcharr, Threadfin, etc.) +### IPTV Middleware (m3u-editor, dispatcharr, Threadfin, xTeVe) +If you manage your streams with middleware tools, you may encounter CORS issues or raw MPEG-TS streams that browsers can't play directly. -If you're using IPTV middleware like **m3u-editor**, **dispatcharr**, **Threadfin**, or **xTeVe** to manage your streams, you may need to adjust nodecast-tv settings for optimal playback. These tools typically use passthrough mode, which preserves original codecs (like HEVC/Dolby) that most browsers cannot decode natively, and may also trigger CORS restrictions. +**Recommended Setup:** +1. **Force Backend Proxy:** Enable this in **Settings → Transcoding → Network**. This routes middleware streams through NodeCast TV, bypassing CORS restrictions. +2. **Auto Transcode:** Keep this enabled (default). It will automatically detect if the middleware stream (e.g., MPEG-TS) needs to be remuxed or transcoded for the browser. -**Recommended Settings in nodecast-tv:** - -| Setting | Location | When to Enable | -|---------|----------|----------------| -| **Force Backend Proxy** | Settings → Transcoding → Network | Always recommended when using middleware | -| **Force Remux** | Settings → Transcoding → Stream Processing | For raw `.ts` streams (lightweight, no re-encoding) | -| **Force Audio Transcode** | Settings → Transcoding → Stream Processing | If you have no audio (Dolby/AC3/EAC3 streams) | - ---- - -#### m3u-editor (sparkison/m3u-editor) - -m3u-editor includes an internal proxy that remuxes streams to MPEG-TS. - -**Setup:** -1. In m3u-editor, configure your playlist and enable the proxy if needed -2. In nodecast-tv, enable **"Force Remux"** in Settings → Transcoding (for raw .ts streams) -3. If audio doesn't play, enable **"Force Audio Transcode"** instead - -**Note:** m3u-editor's proxy preserves original codecs. If your source has HEVC or Dolby, you'll need transcoding or a compatible browser (Safari). - ---- - -#### dispatcharr - -dispatcharr uses FFmpeg stream profiles to process streams. By default it outputs MPEG-TS with passthrough codecs. - -**Setup:** -1. In dispatcharr, streams are proxied by default via stream profiles -2. In nodecast-tv, enable **"Force Remux"** in Settings → Transcoding (for raw .ts streams) -3. If audio doesn't play, enable **"Force Audio Transcode"** instead - -**Custom dispatcharr profile for browser compatibility:** -If you want dispatcharr to transcode audio for you instead of nodecast-tv: -``` --user_agent {userAgent} -i {streamUrl} -c:v copy -c:a aac -f mpegts pipe:1 -``` -This keeps video passthrough but converts audio to AAC. - ---- - -#### Threadfin / xTeVe - -These HDHomeRun emulators work similarly to other middleware. - -**Setup:** -1. Add your Threadfin/xTeVe M3U URL as an M3U source in nodecast-tv -2. Enable **"Force Remux"** in Settings → Transcoding (for raw .ts streams) -3. If needed, enable **"Force Audio Transcode"** instead for Dolby audio +There is rarely a need to configure specific "Force Remux" settings manually anymore; the system detects stream types automatically. ### TVHeadend diff --git a/public/img/screenshots/screenshot-1.png b/public/img/screenshots/screenshot-1.png index 9a677ba..af1457f 100644 Binary files a/public/img/screenshots/screenshot-1.png and b/public/img/screenshots/screenshot-1.png differ diff --git a/public/img/screenshots/screenshot-2.png b/public/img/screenshots/screenshot-2.png index b91d0f6..f049627 100644 Binary files a/public/img/screenshots/screenshot-2.png and b/public/img/screenshots/screenshot-2.png differ diff --git a/public/img/screenshots/screenshot-3.png b/public/img/screenshots/screenshot-3.png index 4a30fb6..563fb2e 100644 Binary files a/public/img/screenshots/screenshot-3.png and b/public/img/screenshots/screenshot-3.png differ diff --git a/public/img/screenshots/screenshot-4.png b/public/img/screenshots/screenshot-4.png index e766d7b..5575c2a 100644 Binary files a/public/img/screenshots/screenshot-4.png and b/public/img/screenshots/screenshot-4.png differ diff --git a/public/index.html b/public/index.html index 8b0c208..5aa1269 100644 --- a/public/index.html +++ b/public/index.html @@ -8,7 +8,7 @@ - NodeCast TV | IPTV Player + nodecast-tv | IPTV Player