Explore the integration of media technologies within your app. Discuss working with audio, video, camera, and other media functionalities.

All subtopics
Posts under Media Technologies topic

Post

Replies

Boosts

Views

Activity

AVCaptureDevice.uniqueID for UVC devices is unstable - bug or overstated documentation?
The documentation for AVCaptureDevice.uniqueID states the following: Capture devices have a unique identifier that persists on one system across device connections and disconnections, application restarts, and reboots of the system itself. You can store the value returned by this property to recall or track the status of a specific device in the future. For UVC capture devices this documentation does not hold. The video uniqueID is a hex string of the form 0x<locationID><vendorID><productID>, and the identifying half is the locationID (bus number plus port path). Which identifies a port, not a device. I ran a suite of tests with three identical Elgato 4K X capture cards connected to a Mac Studio w/ M3 Ultra running macOS 26.5.2, and reproduced my findings on a MacBook w/ M3 Pro (same macOS version). See the script at the bottom of the post for how uniqueId & USB serial number are being retrieved. 1. The uniqueID follows the port. Swapping two cards between two built-in ports swaps their uniqueIDs: # Before swap. 4K X uid=0x2000000fd9009b serial=A7SNB50424UBQI 4K X uid=0x12000000fd9009b serial=A7SNB504219J0R # After swapping the cards between the same two ports. 4K X uid=0x2000000fd9009b serial=A7SNB504219J0R 4K X uid=0x12000000fd9009b serial=A7SNB50424UBQI An app that stored 0x2000000fd9009b to recall a specific capture card now silently opens another. 2. A reboot alone can swap uniqueIDs. External USB controllers (here, PCIe USB cards in two Thunderbolt enclosures) can race for bus numbers at boot, so with every cable left in place, a reboot swapped two of the cards: # Before reboot. 4K X uid=0x262000000fd9009b serial=A7SNB504219J0R 4K X uid=0x252000000fd9009b serial=A7SNB50423R73R # After reboot, no cables touched. 4K X uid=0x262000000fd9009b serial=A7SNB50423R73R 4K X uid=0x252000000fd9009b serial=A7SNB504219J0R This behavior is intermittent, a second reboot changed nothing, but a third caused another swap. Cards left alone in built-in ports retain their uniqueIDs across reboots in my testing; the failure requires dynamically enumerated external USB controllers. 3. Even the product ID tail can drift. One unit intermittently enumerates with idProduct 0x009c instead of 0x009b, same port (USB PCIe card in a Thunderbolt enclosure), cables untouched: # Before reboot. 4K X uid=0x222000000fd9009b serial=A7SNB50424UBQI # After reboot. 4K X uid=0x222000000fd9009c serial=A7SNB50424UBQI IOKit and AVFoundation agree each boot... So the change is upstream of both? I'm uncertain where to place blame for this specific issue (UVC device or macOS). Audio on the same physical units is unaffected. The audio uniqueID (AppleUSBAudioEngine:...:<serial>:...) embeds the USB serial and stayed stable through every test. So AVCaptureDevice can provide a stable per-device identifier, just not for UVC video devices. Questions: Is this a bug, or is the documentation overstating the persistence guarantee for USB video devices? What is the supported way to identify a specific physical UVC video device across reboots and port changes? The USB serial number is stable and is what I've fallen back on via IOKit, but there is no documented AVFoundation API to retrieve USB serial number from a UVC video AVCaptureDevice. Related: thread 803759, where the locationID-derived format is described. Script used for all output above (swift ./list-uvc.swift): import AVFoundation import IOKit func usbSerial(forLocation location: UInt32) -> String? { var iterator: io_iterator_t = 0 guard IOServiceGetMatchingServices(kIOMainPortDefault, IOServiceMatching("IOUSBHostDevice"), &iterator) == KERN_SUCCESS else { return nil } defer { IOObjectRelease(iterator) } var result: String? var service = IOIteratorNext(iterator) while service != 0 { var loc: UInt32 = 0 if let ref = IORegistryEntryCreateCFProperty(service, "locationID" as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue(), let num = ref as? NSNumber { loc = num.uint32Value } if loc == location, let ref = IORegistryEntryCreateCFProperty(service, "USB Serial Number" as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue(), let serial = ref as? String { result = serial } IOObjectRelease(service) if result != nil { break } service = IOIteratorNext(iterator) } return result } let session = AVCaptureDevice.DiscoverySession(deviceTypes: [.external], mediaType: .video, position: .unspecified) for device in session.devices { let uid = device.uniqueID let location = UInt32(truncatingIfNeeded: strtoull(uid, nil, 16) >> 32) let serial = usbSerial(forLocation: location) ?? "N/A" print("\(device.localizedName) uid=\(uid) serial=\(serial)") }
1
0
146
1w
Facing issues with response from Fairplay SDK based service
Currently we are building a service based on Fairplay SDK version 26.0. Currently our solution is using version 4.5.4. When we run the below request to get version we get proper response curl http://xx.xx.xx.xx:8080/fps/v Response - V26.0 Our client applications call below two APIs https://GW_HOST:8080/fairplay_cert https://GW_HOST:8080/fairplay_license Within the cert API call, we are returning the fairplay public certificate. Currently we are trying to use the test certificate provided along with Fairplay SDK (test_fps_certificate_v26.bin) Then within the fairplay_license API call, we are trying to reach fairplay service based on Fairplay SDK v26 We are seeing some issues with below request(attaching the request json payload) curl -v -X POST \ -H "Content-Type: application/json" \ -d @SDKValidation.json \ http://xx.xx.xx.xx:8080/fps SDKValidation.json We are getting below response from SDK {"fairplay-streaming-response":{"create-ckc":[{"id":1,"status":-42605}]}} When we checked the apache error logs in the file "/etc/httpd/logs/error_log" we see below error [DEBUG] ❌ Assertion failure: invalidCertificateErr (-42605) [src/extension.swift:249] This is looks to be some error related to certificate. As mentioned earlier, client application is making a certificate call where we are returning the test certificates provided along with the SDK (test_fps_certificate_v26.bin). These certificates are already configured in the credentials path. Also note that the test samples provided with the SDK return valid license response.
2
0
404
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). We also found two existing threads describing what looks like the same symptom: https://developer.apple.com/forums/thread/834950 https://developer.apple.com/forums/thread/808072 Both of those are PushToTalk apps where the system activates the audio session, and an Apple engineer notes it may be related to a CallKit issue (r.157725305). For context on our side: we do use CallKit, but only CXCallObserver — purely to detect whether a phone call comes in while a recording is in progress, so we can pause and resume around it. We do not use CXProvider or PushToTalk, and we activate our own AVAudioSession ourselves with setActive(true). I'm trying to understand whether there are other scenarios or device states that could leave a running AVAudioEngine tap returning all-zero buffers like this, and whether this is the same underlying CallKit issue (r.157725305) from those threads . And since nothing throws an error, any guidance on how to detect this at runtime and recover from it would be really helpful.
0
0
119
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). Questions: What other device states or scenarios can cause a running AVAudioEngine input tap to deliver all-zero buffers with a valid format and no error? (e.g. another process/system feature holding the mic, Continuity Camera/Mic, CallKit/PushToTalk session ownership, etc.) Since this surfaces with no error and a valid format, what is the recommended way to detect it at runtime? Is monitoring the input level / PCM energy the only signal, or is there a supported API to know the input isn't actually live? What's the recommended recovery once detected — is a full session deactivate/reactivate re-handshake sufficient, or is recreating the engine required?
1
0
130
1w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
1
0
297
1w
Channel Mapping with AUHAL
Hi, our Mac app uses AUHAL for audio output. The data we’re playing has channels laid out in the WAVE default ordering (this is the same order as Core Audio’s AudioChannelBitmap). Playing this data usually results in the correct channel playing through the correct speaker, but there are cases where it does not: Outputting audio over HDMI usually results in the Center and LFE channels being swapped Or “Configure Speakers” in Audio MIDI Setup.app can be used to change the speaker<->channel mapping (i.e. even swapping L/R on a 2ch stereo setup), but this does not affect our app’s audio I’ve found that getting kAudioUnitProperty_AudioChannelLayout on an output unit returns the speaker<->channel mapping as set up in Audio MIDI Setup (i.e. it shows that Center/LFE swap, or if L/R are swapped). My question: is it possible to have Core Audio do the channel remapping between the WAVE default ordering, and the speaker<->channel mapping as returned by kAudioUnitProperty_AudioChannelLayout? I have tried setting kAudioUnitProperty_AudioChannelLayout on the input unit, and didn’t see a change. I’ve also tried to set kAudioOutputUnitProperty_ChannelMap on the output unit but cannot get it to work. Or do I need to remap the channels myself before giving samples to Core Audio?
6
0
406
1w
AVAudioSession microphone recording changes Bluetooth audio route in vehicle
Title AVAudioSession microphone recording changes Bluetooth audio route in vehicle Hi everyone, I’m developing an iOS app called HearSave to help drivers safely remember and save songs they hear while driving. The app performs a very simple task: the user presses a button, the app records a short audio sample for music recognition, then immediately stops recording. I’m trying to understand whether the behaviour I’m seeing is an expected limitation of iOS audio routing or whether there is a better AVAudioSession configuration. Test setup iPhone connected to a vehicle via Bluetooth. Vehicle playing DAB radio. App requests microphone access and starts recording. Recording lasts approximately 7 seconds. Behaviour observed As soon as recording begins: The vehicle changes into a voice-call style audio route. DAB audio becomes muted. The vehicle’s volume control changes to voice volume. When recording finishes, the radio does not automatically recover until the user manually changes the audio source away from DAB and back again. I’ve experimented with several Expo Audio / AVAudioSession configurations, including releasing the audio session immediately after recording and adjusting audio session options, but the behaviour remains the same. My questions Is this expected behaviour when an iOS app starts microphone recording while connected to a vehicle over Bluetooth? Is there an AVAudioSession configuration that allows brief microphone capture without causing the vehicle to switch audio routes? Is it possible to explicitly use the iPhone’s built-in microphone while remaining connected to the vehicle via Bluetooth? If this behaviour is unavoidable over Bluetooth, is this also expected behaviour for native CarPlay apps, or are different audio routing capabilities available to CarPlay applications? Any guidance or documentation would be greatly appreciated. Thank you.
0
0
234
1w
Best practice for rapid sequential Live Photo captures with AVCapturePhotoOutput?
Hi everyone, I’m working on a camera app as a learning project and have reached a point where I’m trying to better understand the intended architecture for Live Photo capture using AVCapturePhotoOutput. The app currently supports: Live Photos Depth data Location metadata Multiple lens presets on a virtual multi-camera device Everything is working well, but I’m now thinking about capture throughput and rapid shutter presses. Right now, my implementation is fairly conservative. I wait for a Live Photo capture to finish processing and importing before allowing another capture. This is reliable, but it doesn’t feel particularly camera-like when compared to Apple’s Camera app. One observation from field testing caught my attention: I took a Live Photo, immediately switched lenses, then took another Live Photo. When I viewed the first Live Photo later, the movie portion included the lens-switching actions that occurred after I pressed the shutter. That made me realize that I may be thinking about the capture lifecycle incorrectly. My questions are: When using AVCapturePhotoOutput with Live Photos enabled, what is the earliest point at which a capture can be considered “safely secured”? Is it expected that apps wait for PhotoKit import to complete before accepting another Live Photo capture request? If supporting rapid sequential shutter presses, is the recommended approach to queue capture requests and process them one at a time? Are there any best practices around lens changes or camera reconfiguration while a Live Photo is still being captured or processed? I’m not looking for details about the implementation of Apple’s Camera app. I’m mainly trying to understand the recommended approach when working with the public AVFoundation APIs. I’d appreciate any guidance, documentation references, or examples from developers who have worked through similar problems. Thanks!
1
0
303
1w
H.264 MP4 video playback is choppy on iOS 27 Beta 1/2
Environment Device: iPhone (reproducible on multiple devices) OS: iOS 27 Beta 1, Beta 2 Video Format: MP4 (H.264 Main Profile) Playback Method: Apple basic player (HTML5 Video / AVPlayer) Issue We are experiencing video stuttering during playback of a specific MP4 file on iOS 27 Beta 1 and Beta 2. The video plays smoothly on previous iOS versions, but on iOS 27 Beta, playback becomes choppy with noticeable frame drops. Steps to Reproduce Prepare a device running iOS 27 Beta 1 or Beta 2. Open the video URL. https://pdst.mimacstudy.com/daesungmimacfree/CDN/MIMAC/PUBLIC/IPS/2026/P260529018_H.mp4 Start playback. Expected Result The video should play smoothly without visible frame drops. Actual Result The video stutters during playback and appears to drop frames intermittently. Additional Information The issue is consistently reproducible. The affected file is encoded as H.264 Main Profile in an MP4 container. No obvious AVPlayer or system error logs are generated during playback. Has anyone observed similar behavior on iOS 27 Beta, or is there any known change in H.264 decoding behavior that could explain this issue?
2
1
408
2w
CNAssetSpatialAudioInfo / Audio Mix rejects ProRes spatial captures (LPCM FOA) — only HEVC (APAC) is eligible. Intended? And how can Audio Mix coexist with ProRes recording?
On iOS/macOS 26, CNAssetSpatialAudioInfo(asset:) and CNAssetSpatialAudioInfo.assetContainsSpatialAudio(asset:) accept a spatial capture only when its spatial track is APAC-encoded which AVCaptureMovieFileOutput produces when the video codec is HEVC. An otherwise-identical ProRes capture, whose spatial track is LPCM (4-channel First-Order Ambisonics, kAudioChannelLayoutTag_HOA_ACN_SN3D | 4), is rejected with CNCinematicErrorDomain code 3 (CNCinematicErrorCodeIncomplete) "no eligible audio tracks in asset". This reproduces with Apple's own SpatialAudioCLI sample run on Apple's own stock iPhone captures, so it appears to be a property of the format/API rather than my code. I'd like to confirm whether this is intended, and find a supported way to obtain Audio-Mix-eligible spatial audio while still recording ProRes video (we use Apple Log/ProRes for color grading). Respectively, is wiring a manual AVAssetWriter setup the only way to manage spatial audio and ProRes video? Eligibility appears to require an APAC-encoded, exactly-4-channel FOA track. Because AVCaptureMovieFileOutput only writes APAC audio for HEVC (ProRes forces LPCM), ProRes spatial captures are never eligible — including Apple's own ProRes stock captures, which SpatialAudioCLI also rejects. Key finding: eligibility seems baked into the native APAC bitstream Starting from an eligible HEVC/APAC file, I used AVAssetReader/AVAssetWriter to re-encode only the FOA track (APAC → LPCM → APAC), leaving the AAC stereo track, the HEVC video, and the timed-metadata track untouched. The structurally-identical output is then rejected (code 3). Preserving the cinematic-audio metadata track is not sufficient. Re-encoding the APAC itself loses eligibility. This suggests the mix metadata that gates eligibility is carried inside the APAC bitstream and is produced only at capture time. Questions Is it intended that ProRes (LPCM FOA) spatial captures are not Audio-Mix-eligible via CNAssetSpatialAudioInfo, while HEVC (APAC FOA) captures are? Is this documented? Where exactly is the eligibility metadata stored — in the APAC bitstream, or in the cinematic-audio timed-metadata track (Re-encoding the APAC while preserving that metadata track still loses eligibility)? Is there any supported way to make an existing LPCM/ProRes FOA capture eligible after the fact (a transcode/encode path that produces the required APAC), or is native capture the only source? Any guidance, or a pointer to documentation, would be greatly appreciated. Thank you. Environment iPhone 16 Pro Max, iOS 26.x; macOS 26.2; Xcode 26.2.
1
0
308
2w
AirPlay mirroring freezes after switching away from full-screen video in Photos
Hello Apple team, This issue is reproducible with AirPlay mirroring from an iPhone. When a video is played full screen in the Photos app and the user then switches to another app or enters the multitasking flow, the mirrored video output freezes completely on the receiving device. The AirPlay session appears to remain connected, but the receiver keeps displaying the last video frame and the mirrored stream does not recover automatically. Stopping and restarting AirPlay mirroring is required to recover. Environment: Sender: iPhone, iOS [26.5] Receiver: AirPlay receiver device/app The same behavior can also be reproduced when mirroring from iPhone to a Mac Source app: Photos Content: local video played in full screen Steps to reproduce: Start AirPlay mirroring from an iPhone to an AirPlay receiver. Open the Photos app on the iPhone. Play a local video in full screen. While the video is playing, switch to another app or enter the multitasking flow. Observe the mirrored output on the receiver side. Video Recording: https://drive.google.com/file/d/1X9Mj9EB4IYZXjDdCaqrXfgg1PpbhZoUN/view?usp=sharing Expected behavior: AirPlay mirroring should continue smoothly after the app switch, or recover automatically when the source video/app state changes. Actual behavior: The mirrored video freezes completely. The AirPlay connection remains active, but no new video frames are rendered on the receiver side. The stream does not recover until AirPlay mirroring is stopped and restarted. Could Apple confirm whether this is a known AirPlay mirroring issue? Is there any recommended workaround, receiver-side handling, or additional diagnostic information that should be collected for this case?
2
0
340
2w
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
0
0
197
2w
Does Android MusicKit work offline?
On the MusicKit page it says This library prompts the user to sign in to Apple Music and, if Apple Music isn’t installed on the device, helps the user download it before returning to your app. Does this mean it plays the music through the Apple Music app so it will work offline if the songs have been downloaded in the Apple Music app? I would test this myself, but it's insane that I have to pay $142 AUD for a developer account just to see if it works! Absolutely insane. Hopefully someone else can test it for me.
0
0
156
2w
HomePod OS 27
Hello everyone, I am trying to get my HomePod minis on the OS 27. But it is only showing that I have a public beta of 26.5. Does anyone know how to get OS 27 to show up as an option under Betas in Home App? I am a paid member of the developer program. Any information would be great!
0
4
505
2w
Slow MusicKit library performance in Golden Gate beta 1
Hello friends! Happy WWDC. Thanks very much for all your work on MusicKit this year! I figure I’ll start things off with a bug report (sorry!). I filed a Feedback earlier today that music library operations in MusicKit are significantly slower in macOS Golden Gate beta 1 than in Tahoe. For example, a .with([.tracks]) operation on an Album takes 4-5 seconds rather than the 95ms it did in Tahoe. Sample project, traces, and sysdiagnoses in FB23037115.
2
1
280
2w
Using isCinematicVideoCaptureEnabled on videoDeviceInput for Depth Data Preview
In WWDC26 video "Camera and Photo Technologies Group Lab", @14:17, Brad Ford mentions that we can use isCinematicVideoCaptureEnabled on videoDeviceInput to display depth blur on camera preview, even on a photo camera app. However, when I turn it on for depth mode, the API tells me that it is not supported with the current camera, which is Dual or Dual Wide cameras I use for depth. Since there are no other resources on this, I would love to get some guidance on how to do this. I just want to display depth blur on camera preview, that is it.
1
0
200
2w
Metadata in Video stripped by Share Sheet / Airdrop
I have an application which records video along with some custom metadata and a chapter track. The resultant video is stored in the Camera Roll. When sharing the video via the Share Sheet or AirDrop, the metadata track is stripped entirely (the chapter markers are preserved) Sharing via AirDrop with the "All Photos Data" option does include the metadata track, as does copying from the device with Image Capture but this is a bad user experience as the user must remember to explicitly select this option, and the filename is lost when sending this way. I have also tried various other approaches (such as encoding my metadata in a subtitle track, which I didn't expect to be stripped as it's an accessibility concern) but it's also removed. Essentially I am looking for a definitive list of things that are not stripped or if there's a way to encode a track in some way to indicate it should be preserved. The metadata is added via AVTimedMetadataGroup containing one AVMutableMetadataItem which has its value as a JSON string. I took a different approach with the Chapter Marker track (mainly because I did it first in a completely different way and didn't rework it when I added the other track). I post-process these after the video is recorded, and add them with addMutableTrack and then addTrackAssociation(to: chapterTrack, type: .chapterList) but I don't think that's the reason the chapter track persists where the custom metadata does not as other tests with video files from other sources containing subtitles etc also had their subtitle data stripped. tl;dr I record videos with metadata that I want to be able to share via Share Sheet and AirDrop, what am I doing wrong?
2
0
967
2w
ImmersiveMediaRemotePreviewSender — "supportsMVHEVCEncode=0 / Failed to create ▎ immersive video rules" on M3, despite VTIsStereoMVHEVCEncodeSupported() == true
TLS + connectReceiver connect successfully, but the sender fails to negotiate the immersive video stream: VCVideoRuleCollectionsImmersiveVideoMac initSupportedPayloads: Empty supported payload: supportsMVHEVCEncode=0 Failed to create immersive video rules! AVCMediaStreamNegotiator … Failed to init … for mode=15 hardwareSettingsModeFromFeatureListStringType: Unexpected featureListStringType=0 connectReceiver failed … GKVoiceChatServiceErrorDomain 32032 Host: MacBook Pro M3 (Mac15,3), macOS 26/27. VTIsStereoMVHEVCEncodeSupported() returns true, and I set preferredVideoWidth/Height/FrameRate. Is immersive MV-HEVC encode in this API gated by an entitlement, a specific M-series tier (Pro/Max), or a known beta issue? What populates the "immersive video rules" feature list?
0
0
133
2w
ImmersiveMediaRemotePreviewSender.connectReceiver — what NWParameters / TLS config does it require?
Following the documented ImmersiveMediaSupport flow (NWBrowser → connectReceiver, NWListener → receiver.start(connection:)) with ImmersiveMediaPreviewMessagingProtocol.definition as the framer. Bonjour discovery works, but connectReceiver throws ImmersiveMediaRemotePreviewSession received invalid parameters (sometimes GKVoiceChatServiceErrorDomain 32032). The doc example leaves TLS as /* setup TLS security options */. What exact TLS configuration does the session require — a self-signed SecIdentity, TLS-PSK, a specific cipher/version? And should ImmersiveMediaRemotePreviewSender(networkParameters:) be nil (framework default) while only the NWBrowser/NWListener carry the TLS+framer params? A minimal working setupNWParameters() would unblock me. Thanks!
0
0
139
2w
AVCaptureDevice.uniqueID for UVC devices is unstable - bug or overstated documentation?
The documentation for AVCaptureDevice.uniqueID states the following: Capture devices have a unique identifier that persists on one system across device connections and disconnections, application restarts, and reboots of the system itself. You can store the value returned by this property to recall or track the status of a specific device in the future. For UVC capture devices this documentation does not hold. The video uniqueID is a hex string of the form 0x<locationID><vendorID><productID>, and the identifying half is the locationID (bus number plus port path). Which identifies a port, not a device. I ran a suite of tests with three identical Elgato 4K X capture cards connected to a Mac Studio w/ M3 Ultra running macOS 26.5.2, and reproduced my findings on a MacBook w/ M3 Pro (same macOS version). See the script at the bottom of the post for how uniqueId & USB serial number are being retrieved. 1. The uniqueID follows the port. Swapping two cards between two built-in ports swaps their uniqueIDs: # Before swap. 4K X uid=0x2000000fd9009b serial=A7SNB50424UBQI 4K X uid=0x12000000fd9009b serial=A7SNB504219J0R # After swapping the cards between the same two ports. 4K X uid=0x2000000fd9009b serial=A7SNB504219J0R 4K X uid=0x12000000fd9009b serial=A7SNB50424UBQI An app that stored 0x2000000fd9009b to recall a specific capture card now silently opens another. 2. A reboot alone can swap uniqueIDs. External USB controllers (here, PCIe USB cards in two Thunderbolt enclosures) can race for bus numbers at boot, so with every cable left in place, a reboot swapped two of the cards: # Before reboot. 4K X uid=0x262000000fd9009b serial=A7SNB504219J0R 4K X uid=0x252000000fd9009b serial=A7SNB50423R73R # After reboot, no cables touched. 4K X uid=0x262000000fd9009b serial=A7SNB50423R73R 4K X uid=0x252000000fd9009b serial=A7SNB504219J0R This behavior is intermittent, a second reboot changed nothing, but a third caused another swap. Cards left alone in built-in ports retain their uniqueIDs across reboots in my testing; the failure requires dynamically enumerated external USB controllers. 3. Even the product ID tail can drift. One unit intermittently enumerates with idProduct 0x009c instead of 0x009b, same port (USB PCIe card in a Thunderbolt enclosure), cables untouched: # Before reboot. 4K X uid=0x222000000fd9009b serial=A7SNB50424UBQI # After reboot. 4K X uid=0x222000000fd9009c serial=A7SNB50424UBQI IOKit and AVFoundation agree each boot... So the change is upstream of both? I'm uncertain where to place blame for this specific issue (UVC device or macOS). Audio on the same physical units is unaffected. The audio uniqueID (AppleUSBAudioEngine:...:<serial>:...) embeds the USB serial and stayed stable through every test. So AVCaptureDevice can provide a stable per-device identifier, just not for UVC video devices. Questions: Is this a bug, or is the documentation overstating the persistence guarantee for USB video devices? What is the supported way to identify a specific physical UVC video device across reboots and port changes? The USB serial number is stable and is what I've fallen back on via IOKit, but there is no documented AVFoundation API to retrieve USB serial number from a UVC video AVCaptureDevice. Related: thread 803759, where the locationID-derived format is described. Script used for all output above (swift ./list-uvc.swift): import AVFoundation import IOKit func usbSerial(forLocation location: UInt32) -> String? { var iterator: io_iterator_t = 0 guard IOServiceGetMatchingServices(kIOMainPortDefault, IOServiceMatching("IOUSBHostDevice"), &iterator) == KERN_SUCCESS else { return nil } defer { IOObjectRelease(iterator) } var result: String? var service = IOIteratorNext(iterator) while service != 0 { var loc: UInt32 = 0 if let ref = IORegistryEntryCreateCFProperty(service, "locationID" as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue(), let num = ref as? NSNumber { loc = num.uint32Value } if loc == location, let ref = IORegistryEntryCreateCFProperty(service, "USB Serial Number" as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue(), let serial = ref as? String { result = serial } IOObjectRelease(service) if result != nil { break } service = IOIteratorNext(iterator) } return result } let session = AVCaptureDevice.DiscoverySession(deviceTypes: [.external], mediaType: .video, position: .unspecified) for device in session.devices { let uid = device.uniqueID let location = UInt32(truncatingIfNeeded: strtoull(uid, nil, 16) >> 32) let serial = usbSerial(forLocation: location) ?? "N/A" print("\(device.localizedName) uid=\(uid) serial=\(serial)") }
Replies
1
Boosts
0
Views
146
Activity
1w
Facing issues with response from Fairplay SDK based service
Currently we are building a service based on Fairplay SDK version 26.0. Currently our solution is using version 4.5.4. When we run the below request to get version we get proper response curl http://xx.xx.xx.xx:8080/fps/v Response - V26.0 Our client applications call below two APIs https://GW_HOST:8080/fairplay_cert https://GW_HOST:8080/fairplay_license Within the cert API call, we are returning the fairplay public certificate. Currently we are trying to use the test certificate provided along with Fairplay SDK (test_fps_certificate_v26.bin) Then within the fairplay_license API call, we are trying to reach fairplay service based on Fairplay SDK v26 We are seeing some issues with below request(attaching the request json payload) curl -v -X POST \ -H "Content-Type: application/json" \ -d @SDKValidation.json \ http://xx.xx.xx.xx:8080/fps SDKValidation.json We are getting below response from SDK {"fairplay-streaming-response":{"create-ckc":[{"id":1,"status":-42605}]}} When we checked the apache error logs in the file "/etc/httpd/logs/error_log" we see below error [DEBUG] ❌ Assertion failure: invalidCertificateErr (-42605) [src/extension.swift:249] This is looks to be some error related to certificate. As mentioned earlier, client application is making a certificate call where we are returning the test certificates provided along with the SDK (test_fps_certificate_v26.bin). These certificates are already configured in the credentials path. Also note that the test samples provided with the SDK return valid license response.
Replies
2
Boosts
0
Views
404
Activity
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). We also found two existing threads describing what looks like the same symptom: https://developer.apple.com/forums/thread/834950 https://developer.apple.com/forums/thread/808072 Both of those are PushToTalk apps where the system activates the audio session, and an Apple engineer notes it may be related to a CallKit issue (r.157725305). For context on our side: we do use CallKit, but only CXCallObserver — purely to detect whether a phone call comes in while a recording is in progress, so we can pause and resume around it. We do not use CXProvider or PushToTalk, and we activate our own AVAudioSession ourselves with setActive(true). I'm trying to understand whether there are other scenarios or device states that could leave a running AVAudioEngine tap returning all-zero buffers like this, and whether this is the same underlying CallKit issue (r.157725305) from those threads . And since nothing throws an error, any guidance on how to detect this at runtime and recover from it would be really helpful.
Replies
0
Boosts
0
Views
119
Activity
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). Questions: What other device states or scenarios can cause a running AVAudioEngine input tap to deliver all-zero buffers with a valid format and no error? (e.g. another process/system feature holding the mic, Continuity Camera/Mic, CallKit/PushToTalk session ownership, etc.) Since this surfaces with no error and a valid format, what is the recommended way to detect it at runtime? Is monitoring the input level / PCM energy the only signal, or is there a supported API to know the input isn't actually live? What's the recommended recovery once detected — is a full session deactivate/reactivate re-handshake sufficient, or is recreating the engine required?
Replies
1
Boosts
0
Views
130
Activity
1w
How can i revoke/delete Fairplay Certificates
All the FPS certificates created are wrong and the limit has reached, how can i revoke / delete the certificates. I can't even retrieve the ASK string
Replies
0
Boosts
0
Views
98
Activity
1w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
Replies
1
Boosts
0
Views
297
Activity
1w
Channel Mapping with AUHAL
Hi, our Mac app uses AUHAL for audio output. The data we’re playing has channels laid out in the WAVE default ordering (this is the same order as Core Audio’s AudioChannelBitmap). Playing this data usually results in the correct channel playing through the correct speaker, but there are cases where it does not: Outputting audio over HDMI usually results in the Center and LFE channels being swapped Or “Configure Speakers” in Audio MIDI Setup.app can be used to change the speaker<->channel mapping (i.e. even swapping L/R on a 2ch stereo setup), but this does not affect our app’s audio I’ve found that getting kAudioUnitProperty_AudioChannelLayout on an output unit returns the speaker<->channel mapping as set up in Audio MIDI Setup (i.e. it shows that Center/LFE swap, or if L/R are swapped). My question: is it possible to have Core Audio do the channel remapping between the WAVE default ordering, and the speaker<->channel mapping as returned by kAudioUnitProperty_AudioChannelLayout? I have tried setting kAudioUnitProperty_AudioChannelLayout on the input unit, and didn’t see a change. I’ve also tried to set kAudioOutputUnitProperty_ChannelMap on the output unit but cannot get it to work. Or do I need to remap the channels myself before giving samples to Core Audio?
Replies
6
Boosts
0
Views
406
Activity
1w
AVAudioSession microphone recording changes Bluetooth audio route in vehicle
Title AVAudioSession microphone recording changes Bluetooth audio route in vehicle Hi everyone, I’m developing an iOS app called HearSave to help drivers safely remember and save songs they hear while driving. The app performs a very simple task: the user presses a button, the app records a short audio sample for music recognition, then immediately stops recording. I’m trying to understand whether the behaviour I’m seeing is an expected limitation of iOS audio routing or whether there is a better AVAudioSession configuration. Test setup iPhone connected to a vehicle via Bluetooth. Vehicle playing DAB radio. App requests microphone access and starts recording. Recording lasts approximately 7 seconds. Behaviour observed As soon as recording begins: The vehicle changes into a voice-call style audio route. DAB audio becomes muted. The vehicle’s volume control changes to voice volume. When recording finishes, the radio does not automatically recover until the user manually changes the audio source away from DAB and back again. I’ve experimented with several Expo Audio / AVAudioSession configurations, including releasing the audio session immediately after recording and adjusting audio session options, but the behaviour remains the same. My questions Is this expected behaviour when an iOS app starts microphone recording while connected to a vehicle over Bluetooth? Is there an AVAudioSession configuration that allows brief microphone capture without causing the vehicle to switch audio routes? Is it possible to explicitly use the iPhone’s built-in microphone while remaining connected to the vehicle via Bluetooth? If this behaviour is unavoidable over Bluetooth, is this also expected behaviour for native CarPlay apps, or are different audio routing capabilities available to CarPlay applications? Any guidance or documentation would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
234
Activity
1w
Best practice for rapid sequential Live Photo captures with AVCapturePhotoOutput?
Hi everyone, I’m working on a camera app as a learning project and have reached a point where I’m trying to better understand the intended architecture for Live Photo capture using AVCapturePhotoOutput. The app currently supports: Live Photos Depth data Location metadata Multiple lens presets on a virtual multi-camera device Everything is working well, but I’m now thinking about capture throughput and rapid shutter presses. Right now, my implementation is fairly conservative. I wait for a Live Photo capture to finish processing and importing before allowing another capture. This is reliable, but it doesn’t feel particularly camera-like when compared to Apple’s Camera app. One observation from field testing caught my attention: I took a Live Photo, immediately switched lenses, then took another Live Photo. When I viewed the first Live Photo later, the movie portion included the lens-switching actions that occurred after I pressed the shutter. That made me realize that I may be thinking about the capture lifecycle incorrectly. My questions are: When using AVCapturePhotoOutput with Live Photos enabled, what is the earliest point at which a capture can be considered “safely secured”? Is it expected that apps wait for PhotoKit import to complete before accepting another Live Photo capture request? If supporting rapid sequential shutter presses, is the recommended approach to queue capture requests and process them one at a time? Are there any best practices around lens changes or camera reconfiguration while a Live Photo is still being captured or processed? I’m not looking for details about the implementation of Apple’s Camera app. I’m mainly trying to understand the recommended approach when working with the public AVFoundation APIs. I’d appreciate any guidance, documentation references, or examples from developers who have worked through similar problems. Thanks!
Replies
1
Boosts
0
Views
303
Activity
1w
H.264 MP4 video playback is choppy on iOS 27 Beta 1/2
Environment Device: iPhone (reproducible on multiple devices) OS: iOS 27 Beta 1, Beta 2 Video Format: MP4 (H.264 Main Profile) Playback Method: Apple basic player (HTML5 Video / AVPlayer) Issue We are experiencing video stuttering during playback of a specific MP4 file on iOS 27 Beta 1 and Beta 2. The video plays smoothly on previous iOS versions, but on iOS 27 Beta, playback becomes choppy with noticeable frame drops. Steps to Reproduce Prepare a device running iOS 27 Beta 1 or Beta 2. Open the video URL. https://pdst.mimacstudy.com/daesungmimacfree/CDN/MIMAC/PUBLIC/IPS/2026/P260529018_H.mp4 Start playback. Expected Result The video should play smoothly without visible frame drops. Actual Result The video stutters during playback and appears to drop frames intermittently. Additional Information The issue is consistently reproducible. The affected file is encoded as H.264 Main Profile in an MP4 container. No obvious AVPlayer or system error logs are generated during playback. Has anyone observed similar behavior on iOS 27 Beta, or is there any known change in H.264 decoding behavior that could explain this issue?
Replies
2
Boosts
1
Views
408
Activity
2w
CNAssetSpatialAudioInfo / Audio Mix rejects ProRes spatial captures (LPCM FOA) — only HEVC (APAC) is eligible. Intended? And how can Audio Mix coexist with ProRes recording?
On iOS/macOS 26, CNAssetSpatialAudioInfo(asset:) and CNAssetSpatialAudioInfo.assetContainsSpatialAudio(asset:) accept a spatial capture only when its spatial track is APAC-encoded which AVCaptureMovieFileOutput produces when the video codec is HEVC. An otherwise-identical ProRes capture, whose spatial track is LPCM (4-channel First-Order Ambisonics, kAudioChannelLayoutTag_HOA_ACN_SN3D | 4), is rejected with CNCinematicErrorDomain code 3 (CNCinematicErrorCodeIncomplete) "no eligible audio tracks in asset". This reproduces with Apple's own SpatialAudioCLI sample run on Apple's own stock iPhone captures, so it appears to be a property of the format/API rather than my code. I'd like to confirm whether this is intended, and find a supported way to obtain Audio-Mix-eligible spatial audio while still recording ProRes video (we use Apple Log/ProRes for color grading). Respectively, is wiring a manual AVAssetWriter setup the only way to manage spatial audio and ProRes video? Eligibility appears to require an APAC-encoded, exactly-4-channel FOA track. Because AVCaptureMovieFileOutput only writes APAC audio for HEVC (ProRes forces LPCM), ProRes spatial captures are never eligible — including Apple's own ProRes stock captures, which SpatialAudioCLI also rejects. Key finding: eligibility seems baked into the native APAC bitstream Starting from an eligible HEVC/APAC file, I used AVAssetReader/AVAssetWriter to re-encode only the FOA track (APAC → LPCM → APAC), leaving the AAC stereo track, the HEVC video, and the timed-metadata track untouched. The structurally-identical output is then rejected (code 3). Preserving the cinematic-audio metadata track is not sufficient. Re-encoding the APAC itself loses eligibility. This suggests the mix metadata that gates eligibility is carried inside the APAC bitstream and is produced only at capture time. Questions Is it intended that ProRes (LPCM FOA) spatial captures are not Audio-Mix-eligible via CNAssetSpatialAudioInfo, while HEVC (APAC FOA) captures are? Is this documented? Where exactly is the eligibility metadata stored — in the APAC bitstream, or in the cinematic-audio timed-metadata track (Re-encoding the APAC while preserving that metadata track still loses eligibility)? Is there any supported way to make an existing LPCM/ProRes FOA capture eligible after the fact (a transcode/encode path that produces the required APAC), or is native capture the only source? Any guidance, or a pointer to documentation, would be greatly appreciated. Thank you. Environment iPhone 16 Pro Max, iOS 26.x; macOS 26.2; Xcode 26.2.
Replies
1
Boosts
0
Views
308
Activity
2w
AirPlay mirroring freezes after switching away from full-screen video in Photos
Hello Apple team, This issue is reproducible with AirPlay mirroring from an iPhone. When a video is played full screen in the Photos app and the user then switches to another app or enters the multitasking flow, the mirrored video output freezes completely on the receiving device. The AirPlay session appears to remain connected, but the receiver keeps displaying the last video frame and the mirrored stream does not recover automatically. Stopping and restarting AirPlay mirroring is required to recover. Environment: Sender: iPhone, iOS [26.5] Receiver: AirPlay receiver device/app The same behavior can also be reproduced when mirroring from iPhone to a Mac Source app: Photos Content: local video played in full screen Steps to reproduce: Start AirPlay mirroring from an iPhone to an AirPlay receiver. Open the Photos app on the iPhone. Play a local video in full screen. While the video is playing, switch to another app or enter the multitasking flow. Observe the mirrored output on the receiver side. Video Recording: https://drive.google.com/file/d/1X9Mj9EB4IYZXjDdCaqrXfgg1PpbhZoUN/view?usp=sharing Expected behavior: AirPlay mirroring should continue smoothly after the app switch, or recover automatically when the source video/app state changes. Actual behavior: The mirrored video freezes completely. The AirPlay connection remains active, but no new video frames are rendered on the receiver side. The stream does not recover until AirPlay mirroring is stopped and restarted. Could Apple confirm whether this is a known AirPlay mirroring issue? Is there any recommended workaround, receiver-side handling, or additional diagnostic information that should be collected for this case?
Replies
2
Boosts
0
Views
340
Activity
2w
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
Replies
0
Boosts
0
Views
197
Activity
2w
Does Android MusicKit work offline?
On the MusicKit page it says This library prompts the user to sign in to Apple Music and, if Apple Music isn’t installed on the device, helps the user download it before returning to your app. Does this mean it plays the music through the Apple Music app so it will work offline if the songs have been downloaded in the Apple Music app? I would test this myself, but it's insane that I have to pay $142 AUD for a developer account just to see if it works! Absolutely insane. Hopefully someone else can test it for me.
Replies
0
Boosts
0
Views
156
Activity
2w
HomePod OS 27
Hello everyone, I am trying to get my HomePod minis on the OS 27. But it is only showing that I have a public beta of 26.5. Does anyone know how to get OS 27 to show up as an option under Betas in Home App? I am a paid member of the developer program. Any information would be great!
Replies
0
Boosts
4
Views
505
Activity
2w
Slow MusicKit library performance in Golden Gate beta 1
Hello friends! Happy WWDC. Thanks very much for all your work on MusicKit this year! I figure I’ll start things off with a bug report (sorry!). I filed a Feedback earlier today that music library operations in MusicKit are significantly slower in macOS Golden Gate beta 1 than in Tahoe. For example, a .with([.tracks]) operation on an Album takes 4-5 seconds rather than the 95ms it did in Tahoe. Sample project, traces, and sysdiagnoses in FB23037115.
Replies
2
Boosts
1
Views
280
Activity
2w
Using isCinematicVideoCaptureEnabled on videoDeviceInput for Depth Data Preview
In WWDC26 video "Camera and Photo Technologies Group Lab", @14:17, Brad Ford mentions that we can use isCinematicVideoCaptureEnabled on videoDeviceInput to display depth blur on camera preview, even on a photo camera app. However, when I turn it on for depth mode, the API tells me that it is not supported with the current camera, which is Dual or Dual Wide cameras I use for depth. Since there are no other resources on this, I would love to get some guidance on how to do this. I just want to display depth blur on camera preview, that is it.
Replies
1
Boosts
0
Views
200
Activity
2w
Metadata in Video stripped by Share Sheet / Airdrop
I have an application which records video along with some custom metadata and a chapter track. The resultant video is stored in the Camera Roll. When sharing the video via the Share Sheet or AirDrop, the metadata track is stripped entirely (the chapter markers are preserved) Sharing via AirDrop with the "All Photos Data" option does include the metadata track, as does copying from the device with Image Capture but this is a bad user experience as the user must remember to explicitly select this option, and the filename is lost when sending this way. I have also tried various other approaches (such as encoding my metadata in a subtitle track, which I didn't expect to be stripped as it's an accessibility concern) but it's also removed. Essentially I am looking for a definitive list of things that are not stripped or if there's a way to encode a track in some way to indicate it should be preserved. The metadata is added via AVTimedMetadataGroup containing one AVMutableMetadataItem which has its value as a JSON string. I took a different approach with the Chapter Marker track (mainly because I did it first in a completely different way and didn't rework it when I added the other track). I post-process these after the video is recorded, and add them with addMutableTrack and then addTrackAssociation(to: chapterTrack, type: .chapterList) but I don't think that's the reason the chapter track persists where the custom metadata does not as other tests with video files from other sources containing subtitles etc also had their subtitle data stripped. tl;dr I record videos with metadata that I want to be able to share via Share Sheet and AirDrop, what am I doing wrong?
Replies
2
Boosts
0
Views
967
Activity
2w
ImmersiveMediaRemotePreviewSender — "supportsMVHEVCEncode=0 / Failed to create ▎ immersive video rules" on M3, despite VTIsStereoMVHEVCEncodeSupported() == true
TLS + connectReceiver connect successfully, but the sender fails to negotiate the immersive video stream: VCVideoRuleCollectionsImmersiveVideoMac initSupportedPayloads: Empty supported payload: supportsMVHEVCEncode=0 Failed to create immersive video rules! AVCMediaStreamNegotiator … Failed to init … for mode=15 hardwareSettingsModeFromFeatureListStringType: Unexpected featureListStringType=0 connectReceiver failed … GKVoiceChatServiceErrorDomain 32032 Host: MacBook Pro M3 (Mac15,3), macOS 26/27. VTIsStereoMVHEVCEncodeSupported() returns true, and I set preferredVideoWidth/Height/FrameRate. Is immersive MV-HEVC encode in this API gated by an entitlement, a specific M-series tier (Pro/Max), or a known beta issue? What populates the "immersive video rules" feature list?
Replies
0
Boosts
0
Views
133
Activity
2w
ImmersiveMediaRemotePreviewSender.connectReceiver — what NWParameters / TLS config does it require?
Following the documented ImmersiveMediaSupport flow (NWBrowser → connectReceiver, NWListener → receiver.start(connection:)) with ImmersiveMediaPreviewMessagingProtocol.definition as the framer. Bonjour discovery works, but connectReceiver throws ImmersiveMediaRemotePreviewSession received invalid parameters (sometimes GKVoiceChatServiceErrorDomain 32032). The doc example leaves TLS as /* setup TLS security options */. What exact TLS configuration does the session require — a self-signed SecIdentity, TLS-PSK, a specific cipher/version? And should ImmersiveMediaRemotePreviewSender(networkParameters:) be nil (framework default) while only the NWBrowser/NWListener carry the TLS+framer params? A minimal working setupNWParameters() would unblock me. Thanks!
Replies
0
Boosts
0
Views
139
Activity
2w