AVMutableComposition audio silently drops on iOS 26 when streaming over HTTP/2 (FB22696516)

We've discovered a regression in iOS 26 where AVMutableComposition silently drops audio when the source asset is streamed over HTTP/2. The same file served over HTTP/1.1 plays audio correctly through the same composition code. Direct AVPlayer playback (without composition) works fine on HTTP/2. This did not occur on iOS 18.x.

It happens on physical devices only. It does not reproduce on a simulator or on macOS.

Tested conditions (same MP4 file, different CDNs):

  • CloudFront (HTTP/2) + Composition → ❌ Audio silent
  • Cloudflare (HTTP/2) + Composition → ❌ Audio silent
  • Akamai (HTTP/1.1) + Composition → ✅ Audio works
  • Apple TS (HTTP/1.1) + Composition → ✅ Audio works
  • Downloaded locally, then composed → ✅ Audio works
  • Direct playback, no composition (HTTP/2) → ✅ Audio works

The CloudFront and Akamai URLs serve the identical file — same S3 object, different CDN edge. CDN vendor doesn't matter; any HTTP/2 source triggers it.

Minimal reproduction:

let asset = AVURLAsset(url: http2URL)
let videoTrack = try await asset.loadTracks(withMediaType: .video).first!
let audioTrack = try await asset.loadTracks(withMediaType: .audio).first!
let duration = try await asset.load(.duration)

let composition = AVMutableComposition()
let fullRange = CMTimeRange(start: .zero, end: duration)

let compVideo = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)!
try compVideo.insertTimeRange(fullRange, of: videoTrack, at: .zero)

let compAudio = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)!
try compAudio.insertTimeRange(fullRange, of: audioTrack, at: .zero)

let item = AVPlayerItem(asset: composition.copy() as! AVComposition)
player.replaceCurrentItem(with: item)
player.play()
// Video plays, audio goes silent after a while

Playing the same asset directly works fine:

player.replaceCurrentItem(with: AVPlayerItem(asset: asset))
player.play() // Both video and audio work

Filed as FB22696516

Sample project: https://github.com/karlingen/AVCompositionBug

Great report @karlingen. We're also experiencing this same issue in iOS 26.

AVMutableComposition audio silently drops on iOS 26 when streaming over HTTP/2 (FB22696516)
 
 
Q