Skip to content

v1.0.0-alpha.4 — Streaming Engine, EPG, and HDHomeRun Compatibility

Pre-release
Pre-release

Choose a tag to compare

@jake1164 jake1164 released this 21 Apr 10:19
· 296 commits to main since this release
aa74760

M3Undle v1.0.0-alpha.4 (Alpha)

M3Undle is a self-hosted lineup manager for large streaming provider catalogs,
focused on explicit control, stable output, and DVR-friendly publishing.

This alpha milestone delivers the core streaming engine, EPG source management,
Xtream-Codes compatibility, and hardened HDHomeRun emulation — tested against
NextPVR, Jellyfin, and native LibHDHomeRun clients.


What's in this release

Stream relay engine

  • New stream proxy with ring-buffer architecture for live channel relay
  • Shared live sessions: multiple clients watching the same channel share a single upstream connection
  • Configurable session limits, idle grace periods, buffer sizes, and reconnect behavior
  • Upstream reconnect with stall detection, outage window, and failure strike tracking
  • Subscriber queue model with per-client backpressure and disconnect reason tracking
  • HLS detection and manifest rewriting for browser-based clients (IPTVnator, Electron)
  • HLS proxy endpoint for segment-level relay with provider header forwarding
  • Stream administration page with live session and viewer monitoring
  • Streaming settings UI with validation and restart-required tracking
  • Fixed HttpResponseMessage disposal leak in upstream connector
  • Fixed response disposal on non-success HTTP status codes

HDHomeRun emulation (hardened)

  • Native tuner protocol support: /tuner{N}/v{ch}, /tuner{N}/ch{ch}, and /tuner{N}/auto/... routes used by LibHDHomeRun clients (NextPVR, Channels DVR, Plex)
  • Auto-tune endpoints: /hdhr/auto/v{ch}, /hdhr/auto/ch{ch}, /hdhr/auto/{ch} — resolve guide numbers and redirect to tune URL
  • HDHomeRun tuner manager with tuner slot reservation and concurrency control
  • Native tuner routes force raw MPEG-TS delivery, matching real HDHomeRun device behavior
  • Default tuner count changed to 4 (matching advertised HDHR3-US model)
  • Virtual tuner ID includes tuner index for per-tuner session isolation
  • Structured event logging (EventType = "HDHR") across all HDHR endpoints and discovery services
  • Client endpoint status codes preserved — HDHR, stream, playlist, and guide 404/503 responses no longer rewritten to Blazor HTML

EPG source management

  • EPG source CRUD with fetch scheduling and manual refresh
  • XMLTV parser for external guide data ingestion
  • EPG channel mapper with auto-matching and manual mapping UI
  • EPG compiler that merges multiple sources with configurable priority ordering
  • EPG catalogue model linking sources to lineup channels
  • Fixed O(m*n) FindIndex in EpgCompiler OrderBy with pre-built priority dictionary

Xtream-Codes compatibility

  • Full Xtream-Codes API endpoint set for player compatibility
  • Xtream path credential filter for URL-embedded authentication
  • Xtream stream ID cache for stable ID mapping across refreshes
  • Live stream URL generation

Live proxy URLs

  • Now include a .ts extension tail (e.g., /live/{key}/20312.ts) when the upstream URL is a bare numeric ID, so clients that content-sniff by file extension recognize the stream as MPEG-TS
  • HLS streams (.m3u8 extension or ?output=m3u8 / ?type=hls query params) are preserved without .ts rewriting

Provider and data model

  • Provider stream limit support (per-provider concurrent stream caps)
  • EPG schema: epg_sources, epg_source_channels, epg_channel_mappings, epg_fetch_runs
  • Streaming settings columns added to site_settings
  • Consolidated alpha.4 migration gate (single Alpha4_Schema migration)
  • Migration repair for databases upgraded from early alpha.4 builds with split migrations
  • Default stream limit set when adding a provider

Security and access control

  • Forwarded headers security fix: removed unrestricted proxy trust, added configurable trusted proxies
  • Client endpoint access denial logging (path, method, reason, client IP)
  • SQLite connection pool cleanup to prevent stale file locks

Build and observability

  • Version bumped to 1.0.0-alpha.4
  • Build date (UTC) and optional build number stamped as assembly metadata at compile time
  • Version, build date, and build number logged at startup for binary traceability
  • CLI --version displays full build info

UI and dashboard

  • Streams page for monitoring active sessions and connected viewers
  • Settings page expanded with streaming configuration controls
  • EPG Sources page with source management and mapping workflows
  • Dashboard updates for streaming status visibility
  • Log scroll initialization fix (proper cleanup on component dispose)
  • Navigation menu updated for new pages

Testing

  • Ring buffer unit tests: eviction, lease ref-counting, snapshot retention, complete behavior
  • Channel session integration tests (shared sessions, subscriber lifecycle, idle shutdown)
  • Stream request resolver tests including native HDHR tuner routes
  • HLS proxy endpoint security tests
  • HDHomeRun endpoint and lineup service tests (auto-tune, guide number resolution, native tuner routes)
  • Streaming settings service and options validator tests
  • EPG compiler, mapper, source fetcher, and XMLTV parser tests
  • M3U serializer tests for .ts tail logic
  • AppBuildInfo tests
  • Application restart service tests
  • Centralized SQLite test cleanup infrastructure (connection pool handling, retry-on-lock)

Container Images

ghcr.io/sydney-elvis/m3undle:v1.0.0-alpha.4
ghcr.io/sydney-elvis/m3undle:alpha

alpha is a rolling tag — it always points to the latest alpha release.


Known alpha limitations

Still alpha: HLS proxy is functional but not fully hardened for all edge cases,
EPG merging covers common XMLTV formats but exotic sources may need parser
extensions, and Xtream-Codes compatibility covers standard player flows but
not the full API surface. Broader client interoperability testing is ongoing.


Contributor

@jake1164

Full Changelog: v1.0.0-alpha.3...v1.0.0-alpha.4