Root cause: the quality upgrade path called replaceCurrentItem mid-stream,
which re-loaded the HLS master manifest and re-picked an audio rendition,
producing a perceived loudness jump 10-30s into playback. .moviePlayback
mode amplified this by re-initializing cinematic audio processing on each
variant change.
- Start streams directly at user's desiredResolution; remove
scheduleQualityUpgrade, qualityUpgradeTask, and the 504p->best swap.
- Switch AVAudioSession mode from .moviePlayback to .default in both
MultiStreamView and SingleStreamPlayerView.
- Pin the HLS audio rendition by selecting the default audible
MediaSelectionGroup option on every new AVPlayerItem, preventing
ABR from swapping channel layouts mid-stream.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>