github Vateron-Media/XC_VM 2.3.8
v2.3.8

4 hours ago

XC_VM 2.3.8

A maintenance release focused on streaming stability and a large internal
clean-up of the stream pipeline
. A significant part of the streaming stack was
refactored without changing its external behaviour, alongside fixes for HLS, VOD,
LLOD, GeoIP and connection tracking. No breaking changes; no config or database
migration required.

๐ŸŽฅ Streaming fixes

  • VOD subtitles โ€” import and map all configured subtitle tracks, not just
    the first one.
  • LLOD / on-demand resilience โ€” reconnect an HTTP source that drops mid-stream
    instead of exiting and forcing a watchdog restart.
  • On-demand start-up โ€” fill the prebuffer before the first MPEG-TS burst and
    size it by duration rather than segment count, for a faster and steadier start.
  • Live delivery โ€” remove the per-read throttle in MPEG-TS output for smoother
    streaming.
  • FFprobe cache โ€” read it under the same key it was written with, so the cache
    actually hits instead of always missing.
  • Off-air path โ€” fix an undefined $rServerID on the channel-less branch in
    live.php.

๐Ÿงฑ Stream pipeline refactor (behaviour-preserving)

  • Replaced startStream()'s ~180-line inline ffmpeg-command assembly with a
    single pure buildLive() builder, and removed the transitional shadow-diff
    scaffold once the two were proven byte-identical.
  • Extracted FFprobe, codec metadata, the AAC bitstream filter, HLS/FLV outputs,
    source mapping, subtitles, failover and delay-resume into focused helpers.
  • Consolidated connection lookup / create / update / cleanup through
    ConnectionTracker, and deduped the identical Redis/DB statistics collection.
  • Added dedicated helpers for on-demand process cleanup and PID tracking.

๐Ÿงน Monitor daemon clean-up

  • Reconstructed the decompiled supervisor: all 62 gotos removed and the flow
    rebuilt with structured while loops; dead and no-op gotos dropped; the
    if (true) obfuscation wrappers removed.
  • Renamed the obfuscated hash-based variables to meaningful names.
  • Extracted codec, frame-rate, segment-duration and auto-restart logic into
    dedicated functions.
  • Rewrote the class documentation in English and filled the missing docblocks.

๐ŸŒ GeoIP & user information

  • cron:maxmind --force now genuinely re-downloads the MaxMind databases when
    requested, instead of skipping when they look up to date.
  • Consolidated getStreamingUserInfo() / getUserInfo() / getE2Info() onto one
    GeoIP path and simplified their internals.
  • Fixed the isp_asn handling bug and skip the ISP-update write when no ISP was
    detected.

๐Ÿ“ก Signals & on-demand handling

  • Unified all deferred-work signalling behind a single SignalQueue.
  • Added ConnectionTracker query helpers for the on-demand killer and simplified
    its Redis/DB stat collection.

๐Ÿ› ๏ธ Build, CI & dependencies

  • Re-synced the committed production vendor/ with composer.lock and regenerated
    the PHPStan baseline against the pinned PHPStan 2.2.8.
  • Moved the PHPStan / PHP-CS-Fixer configuration out of the repo root into
    build/; wired constants-stub regeneration into make and fixed the
    procedural-use gate path.
  • CI now runs once per change with proper concurrency; added a path-filtered Pages
    workflow and Composer support in Dependabot.
  • GitHub Actions bumps: checkout โ†’ v7, upload-pages-artifact โ†’ v5,
    configure-pages โ†’ v6, deploy-pages โ†’ v5, add-to-project โ†’ v2.

๐Ÿ“š Docs & developer tooling

  • Added the tools/ README index, agent issue-tracker/domain guides and a Claude
    Agent Skills section; pruned redundant agent definitions and stale instructions.
  • Added tools/stream_queue_check.py, a stream-queue integrity monitor
    (developer-only โ€” not shipped in the panel).

What's Changed

Full Changelog: 2.3.7...2.3.8

Don't miss a new XC_VM release

NewReleases is sending notifications on new releases.