Skip to content

v0.3.4

Choose a tag to compare

@mohaanymo mohaanymo released this 03 Sep 06:23

v0.3.4

A big feature release: new source formats, a general file downloader, and a
rewrite of how restreaming serves on-demand content — plus fixes for the restream
issues reported against v0.3.3.

New

  • Smooth Streaming (MSS). Point the tool at a Microsoft Smooth Streaming
    manifest (.ism/Manifest, .isml/Manifest), VOD or live, and download,
    decrypt, or restream it like HLS and DASH. MSS ships no init segment, so one is
    synthesized from the manifest's CodecPrivateData; PlayReady is handled the
    same way as the tool's other DRM — the KID is read from the ProtectionHeader
    and you supply the key with -key KID:KEY. H.264 + AAC covered.

  • HLS SAMPLE-AES decryption. SAMPLE-AES streams (AAC + H.264) now decrypt
    in-process with a supplied key, alongside the existing CENC / cbcs / AES-128
    support. No license handshake — you provide the key.

  • Plain-file downloads (aria2c-style). Give it a direct file URL — .mp4,
    .mkv, .zip, .iso, anything — and it downloads over many byte-range
    connections at once, with the same resume, retries, and adaptive concurrency as
    the stream pipeline. Falls back to a single connection when the server won't do
    ranges, keeps the real filename and extension, and skips ffmpeg (the file is
    already complete).

  • Paste a curl command (-curl). For a URL that needs specific request
    headers, hand the tool a browser's "Copy as cURL" instead of retyping each
    -H: a file path, - for stdin, or the command inline. It takes the URL and
    every header (folding -A/-e/-b into User-Agent/Referer/Cookie); an
    explicit URL or -H still overrides.

  • Update check. Once a day the tool checks GitHub for a newer release and
    prints a one-line notice if you're behind. It never blocks the download; turn
    it off with -no-update-check or M314DL_NO_UPDATE_CHECK=1.

  • Seekable VOD restreaming. A finite (VOD) source served over -serve /
    -worker is now presented as a proper seekable video — the whole timeline
    is scrubbable — instead of a live window. Segments spool to disk, so memory
    stays flat regardless of the asset's length, and the HLS playlist gains
    EXT-X-ENDLIST once the source completes. Live sources still roll a bounded
    window (a live stream has no full timeline to seek).

Fixed

  • MPEG-TS restream cut viewers off after a few seconds (-serve-format ts),
    live sources included. The fan-out dropped a viewer by counting publish units,
    but the remux path emits tiny pipe-sized chunks, so the buffer was worth under a
    second and any burst kicked everyone. It now measures by bytes, primes a joining
    viewer for instant start, drains the queued tail when the stream ends instead of
    cutting mid-play, and aligns remux output to TS packet boundaries.

  • VOD restream stopped after the initial buffer and kept growing memory. A
    finite source was presented as a live stream that snapshotted mid-download and
    stopped; it is now the seekable, disk-spooled VOD described above — playback
    follows through to the end and memory stays flat.

  • Latent byte-range corruption on the shared segment path. A ranged request
    answered with a whole-object 200 used to be written as if it were the
    requested slice, misplacing bytes; it is now refused (a file download retries on
    a single connection), and a short 206 retries for the remainder instead of
    committing a truncated chunk.

Notes

Decryption still requires you to supply the content key; the tool performs no
license/CDM/FairPlay handshake. MSS AC-3/E-AC-3 and HEVC-over-TS are not decrypted
yet (they're reported clearly rather than passed through scrambled).