Skip to content

3.13.3 — Blu-ray ISO playback fix (#62)

Choose a tag to compare

@superuser404notfound superuser404notfound released this 24 Jun 15:47

Fixed

Music Now Playing crashed on tvOS 26 with embedded cover art

The bare-AVPlayer audio Now Playing path crashed on tvOS 26 (dispatch_assert_queue_fail) when a track carried embedded artwork: the system harvested and decoded the asset's embedded cover off the expected queue, and a non-Sendable artwork closure ran off its actor. The engine now follows Apple's recommended path, an auto-publishing MPNowPlayingSession with per-item AVPlayerItem.nowPlayingInfo instead of manual MPNowPlayingInfoCenter writes or externalMetadata, with writes gated on item readiness to avoid the serial-queue crash during item swaps. The audio is wrapped in a metadata-free composition so the system never decodes the asset's (sometimes corrupt) embedded artwork.

Blu-ray ISO playback failed for every real UDF 2.50 disc image (#62)

A Blu-ray ISO would fail to play: the engine found the UDF volume anchor and parsed the volume structure, but listing the root directory came back empty, so no BDMV directory was found, DiscReader.wrap returned nil, and the raw image fell through to a plain FFmpeg open that reports AVERROR_INVALIDDATA.

The cause was a partition-reference bug in the UDF reader. A metadata-resident file entry's short_ad allocation descriptors were resolved against the physical partition. In UDF a short_ad carries no partition reference, so it is relative to the file entry's own recording partition; for a metadata-partition entry that means metadata-virtual blocks, resolved through the Metadata File's extents. The root directory's data lives in the metadata partition, so resolving it against the physical partition read the wrong sectors. Large stream data (m2ts) lives in the physical partition and is referenced with long_ad (which carries an explicit partition reference) and already resolved correctly.

short_ad now resolves against the file entry's own partition. Verified end to end against the Creative-Commons Blender Sintel Blu-ray ISO (real UDF 2.50 with a metadata partition): BDMV/PLAYLIST/STREAM list, the main title is selected, and the m2ts concat demuxes (H.264 1080p + AC3 + PGS).

Audio bridge diagnostics

The audio bridge pipeline label is ordered as "source -> bridge" so the logged stage order reads correctly.

Changed

  • The video decoder frame-handler contract is now @Sendable, hardening the off-actor decode callback for Swift 6 strict concurrency.
  • Bumped FFmpegBuild to 1.0.1 (FFmpeg n8.1.2).

Added

Disc inspection: AetherEngine.inspectDisc(url:) and aetherctl disc-inspect [--dump]

An FFmpeg-free, stage-by-stage walk of a local disc image: ISO9660/UDF signatures, the UDF root and BDMV tree, parsed .mpls playlists, the selected main title, and the resolved m2ts extents. It reports exactly where recognition bails, so a disc that is not recognized is debuggable instead of a silent nil. --dump adds a UDF volume-structure trace. DiscReader also emits gated [disc] diagnostics on the normal playback path.

Documentation

  • Live MPEG-TS sliding-window and DVR rewind marked device-confirmed in the formats documentation.

Full diff: 3.13.2...3.13.3