Skip to content

Releases: swvn-dispatch/dispatcharr-multiview

v0.2.3

25 Jun 19:51
0bbcc4d

Choose a tag to compare

Added

  • Intel QSV (h264_qsv) and VAAPI (h264_vaapi) hardware encoder options alongside the existing NVENC option.
  • EPG forward mode now emits all programme metadata from Dispatcharr's EPG data: categories, episode numbers (xmltv_ns, onscreen, and external IDs), ratings, poster icons, live/premiere/new flags, runtime, country, language, and more. Previously only title, subtitle, and description were forwarded.
  • EPG forward mode appends the layout's channel list to each programme description.
  • Dynamic Warnings section in plugin settings that surfaces common configuration issues: missing PyAV installation, audio copy stream profile that will silently drop multi-track audio, and software encoding (libx264) with 4+ streams.

Fixed

  • Audio desync after channel reconnects and live_proxy fallback resets.
  • Audio track language codes for channels with mixed-case multi-word names (e.g. "Rogers TV" was producing an incorrect language tag).
  • Reduced startup log noise: port race condition demoted to INFO level; warmup retry added for initial channel connections to reduce false error messages.

v0.2.2

25 Jun 14:54
33004cd

Choose a tag to compare

Added

  • Per-layout EPG source mode: each layout can now forward real EPG data from one of its source channels instead of showing a built-in placeholder entry. When "Forward from channel" is selected, a channel picker appears and the layout's EPG shows actual programme titles, subtitles, and descriptions. Falls back to placeholder if the selected channel has no EPG data.

Fixed

  • Fixed an intermittent plugin load failure that occurred during Dispatcharr reload cycles. Relative importlib.import_module calls would fail with KeyError or ModuleNotFoundError if the parent package was absent from sys.modules at reload time. Replaced with a file-path-based loader that bypasses the package registry lookup.

Dev Build (70140250)

26 Jun 17:16
0bbcc4d

Choose a tag to compare

Dev Build (70140250) Pre-release
Pre-release

Multiview dev build from the dev branch.

Field Value
Description Tile multiple Dispatcharr channel streams into multi-view outputs using FFmpeg
Author sethwv
License MIT
Min Dispatcharr v0.27.0
Docs https://github.com/swvn-dispatch/dispatcharr-multiview
Discord https://discord.com/channels/1340492560220684331/1509200002407465001

v0.2.1

24 Jun 23:20
b8e4257

Choose a tag to compare

Added

  • NVIDIA NVENC hardware encoding (h264_nvenc) as an optional encoder, selectable in plugin settings. Requires an NVIDIA GPU with driver support. Startup exits with a clear error if NVENC is selected but unavailable.
  • Encoder preset selection for NVENC (p1-p7, default p4 balanced).
  • Channel logos now load from HTTP URLs in addition to local file paths.
  • Keepalive client: multiview registers a background connection with Dispatcharr's live_proxy so channels stay warm between viewer connections, preventing cold-start delays on reconnect.
  • RSS memory usage logged in the worker heartbeat alongside per-channel frame rates. (Log level will be changed in a later release)

Changed

  • Channel reconnect now uses exponential backoff (2s, 4s, 8s... up to 60s) instead of a fixed 2s delay. Channels give up after 12 consecutive failures (roughly 8 minutes total).
  • Logo rendering preserves aspect ratio and correctly composites transparency over black. Previously logos were cropped to a square and transparent areas were not handled.
  • Logo loading moved to a background thread so startup is not blocked waiting for logo decode.

Fixed

  • Server returns 503 when a channel's live_proxy is not yet ready, instead of 200 with an empty body. This lets the compositor worker retry cleanly via its backoff rather than failing with a cryptic "Invalid data found" error.
  • Audio resampler, audio write pipe FDs, and encoder output pipe FD are now properly closed on worker shutdown, eliminating file descriptor leaks.

v0.2.0

24 Jun 18:25
28bc4c5

Choose a tag to compare

Added

  • PyAV compositor worker: decoding, compositing, and encoding now run in a dedicated subprocess using PyAV (Python FFmpeg bindings). Each tile decodes in its own thread; the compositor blits the latest frame per tile onto a shared canvas and encodes it continuously. A slow or disconnected channel never stalls the grid.
  • "Install PyAV" actions in plugin settings to download and install the PyAV media dependency at runtime, for both amd64/x86_64 and arm64/aarch64 hosts. Internet access is required for the one-time install.
  • PyAV installation status indicator in plugin settings showing whether the media engine is installed and ready for this host's architecture.
  • Configurable output frame rate: 24, 25, 30, 50, or 60 fps (default 30).
  • CBR (constant bitrate) encoding: output bitrate is now a true constant-rate target, not a ceiling. The encoder pads with filler NAL units so the data rate stays flat regardless of content complexity, preventing IPTV player buffer drain and fast-forward on low-motion content.
  • PTS rate limiter: the compositor paces output to 1x realtime using PTS timestamps, preventing fast-forward playback on fast machines where Dispatcharr's live proxy delivers frames faster than realtime.

Changed

  • Minimum required Dispatcharr version raised from v0.22.0 to v0.27.0.
  • M3U and EPG refresh after "Regenerate M3U" are now serialized (M3U first, then EPG) using a Celery task chain. Previously both tasks fired simultaneously, which caused a Dispatcharr DB collision.
  • Output bitrate field label changed from "Max Output Bitrate" to "Output Bitrate" to reflect CBR behaviour.

Fixed

  • A/V sync: audio is now PTS-aligned to video at stream startup. The audio buffer is also flushed on channel reconnect, preventing audio lag from accumulating.
  • M3U + EPG simultaneous refresh could cause "INSERT 0 N" DB errors in Dispatcharr when both tasks hit the shared celery connection at the same time.

Removed

  • Hardware encoder options (NVIDIA h264_nvenc, Intel QuickSync h264_qsv, AMD/Intel VA-API h264_vaapi) are temporarily removed while the compositor is rebuilt on PyAV. Only libx264 (software) is available in this release. Hardware encoders will return as an opt-in mode in a future update.
  • CRF/CQ quality mode removed. Encoding is CBR-only in this release.

v0.1.0

27 May 19:18
e1b92ef

Choose a tag to compare

  • Tile Dispatcharr channel streams into a single MPEG-TS output using FFmpeg xstack; each layout appears as a standard M3U channel
  • Three layout styles: Auto Grid (square-ish grid, last row centred), Featured (channel 1 large on the left, others stacked on the right), and Top Featured (channel 1 full-width on top, others in a row at the bottom)
  • Classic channel selection via dropdowns and Regex selection - enter a pattern (e.g. TSN\s*\d) to match channels by name automatically at stream time, sorted by channel number
  • Hardware encoder support: Software (libx264), NVIDIA (h264_nvenc), Intel QuickSync (h264_qsv), AMD/Intel VA-API (h264_vaapi)
  • Multi-audio output: choose a single channel's audio or output one AC3 track per tile; players with multi-track support (VLC, Infuse, mpv) can switch between them. Duplicate track labels are auto-numbered (e.g. ts1, ts2, ts3)
  • Startup placeholder: tiled black frames with channel logos and a "Starting up..." banner display immediately while FFmpeg initialises the real stream
  • EPG support: generates a 14-day XMLTV feed per layout with configurable title, subtitle, and category tags; registered automatically as an EPGSource in Dispatcharr
  • Configurable output resolution (1080p / 720p / 480p), max bitrate, encoder quality (CRF/CQ/global_quality), and encoder preset per global settings
  • Auto-refresh interval setting to regenerate M3U and EPG on a schedule (default 24 h; 0 = manual only via Regenerate M3U button)
  • Streams open through Dispatcharr's ProxyServer so connections appear in the stats view, respect stream profiles and fallback behaviour, and carry the user-agent multiview-plugin
  • No FFmpeg processes run when nobody is watching; processes are spawned per request and killed on disconnect