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

Apple Music data not syncing via MusicKit / Apple Music API
Hi, experiencing an issue with Apple Music syncing in our app. Apple Music data hasn’t been syncing for a while. We’ve investigated the issue on our side and haven’t found anything that could explain it, so we’d like to check whether there are any known issues or recent changes affecting Apple Music API data. Could someone from the Apple Music/MusicKit team help us investigate this? We can provide affected user examples, timestamps, API responses, and any other information needed.
0
0
29
4d
Picture-In-Picture not starting with Custom Player
Team, I am trying to start PictureInPicture for my video from custom player as mentioned in the following link, but I am getting an error Steps: Created a player using AVPlayer. Initiated AVPictureInPictureController with AVPlayerLayer Added observer on PIP button enable status When PIP button is tapped executed pipController.startPictureInPicture() statement. PIP is not getting started & getting following error Project created in Xcode11 & currently using Xcode13.2 Error Domain=AVKitErrorDomain Code=-1001 "Failed to start picture in picture." UserInfo={NSLocalizedDescription=Failed to start picture in picture., NSLocalizedFailureReason=The UIScene for the content source has an activation state other than UISceneActivationStateForegroundActive, which is not allowed.} I didn't get any solutions online, plz help me on this issue. FYI: PIP button/mode is working if I use AVPlayerViewController(with default playerItem buttons) instead of AVPlayer & AVPictureInPictureController with custom controls Thanks in advance. Adopting Picture in Picture in a Custom Player
3
2
1.7k
5d
macOS 27 regression: HDMI + DisplayPort Multi-Output audio fails with Core Audio error 1937010544
Hi, I believe I have found a Core Audio regression in macOS 27. This exact hardware configuration worked correctly on macOS 26, and the issue started immediately after upgrading to macOS 27. Hardware: Mac mini M2 2 × MSI MP243X monitors Monitor 1 connected via HDMI Monitor 2 connected via DisplayPort Both monitors expose a 2-channel audio output to macOS On macOS 26: I used Audio MIDI Setup to create a Multi-Output Device containing both MSI MP243X audio outputs. Audio played simultaneously through both monitors without any issues. On macOS 27: Both audio devices are still detected correctly and both work perfectly when selected individually: HDMI only: WORKS DisplayPort only: WORKS HDMI + DisplayPort simultaneously: FAILS This is reproducible even immediately after a full reboot. When I create a new Multi-Output Device containing both MSI outputs and select it as the system output, audio playback cannot start. For example: afplay /System/Library/Sounds/Glass.aiff returns: Error: AudioQueueStart failed ('stop') I captured Core Audio debug logs while reproducing the problem. Core Audio initially reports that StartIO succeeded, but the physical display audio device then fails to establish a timeline. Relevant log messages include: HALS_IOEngine2::_StartIO succeeded Device 3669B540-0000-0000-2623-0104A5351D78 is not running. could not establish a timeline after waiting 10000000 microseconds stopping with error 1937010544 StartIOThread: the IO thread failed to start, Error: 1937010544 I have already tested the following: Both devices at 44.1 kHz / 24-bit Both devices at 48 kHz / 16-bit Recreating the Multi-Output Device from scratch Using the HDMI device as clock source Using the DisplayPort device as clock source Different drift correction configurations Restarting coreaudiod Full macOS reboot Testing both outputs individually immediately after reboot Alternative multi-device audio routing software The behavior is always reproducible. Each MSI MP243X audio endpoint works correctly by itself. The failure only occurs when both HDMI and DisplayPort audio endpoints are opened simultaneously. system_profiler correctly detects both devices at 48 kHz: MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: HDMI MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: DisplayPort This does not appear to be a problem with either monitor or connection individually, because both outputs continue to work independently. The important difference is the macOS version: macOS 26: HDMI + DisplayPort Multi-Output = WORKING macOS 27: HDMI only = WORKING DisplayPort only = WORKING HDMI + DisplayPort Multi-Output = FAILS with AudioQueueStart 'stop' / Core Audio error 1937010544 No hardware, monitor, cable, or connection changes were made between the working macOS 26 configuration and the macOS 27 configuration. This therefore appears to be a regression in the Core Audio/display-audio path introduced with macOS 27 when two display audio endpoints (HDMI + DisplayPort) are opened simultaneously. Has anyone else been able to reproduce this on macOS 27, particularly on Apple Silicon? I can provide the complete coreaudiod logs and run additional Core Audio diagnostics if needed. Additional isolation tests: Both monitors can remain physically connected to the Mac at the same time. With both HDMI and DisplayPort connected: Selecting the HDMI MSI MP243X as the only output works correctly. Selecting the DisplayPort MSI MP243X as the only output works correctly. Opening both audio endpoints simultaneously causes the failure. Therefore, simply having both displays connected does not trigger the issue. The failure appears specifically when Core Audio attempts to run both display-audio endpoints at the same time. I also tested this using third-party multi-device audio routing implementations instead of relying only on Audio MIDI Setup. The same behavior occurs: either MSI MP243X can be opened and used independently, but attempting to route audio to both devices simultaneously fails. This suggests that the issue is below the Multi-Output Device configuration itself and may be related to starting/synchronizing two display-audio IO engines simultaneously. During the failure, the Core Audio log sequence is particularly interesting: The physical device is detected normally. The audio format is configured successfully. Core Audio reports that StartIO succeeded. The device subsequently reports that it is not running. Core Audio waits 10 seconds for a timeline. Timeline establishment fails. The IO thread terminates with error 1937010544 ('stop'). One captured conversion path was: 2 ch, 48000 Hz, Float32, interleaved -> 2 ch, 48000 Hz, Int16, interleaved so both sides were operating at 48 kHz during this test. Another important observation is that restarting coreaudiod does not resolve the simultaneous-output problem. A complete reboot also does not resolve it: immediately after a fresh boot, before launching any third-party audio-routing software, both physical outputs work individually but a newly created Multi-Output Device still reproduces the failure. This makes the issue highly reproducible on this machine. Minimal reproduction: Boot macOS 27 with both MSI MP243X monitors connected. Open Audio MIDI Setup. Verify both MSI MP243X devices work independently. Set both devices to 48,000 Hz. Create a new Multi-Output Device. Select both MSI MP243X devices. Select the new Multi-Output Device as the system audio output. Run: afplay /System/Library/Sounds/Glass.aiff Expected result: The sound is reproduced simultaneously through both monitors, as it was on macOS 26. Actual result: Error: AudioQueueStart failed ('stop') Switching the system output back to either individual MSI MP243X restores audio playback. The problem can then be reproduced again by selecting the Multi-Output Device.
1
0
623
5d
MusicKit API — Compatibility question regarding user-initiated scoring method
Hi everyone, I'm building Sidetick, a concert ticketing and cultural discovery platform. I have an active Apple Developer Program account with MusicKit access. I want to implement the following flow and need to know if it complies with the MusicKit License Agreement: User authenticates via MusicKit (explicit OAuth consent) We read their heavy-rotation and library/artists in memory We calculate a fan affinity score per artist (e.g. "480 XP with Angèle") — entirely in-memory, never written to our DB We show the user: "We found these artists — which ones do you want to follow on Sidetick?" User explicitly picks their favorites ALL Apple Music API data is immediately deleted from our systems What we store is only the user's Sidetick declaration: {artist: "Angèle", xp: 480} — no Apple Music raw data retained After this, ALL gamification (fan ranking, ticket priority, rewards) is based exclusively on Sidetick first-party actions (ticket purchases, attended concerts, referrals) — zero Apple Music data involved. The intent: MusicKit is used as a one-time discovery bootstrap to help users identify which artists to follow on Sidetick. Apple Music data is never stored, never shared with third parties, never used for advertising. My questions: Is this use case compatible with the MusicKit License Agreement? Is storing the calculated XP score (after deleting the source Apple Music data) considered retaining Apple Music data? Is there a specific clause we should be careful about? Thanks in advance — any Apple engineer or experienced MusicKit dev input is very welcome. =D
0
0
74
5d
Best supported transport for low-latency live video between two iPhones, including wired options
We are building an iOS video-editing companion workflow. An iPhone 17 Pro (USB-C) is the editor/master; an iPhone 14 Pro Max (Lightning) displays its continuous frame-by-frame live preview. The companion must follow playback, pause, seeks, and edits. It does not use a local copy of the media. Our prototype captures composed AVPlayer output with AVPlayerItemVideoOutput, encodes H.264 in real time with VideoToolbox, sends samples through an MCSession stream, and renders them with AVSampleBufferDisplayLayer. We want the best public, App Store-compatible transport for high quality, low latency, adaptive resolution, and reliable recovery. Can an ordinary iOS app send arbitrary stream or IP data directly between these two iPhones over a USB-C-to-Lightning cable? If not, is wired Ethernet via supported adapters and a common network the supported wired option? What are the discovery/routing constraints? For wireless peer-to-peer video on current iOS, should we prefer Network framework with Wi-Fi Aware where available, peer-to-peer Wi-Fi, or another transport over MultipeerConnectivity? Can Network framework prefer a wired Ethernet interface and switch paths without losing the editing session? For a live editing preview, which transport and codec patterns keep latency bounded while preserving frame order and recovering promptly after loss or a seek? Are QUIC streams/datagrams appropriate? What receiver feedback should drive bitrate or resolution changes and keyframe requests? Are there public examples or documentation specifically for live video between two iPhones with this USB-C/Lightning pairing? We cannot share the full Xcode project publicly, but can create a minimal reproducible example if needed. We would appreciate guidance based on public APIs and supported hardware paths.
0
0
48
5d
`LockedCameraCaptureManager` practically unusable since iOS 26
Somewhere since iOS 26, the LockedCameraCapture framework gets in an unpredictable state after opening the main app from the LockedCamera extension using LockedCameraCaptureSession.openApplication(for userActivity:). (Feedback with sample code to reproduce: FB21966835) Opening the extension from the lock screen again doesn’t open the extension but puts the lock screen in a state as if it has. Content updated from LockedCameraCaptureManager.shared.sessionContentUpdates comes in inconsistently, usually needs the app to be opened again or the extension to be opened. This makes using this extension impossible for me as I use it to record video files that manually need to be imported when the app is launched (so not through PhotoKit). Does anybody have a suggestion to circumvent this issue or how to get this fixed?
2
3
1.2k
5d
AVPlayerItemSampleBufferOutput
I am using AVPlayer, but I am unable to retrieve PCM data from .m3u8 streams via the AVPlayerItemSampleBufferOutput API in iOS 27 beta. I have tried both the Objective-C and Swift APIs: the Objective-C delegate methods are not being called, and the Swift methods nextAvailableSampleBuffer() and nextSampleBuffer() are returning no data.
2
1
663
6d
fail to get HLS realtime stream via AVPlayerItemSampleBufferOutputDelegate
Hi, I'm trying to do some realtime audio processing on audio served from an HLS stream (i.e. an AVPlayer created using an M3U HTTP URL). And I find that new APIs(AVPlayerItemSampleBufferOutput) are available in iOS 27.0 to achieve it. However, I failed to get the available data via the AVPlayerItemSampleBufferOutputDelegate. And I found some error in the system log: I create AVPlayerItemSampleBufferOutput and set the delegate after receiving the AVPlayerItemStatusReadyToPlay event. And here's my code: @interface OCAudioSamplebuffer () <AVPlayerItemSampleBufferOutputDelegate> @property (nonatomic, strong) AVPlayerItemSampleBufferOutput *bufferOutput; @property (nonatomic, strong) dispatch_queue_t bufferOutputQueue; @property (nonatomic, strong) AVPlayerItem *playerItem; @end - (void)playItem:(AVPlayerItem *)item { if (@available(iOS 27, *)) { AVAudioSession *audioSession = [AVAudioSession sharedInstance]; if([NSThread mainThread]){ [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryPlayback error:nil]; [audioSession setActive:YES error:nil]; }else{ dispatch_async(dispatch_get_main_queue(), ^{ [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryPlayback error:nil]; [audioSession setActive:YES error:nil]; }); } AVPlayerItemSampleBufferOutputAudioConfiguration *cfg = [[AVPlayerItemSampleBufferOutputAudioConfiguration alloc] init]; CMFormatDescriptionRef formatDescription = [self createPCMFormatDescriptionWithSampleRate:44100.0 channels:2 isFloat:YES]; cfg.requestedAudioFormat = formatDescription; if (formatDescription) { NSLog(@"create PCM Format Description success"); CFRelease(formatDescription); } else { NSLog(@"fail to create PCM Format Description"); } self.bufferOutput = [[AVPlayerItemSampleBufferOutput alloc] initWithConfiguration:cfg]; NSLog(@"create buffer success, PCM Format Description%@---,%@", cfg.requestedAudioFormat, formatDescription); self.bufferOutputQueue = dispatch_queue_create("audioSamplebufferQueue", DISPATCH_QUEUE_CONCURRENT); [self.bufferOutput setDelegate:self queue:self.bufferOutputQueue]; [item addOutput:self.bufferOutput]; self.playerItem = item; } else { // Fallback on earlier versions } } Any help. Thank you
2
0
928
6d
Tracks missing from Apple Music API listening history
I have a product that relies on the Apple Music API's "recently played tracks" endpoint. Recently, a few users are reporting that there are songs missing from their history. I was able to observe this myself—the issue corrected itself after re-authenticating with Apple Music, but unfortunately for at least one user this is not helping in their case. What's odd is that there is some inconsistency about what shows in the recently played tracks endpoint. Some examples My own account: ✅ Music from my playlists ✅ Albums and singles ✅ Apple editorial playlists ❌ Playlists created by other users User 1: ❌ Music from their playlists ✅ Albums and singles ❌ Apple editorial playlists ❌ Playlists created by other users In most cases, all four of these would appear in the recent tracks API. What could cause these tracks to be missing from the listening history endpoint? Listening history is already enabled for the devices they're using, but the songs are appearing inconsistently.
1
3
457
6d
Is there a way to directly go from VideoToolbox to Metal for 10-bit/BT.2020 YCbCr HEVC?
tl;dr how can I get raw YUV in a Metal fragment shader from a VideoToolbox 10-bit/BT.2020 HEVC stream without any extra/secret format conversions? With VideoToolbox and 10-bit HEVC, I've found that it defaults to CVPixelBuffers w/ formats kCVPixelFormatType_Lossless_420YpCbCr10PackedBiPlanarFullRange or kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarFullRange. To mitigate this, I have the following snippet of code to my application: // We need our pixels unpacked for 10-bit so that the Metal textures actually work var pixelFormat:OSType? = nil let bpc = getBpcForVideoFormat(videoFormat!) let isFullRange = getIsFullRangeForVideoFormat(videoFormat!) // TODO: figure out how to check for 422/444, CVImageBufferChromaLocationBottomField? if bpc == 10 { pixelFormat = isFullRange ? kCVPixelFormatType_420YpCbCr10BiPlanarFullRange : kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange } let videoDecoderSpecification:[NSString: AnyObject] = [kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder:kCFBooleanTrue] var destinationImageBufferAttributes:[NSString: AnyObject] = [kCVPixelBufferMetalCompatibilityKey: true as NSNumber, kCVPixelBufferPoolMinimumBufferCountKey: 3 as NSNumber] if pixelFormat != nil { destinationImageBufferAttributes[kCVPixelBufferPixelFormatTypeKey] = pixelFormat! as NSNumber } var decompressionSession:VTDecompressionSession? = nil err = VTDecompressionSessionCreate(allocator: nil, formatDescription: videoFormat!, decoderSpecification: videoDecoderSpecification as CFDictionary, imageBufferAttributes: destinationImageBufferAttributes as CFDictionary, outputCallback: nil, decompressionSessionOut: &decompressionSession) In short, I need kCVPixelFormatType_420YpCbCr10BiPlanar so that I have a straightforward MTLPixelFormat.r16Unorm/MTLPixelFormat.rg16Unorm texture binding for Y/CbCr. Metal, seemingly, has no direct pixel format for 420YpCbCr10PackedBiPlanar. I'd also rather not use any color conversion in VideoToolbox, in order to save on processing (and to ensure that the color transforms/transfer characteristics match between streamer/client, since I also have a custom transfer characteristic to mitigate blocking in dark scenes). However, I noticed that in visionOS 2, the CVPixelBuffer I receive is no longer a compressed render target (likely a bug), which caused GPU texture read bandwidth to skyrocket from 2GiB/s to 30GiB/s. More importantly, this implies that VideoToolbox may in fact be doing an extra color conversion step, wasting memory bandwidth. Does Metal actually have no way to handle 420YpCbCr10PackedBiPlanar? Are there any examples for reading 10-bit HDR HEVC buffers directly with Metal?
3
0
1.9k
6d
Push-to-start RemoteMediaSession never appears on Lock Screen/Control Center without opening the app — expected behavior?
I'm implementing the new NowPlaying framework's remote-session push-to-start flow (per Publishing remote media sessions) to show a Sonos-like remote speaker's playback on the Lock Screen/Control Center without requiring my app to be running. The docs say: Your server can start, update, or end sessions when your app isn't running. Use this approach when playback starts from a remote device without someone opening your app. That section never mentions requestToBecomeSystemPrimary() — that's only documented under "Start and update sessions from your app," with a note that it's a no-op unless the app is foregrounded. In my testing, though, a session created purely via a push-to-start "event":"start" push never shows up anywhere in system UI (not Control Center, not the Lock Screen) until I open the app at least once. The mechanism itself works correctly — RemoteMediaSessionExtension.session(_:) fires reliably, decodes the attributes correctly, and returns a valid RemoteMediaSessionRepresentable (confirmed via on-device logging: no errors, clean construction every time, across dozens of test pushes). It just isn't surfaced. To rule out anything on my end, I've tested: Sending via my own server (correct apns-topic/apns-push-type headers, confirmed working via HTTP/2 200 and correct decode) Sending via the Push Notifications Console directly, with Environment explicitly set to Production (my push-to-start token only validates against production, matching the known dev-signed-token-provisions-against-production quirk) A hand-built, minimal, fully valid payload for a completely fresh, never-before-registered session id Every combination produces a correctly-constructed session that's invisible until the app opens — at which point my own app code (unrelated to the push) independently constructs and promotes its own session via RemoteMediaSession.start() + requestToBecomeSystemPrimary() in the foreground. Has anyone gotten a push-to-start session to actually appear on the Lock Screen/Control Center without opening the app first? Is there an additional step beyond what's in the current docs (some other registration, entitlement, or timing requirement) that's needed for that, or is this expected behavior right now and the docs are ahead of the implementation? FB24876585 filed on Feedback Assistant with app logs attached.
0
0
50
6d
Synchronization between displays (M6/M5 Pro)
Hello, Apple recently announced that M6 and M5 Pro are featuring genlock support through USB-C to enables precise synchronization between a display and camera. Regarding displays : would this be possible to frame-lock several displays with this feature ? I mean outputting through several Thunderbolt and synchronizing every output so they works exactly at the same frequency and show exactly the same frame at the same time. If so, how would this work ? Is there some documentation about genlocking displays ? Thank you for your help.
1
1
157
6d
Music.app hangs on Library tab with Sync Library enabled — iOS 27.2 beta
On iPhone 17 Pro Max running iOS 27.2 beta (24B5084k), Music.app hangs and is watchdog-terminated when opening the Library tab, but only with Sync Library enabled. to reproduce: 1. Settings › Apps › Music › Sync Library OFF — app works normally. 2. Enable Sync Library, let it finish syncing. 3. Open Music and navigate to the Library tab. Result: The app freezes immediately and is terminated. Home, Radio and Search all play normally with Sync Library on — the hang is isolated to the Library tab. The stackshot from Analytics Data shows multiple threads blocked on a single thread, including com.apple.SwiftUI.AsyncRenderer, with the watchdog reporting "Failed to terminate gracefully after 5.0s". No VPN, no automatic downloads, no local files. The same Apple Music account works normally on iPadOS 26 and on Apple Music for Windows. 100% reproducible. Filed as FB24865181. Has anyone else hit this? If so, does your Music- analytics log show the same blocked-thread signature?
0
1
347
1w
AVSpeechSynthesizer does not work on "Mac (Designed for iPad)", with some voices
The iOS 26 sample below speaks well on iPhone/iPad devices and the iOS simulator. But it does not speak on "Mac (Designed for iPad)", with a voice downloaded via the macOS settings. Instead it issues this warning : Invalid maui voice identifier com.apple.voice.enhanced.en-US.Samantha How to make an iOS app speak on "Mac (Designed for iPad)", with a downloaded voice ? Note : I use iOS 26.5.2 and macOS 26.5.2. I use voices that can be found in System Settings > Accessibility > Read & Speak > System voice. I have checked that "Samantha (Enhanced)" is the "System voice" in the macOS settings. I have checked that the same issue occurs with other voices and other languages. There is no such issue for a voice that never needs to be downloaded. import AVFAudio import SwiftUI @main struct SampleApp: App { var body: some Scene { WindowGroup { SampleView() } } } struct SampleView: View { private var synthesizer = AVSpeechSynthesizer() var body: some View { Button("Speak", action: speak) } private func speak() { let utterance = AVSpeechUtterance(string: "I speak English.") utterance.voice = AVSpeechSynthesisVoice(language: "en") self.synthesizer.speak(utterance) } }
4
0
1.9k
1w
Issues with AVRoutePickerView channel switching
We are developing a voice call application that uses AVRoutePickerView, allowing users to switch between an iPhone, a speaker, and Bluetooth earphones. However, we have encountered an intermittent issue: when switching from the speaker to Bluetooth earphones, the earphones remain in a loading state, and the audio channel subsequently switches back to the speaker. How can we resolve this issue? Here is the sample code: let session = AVAudioSession.sharedInstance() do { try session.setCategory(.playAndRecord, mode: .default, options: [.allowBluetooth]) try session.overrideOutputAudioPort(isBluetoothConnected ? .none : .speaker) try session.setPreferredSampleRate(48000) try session.setPreferredIOBufferDuration(0.02) try session.setActive(true, options: []) INFO(" >>> start: hasBluetooth=\(isBluetoothConnected), inputs: \(session.currentRoute.inputs.map { $0.portType }) outputs: \(session.currentRoute.outputs.map { $0.portType })") } catch { ERROR("(error.localizedDescription)") }
1
0
976
1w
iOS 27: SCStreamConfiguration.excludesCurrentProcessAudio has no effect (0.0 dB separation) - what is the supported way to exclude our own audio?
On iOS, SCStreamConfiguration.excludesCurrentProcessAudio appears to do nothing. Audio produced by our own process is captured at full level, so there is currently no way to capture device audio while excluding what our app is playing. Measurement (deterministic probe, 2026-08-08): Our app plays a 1 kHz tone at -4.9 dBFS RMS from its own process while capturing device audio with SCStreamConfiguration.capturesAudio = true and excludesCurrentProcessAudio = true. The configuration in force is read back from the stream and logged, so we know the flag is actually set. The captured audio contained our own tone at -4.9 dBFS peak. Separation = 0.0 dB. 1,573 audio sample buffers analyzed over 31.5 s (16 kHz mono, 50 buffers/s), zero analysis failures, and the run was reproduced twice about 3 hours apart with byte-identical verdicts. Environment for that run: iPhone 16 Pro (iPhone17,1), iOS 27.0, built with Xcode 27 beta 4 (27A5228h) against the iOS 27 SDK, installed directly from Xcode. Still reproducing on the current build: on iOS 27.0 (24A5418b) our shipping capture path still receives our own playback. In production we now have to cancel it ourselves - we align our playback buffer to the captured stream by cross-correlation and subtract it. The correlation between the captured signal and our own playback sits at |r| = 0.65-0.85 in the affected segments, i.e. the capture is dominated by a copy of our own output, exactly what excludesCurrentProcessAudio is supposed to remove. Doing this subtraction in-process costs real CPU and only works while we can hold a delay lock. Why this is blocking: RPSampleBufferType.audioApp is deprecated as of iOS 27 and the documentation points to ScreenCaptureKit as the replacement. With excludesCurrentProcessAudio non-functional there is no supported path on iOS to capture device audio while excluding one's own process. Our app is a real-time dubbing app - it captures foreign-language audio, transcribes it, and plays back a translated voice - so our own output re-entering the capture is fed straight back into transcription and corrupts the session. My questions: (1) Is excludesCurrentProcessAudio expected to be functional on iOS 27, or is it macOS-only in practice? The documentation does not mark it as unavailable on iOS. (2) If it is expected to work, is there anything the app must do besides setting it on the SCStreamConfiguration used to start the stream? (3) If it is not going to work on iOS, what is the supported way to exclude the current process's audio from a ScreenCaptureKit capture, now that RPSampleBufferType.audioApp is deprecated? Filed as FB24170972 on 2026-08-08, with the full JSON event logs from both probe runs attached. There has been no response on the Feedback, which is why I am raising it here.
5
1
519
1w
Camera app Manuel Focus (MF) not available for iPhone 17 and below
For the new IOS 27.0 system on iPhone 18 pro demo, the camera app have a new feature to let users adjust camera focusing from AF to MF. This feature does not require the newest camera module. Therefore, all previous models should be able to have this feature, especially useful via camera control slider. How to get attention of apple camera software development team to work on this...
0
0
146
1w
iOS 27 beta: Opening Notification Center pauses AVPlayer playback
Since iOS 27 beta we are seeing a behavior change in our video streaming app and I would like to know whether others can reproduce it. Behavior on iOS 27 beta: Fully opening the Notification Center pauses playback. Audio continues for about 5 more seconds, then the app is suspended. Closing the Notification Center leaves the player paused. On iOS 26 the same build keeps playing in this situation. Setup: AVQueuePlayer playing video with audio, not muted audiovisualBackgroundPlaybackPolicy = .automatic (default) AVAudioSession category .playback, UIBackgroundModes: audio entitlement AVPictureInPictureController attached with canStartPictureInPictureAutomaticallyFromInline = true Filed as FB23893965 Questions: Can anyone reproduce this on iOS 27 beta? Is this intentional or a regression?
1
3
827
1w
Apple Music data not syncing via MusicKit / Apple Music API
Hi, experiencing an issue with Apple Music syncing in our app. Apple Music data hasn’t been syncing for a while. We’ve investigated the issue on our side and haven’t found anything that could explain it, so we’d like to check whether there are any known issues or recent changes affecting Apple Music API data. Could someone from the Apple Music/MusicKit team help us investigate this? We can provide affected user examples, timestamps, API responses, and any other information needed.
Replies
0
Boosts
0
Views
29
Activity
4d
Custom AVVideoCompositing on a composition-backed AVPlayerItem fails with AVErrorUnknown Xcode 27 beta 2 / beta 3
Trivial pass-through compositor fails on Xcode 27 (beta 2, beta 3); error code -11800 underlying error -12784. Repro included https://github.com/BugorBN/avplayer-custom-compositor-repro It works well on Xcode26 and lower
Replies
3
Boosts
3
Views
845
Activity
5d
Picture-In-Picture not starting with Custom Player
Team, I am trying to start PictureInPicture for my video from custom player as mentioned in the following link, but I am getting an error Steps: Created a player using AVPlayer. Initiated AVPictureInPictureController with AVPlayerLayer Added observer on PIP button enable status When PIP button is tapped executed pipController.startPictureInPicture() statement. PIP is not getting started & getting following error Project created in Xcode11 & currently using Xcode13.2 Error Domain=AVKitErrorDomain Code=-1001 "Failed to start picture in picture." UserInfo={NSLocalizedDescription=Failed to start picture in picture., NSLocalizedFailureReason=The UIScene for the content source has an activation state other than UISceneActivationStateForegroundActive, which is not allowed.} I didn't get any solutions online, plz help me on this issue. FYI: PIP button/mode is working if I use AVPlayerViewController(with default playerItem buttons) instead of AVPlayer & AVPictureInPictureController with custom controls Thanks in advance. Adopting Picture in Picture in a Custom Player
Replies
3
Boosts
2
Views
1.7k
Activity
5d
macOS 27 regression: HDMI + DisplayPort Multi-Output audio fails with Core Audio error 1937010544
Hi, I believe I have found a Core Audio regression in macOS 27. This exact hardware configuration worked correctly on macOS 26, and the issue started immediately after upgrading to macOS 27. Hardware: Mac mini M2 2 × MSI MP243X monitors Monitor 1 connected via HDMI Monitor 2 connected via DisplayPort Both monitors expose a 2-channel audio output to macOS On macOS 26: I used Audio MIDI Setup to create a Multi-Output Device containing both MSI MP243X audio outputs. Audio played simultaneously through both monitors without any issues. On macOS 27: Both audio devices are still detected correctly and both work perfectly when selected individually: HDMI only: WORKS DisplayPort only: WORKS HDMI + DisplayPort simultaneously: FAILS This is reproducible even immediately after a full reboot. When I create a new Multi-Output Device containing both MSI outputs and select it as the system output, audio playback cannot start. For example: afplay /System/Library/Sounds/Glass.aiff returns: Error: AudioQueueStart failed ('stop') I captured Core Audio debug logs while reproducing the problem. Core Audio initially reports that StartIO succeeded, but the physical display audio device then fails to establish a timeline. Relevant log messages include: HALS_IOEngine2::_StartIO succeeded Device 3669B540-0000-0000-2623-0104A5351D78 is not running. could not establish a timeline after waiting 10000000 microseconds stopping with error 1937010544 StartIOThread: the IO thread failed to start, Error: 1937010544 I have already tested the following: Both devices at 44.1 kHz / 24-bit Both devices at 48 kHz / 16-bit Recreating the Multi-Output Device from scratch Using the HDMI device as clock source Using the DisplayPort device as clock source Different drift correction configurations Restarting coreaudiod Full macOS reboot Testing both outputs individually immediately after reboot Alternative multi-device audio routing software The behavior is always reproducible. Each MSI MP243X audio endpoint works correctly by itself. The failure only occurs when both HDMI and DisplayPort audio endpoints are opened simultaneously. system_profiler correctly detects both devices at 48 kHz: MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: HDMI MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: DisplayPort This does not appear to be a problem with either monitor or connection individually, because both outputs continue to work independently. The important difference is the macOS version: macOS 26: HDMI + DisplayPort Multi-Output = WORKING macOS 27: HDMI only = WORKING DisplayPort only = WORKING HDMI + DisplayPort Multi-Output = FAILS with AudioQueueStart 'stop' / Core Audio error 1937010544 No hardware, monitor, cable, or connection changes were made between the working macOS 26 configuration and the macOS 27 configuration. This therefore appears to be a regression in the Core Audio/display-audio path introduced with macOS 27 when two display audio endpoints (HDMI + DisplayPort) are opened simultaneously. Has anyone else been able to reproduce this on macOS 27, particularly on Apple Silicon? I can provide the complete coreaudiod logs and run additional Core Audio diagnostics if needed. Additional isolation tests: Both monitors can remain physically connected to the Mac at the same time. With both HDMI and DisplayPort connected: Selecting the HDMI MSI MP243X as the only output works correctly. Selecting the DisplayPort MSI MP243X as the only output works correctly. Opening both audio endpoints simultaneously causes the failure. Therefore, simply having both displays connected does not trigger the issue. The failure appears specifically when Core Audio attempts to run both display-audio endpoints at the same time. I also tested this using third-party multi-device audio routing implementations instead of relying only on Audio MIDI Setup. The same behavior occurs: either MSI MP243X can be opened and used independently, but attempting to route audio to both devices simultaneously fails. This suggests that the issue is below the Multi-Output Device configuration itself and may be related to starting/synchronizing two display-audio IO engines simultaneously. During the failure, the Core Audio log sequence is particularly interesting: The physical device is detected normally. The audio format is configured successfully. Core Audio reports that StartIO succeeded. The device subsequently reports that it is not running. Core Audio waits 10 seconds for a timeline. Timeline establishment fails. The IO thread terminates with error 1937010544 ('stop'). One captured conversion path was: 2 ch, 48000 Hz, Float32, interleaved -> 2 ch, 48000 Hz, Int16, interleaved so both sides were operating at 48 kHz during this test. Another important observation is that restarting coreaudiod does not resolve the simultaneous-output problem. A complete reboot also does not resolve it: immediately after a fresh boot, before launching any third-party audio-routing software, both physical outputs work individually but a newly created Multi-Output Device still reproduces the failure. This makes the issue highly reproducible on this machine. Minimal reproduction: Boot macOS 27 with both MSI MP243X monitors connected. Open Audio MIDI Setup. Verify both MSI MP243X devices work independently. Set both devices to 48,000 Hz. Create a new Multi-Output Device. Select both MSI MP243X devices. Select the new Multi-Output Device as the system audio output. Run: afplay /System/Library/Sounds/Glass.aiff Expected result: The sound is reproduced simultaneously through both monitors, as it was on macOS 26. Actual result: Error: AudioQueueStart failed ('stop') Switching the system output back to either individual MSI MP243X restores audio playback. The problem can then be reproduced again by selecting the Multi-Output Device.
Replies
1
Boosts
0
Views
623
Activity
5d
MusicKit API — Compatibility question regarding user-initiated scoring method
Hi everyone, I'm building Sidetick, a concert ticketing and cultural discovery platform. I have an active Apple Developer Program account with MusicKit access. I want to implement the following flow and need to know if it complies with the MusicKit License Agreement: User authenticates via MusicKit (explicit OAuth consent) We read their heavy-rotation and library/artists in memory We calculate a fan affinity score per artist (e.g. "480 XP with Angèle") — entirely in-memory, never written to our DB We show the user: "We found these artists — which ones do you want to follow on Sidetick?" User explicitly picks their favorites ALL Apple Music API data is immediately deleted from our systems What we store is only the user's Sidetick declaration: {artist: "Angèle", xp: 480} — no Apple Music raw data retained After this, ALL gamification (fan ranking, ticket priority, rewards) is based exclusively on Sidetick first-party actions (ticket purchases, attended concerts, referrals) — zero Apple Music data involved. The intent: MusicKit is used as a one-time discovery bootstrap to help users identify which artists to follow on Sidetick. Apple Music data is never stored, never shared with third parties, never used for advertising. My questions: Is this use case compatible with the MusicKit License Agreement? Is storing the calculated XP score (after deleting the source Apple Music data) considered retaining Apple Music data? Is there a specific clause we should be careful about? Thanks in advance — any Apple engineer or experienced MusicKit dev input is very welcome. =D
Replies
0
Boosts
0
Views
74
Activity
5d
Best supported transport for low-latency live video between two iPhones, including wired options
We are building an iOS video-editing companion workflow. An iPhone 17 Pro (USB-C) is the editor/master; an iPhone 14 Pro Max (Lightning) displays its continuous frame-by-frame live preview. The companion must follow playback, pause, seeks, and edits. It does not use a local copy of the media. Our prototype captures composed AVPlayer output with AVPlayerItemVideoOutput, encodes H.264 in real time with VideoToolbox, sends samples through an MCSession stream, and renders them with AVSampleBufferDisplayLayer. We want the best public, App Store-compatible transport for high quality, low latency, adaptive resolution, and reliable recovery. Can an ordinary iOS app send arbitrary stream or IP data directly between these two iPhones over a USB-C-to-Lightning cable? If not, is wired Ethernet via supported adapters and a common network the supported wired option? What are the discovery/routing constraints? For wireless peer-to-peer video on current iOS, should we prefer Network framework with Wi-Fi Aware where available, peer-to-peer Wi-Fi, or another transport over MultipeerConnectivity? Can Network framework prefer a wired Ethernet interface and switch paths without losing the editing session? For a live editing preview, which transport and codec patterns keep latency bounded while preserving frame order and recovering promptly after loss or a seek? Are QUIC streams/datagrams appropriate? What receiver feedback should drive bitrate or resolution changes and keyframe requests? Are there public examples or documentation specifically for live video between two iPhones with this USB-C/Lightning pairing? We cannot share the full Xcode project publicly, but can create a minimal reproducible example if needed. We would appreciate guidance based on public APIs and supported hardware paths.
Replies
0
Boosts
0
Views
48
Activity
5d
`LockedCameraCaptureManager` practically unusable since iOS 26
Somewhere since iOS 26, the LockedCameraCapture framework gets in an unpredictable state after opening the main app from the LockedCamera extension using LockedCameraCaptureSession.openApplication(for userActivity:). (Feedback with sample code to reproduce: FB21966835) Opening the extension from the lock screen again doesn’t open the extension but puts the lock screen in a state as if it has. Content updated from LockedCameraCaptureManager.shared.sessionContentUpdates comes in inconsistently, usually needs the app to be opened again or the extension to be opened. This makes using this extension impossible for me as I use it to record video files that manually need to be imported when the app is launched (so not through PhotoKit). Does anybody have a suggestion to circumvent this issue or how to get this fixed?
Replies
2
Boosts
3
Views
1.2k
Activity
5d
AVPlayerItemSampleBufferOutput
I am using AVPlayer, but I am unable to retrieve PCM data from .m3u8 streams via the AVPlayerItemSampleBufferOutput API in iOS 27 beta. I have tried both the Objective-C and Swift APIs: the Objective-C delegate methods are not being called, and the Swift methods nextAvailableSampleBuffer() and nextSampleBuffer() are returning no data.
Replies
2
Boosts
1
Views
663
Activity
6d
fail to get HLS realtime stream via AVPlayerItemSampleBufferOutputDelegate
Hi, I'm trying to do some realtime audio processing on audio served from an HLS stream (i.e. an AVPlayer created using an M3U HTTP URL). And I find that new APIs(AVPlayerItemSampleBufferOutput) are available in iOS 27.0 to achieve it. However, I failed to get the available data via the AVPlayerItemSampleBufferOutputDelegate. And I found some error in the system log: I create AVPlayerItemSampleBufferOutput and set the delegate after receiving the AVPlayerItemStatusReadyToPlay event. And here's my code: @interface OCAudioSamplebuffer () <AVPlayerItemSampleBufferOutputDelegate> @property (nonatomic, strong) AVPlayerItemSampleBufferOutput *bufferOutput; @property (nonatomic, strong) dispatch_queue_t bufferOutputQueue; @property (nonatomic, strong) AVPlayerItem *playerItem; @end - (void)playItem:(AVPlayerItem *)item { if (@available(iOS 27, *)) { AVAudioSession *audioSession = [AVAudioSession sharedInstance]; if([NSThread mainThread]){ [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryPlayback error:nil]; [audioSession setActive:YES error:nil]; }else{ dispatch_async(dispatch_get_main_queue(), ^{ [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryPlayback error:nil]; [audioSession setActive:YES error:nil]; }); } AVPlayerItemSampleBufferOutputAudioConfiguration *cfg = [[AVPlayerItemSampleBufferOutputAudioConfiguration alloc] init]; CMFormatDescriptionRef formatDescription = [self createPCMFormatDescriptionWithSampleRate:44100.0 channels:2 isFloat:YES]; cfg.requestedAudioFormat = formatDescription; if (formatDescription) { NSLog(@"create PCM Format Description success"); CFRelease(formatDescription); } else { NSLog(@"fail to create PCM Format Description"); } self.bufferOutput = [[AVPlayerItemSampleBufferOutput alloc] initWithConfiguration:cfg]; NSLog(@"create buffer success, PCM Format Description%@---,%@", cfg.requestedAudioFormat, formatDescription); self.bufferOutputQueue = dispatch_queue_create("audioSamplebufferQueue", DISPATCH_QUEUE_CONCURRENT); [self.bufferOutput setDelegate:self queue:self.bufferOutputQueue]; [item addOutput:self.bufferOutput]; self.playerItem = item; } else { // Fallback on earlier versions } } Any help. Thank you
Replies
2
Boosts
0
Views
928
Activity
6d
Tracks missing from Apple Music API listening history
I have a product that relies on the Apple Music API's "recently played tracks" endpoint. Recently, a few users are reporting that there are songs missing from their history. I was able to observe this myself—the issue corrected itself after re-authenticating with Apple Music, but unfortunately for at least one user this is not helping in their case. What's odd is that there is some inconsistency about what shows in the recently played tracks endpoint. Some examples My own account: ✅ Music from my playlists ✅ Albums and singles ✅ Apple editorial playlists ❌ Playlists created by other users User 1: ❌ Music from their playlists ✅ Albums and singles ❌ Apple editorial playlists ❌ Playlists created by other users In most cases, all four of these would appear in the recent tracks API. What could cause these tracks to be missing from the listening history endpoint? Listening history is already enabled for the devices they're using, but the songs are appearing inconsistently.
Replies
1
Boosts
3
Views
457
Activity
6d
Is there a way to directly go from VideoToolbox to Metal for 10-bit/BT.2020 YCbCr HEVC?
tl;dr how can I get raw YUV in a Metal fragment shader from a VideoToolbox 10-bit/BT.2020 HEVC stream without any extra/secret format conversions? With VideoToolbox and 10-bit HEVC, I've found that it defaults to CVPixelBuffers w/ formats kCVPixelFormatType_Lossless_420YpCbCr10PackedBiPlanarFullRange or kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarFullRange. To mitigate this, I have the following snippet of code to my application: // We need our pixels unpacked for 10-bit so that the Metal textures actually work var pixelFormat:OSType? = nil let bpc = getBpcForVideoFormat(videoFormat!) let isFullRange = getIsFullRangeForVideoFormat(videoFormat!) // TODO: figure out how to check for 422/444, CVImageBufferChromaLocationBottomField? if bpc == 10 { pixelFormat = isFullRange ? kCVPixelFormatType_420YpCbCr10BiPlanarFullRange : kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange } let videoDecoderSpecification:[NSString: AnyObject] = [kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder:kCFBooleanTrue] var destinationImageBufferAttributes:[NSString: AnyObject] = [kCVPixelBufferMetalCompatibilityKey: true as NSNumber, kCVPixelBufferPoolMinimumBufferCountKey: 3 as NSNumber] if pixelFormat != nil { destinationImageBufferAttributes[kCVPixelBufferPixelFormatTypeKey] = pixelFormat! as NSNumber } var decompressionSession:VTDecompressionSession? = nil err = VTDecompressionSessionCreate(allocator: nil, formatDescription: videoFormat!, decoderSpecification: videoDecoderSpecification as CFDictionary, imageBufferAttributes: destinationImageBufferAttributes as CFDictionary, outputCallback: nil, decompressionSessionOut: &decompressionSession) In short, I need kCVPixelFormatType_420YpCbCr10BiPlanar so that I have a straightforward MTLPixelFormat.r16Unorm/MTLPixelFormat.rg16Unorm texture binding for Y/CbCr. Metal, seemingly, has no direct pixel format for 420YpCbCr10PackedBiPlanar. I'd also rather not use any color conversion in VideoToolbox, in order to save on processing (and to ensure that the color transforms/transfer characteristics match between streamer/client, since I also have a custom transfer characteristic to mitigate blocking in dark scenes). However, I noticed that in visionOS 2, the CVPixelBuffer I receive is no longer a compressed render target (likely a bug), which caused GPU texture read bandwidth to skyrocket from 2GiB/s to 30GiB/s. More importantly, this implies that VideoToolbox may in fact be doing an extra color conversion step, wasting memory bandwidth. Does Metal actually have no way to handle 420YpCbCr10PackedBiPlanar? Are there any examples for reading 10-bit HDR HEVC buffers directly with Metal?
Replies
3
Boosts
0
Views
1.9k
Activity
6d
Push-to-start RemoteMediaSession never appears on Lock Screen/Control Center without opening the app — expected behavior?
I'm implementing the new NowPlaying framework's remote-session push-to-start flow (per Publishing remote media sessions) to show a Sonos-like remote speaker's playback on the Lock Screen/Control Center without requiring my app to be running. The docs say: Your server can start, update, or end sessions when your app isn't running. Use this approach when playback starts from a remote device without someone opening your app. That section never mentions requestToBecomeSystemPrimary() — that's only documented under "Start and update sessions from your app," with a note that it's a no-op unless the app is foregrounded. In my testing, though, a session created purely via a push-to-start "event":"start" push never shows up anywhere in system UI (not Control Center, not the Lock Screen) until I open the app at least once. The mechanism itself works correctly — RemoteMediaSessionExtension.session(_:) fires reliably, decodes the attributes correctly, and returns a valid RemoteMediaSessionRepresentable (confirmed via on-device logging: no errors, clean construction every time, across dozens of test pushes). It just isn't surfaced. To rule out anything on my end, I've tested: Sending via my own server (correct apns-topic/apns-push-type headers, confirmed working via HTTP/2 200 and correct decode) Sending via the Push Notifications Console directly, with Environment explicitly set to Production (my push-to-start token only validates against production, matching the known dev-signed-token-provisions-against-production quirk) A hand-built, minimal, fully valid payload for a completely fresh, never-before-registered session id Every combination produces a correctly-constructed session that's invisible until the app opens — at which point my own app code (unrelated to the push) independently constructs and promotes its own session via RemoteMediaSession.start() + requestToBecomeSystemPrimary() in the foreground. Has anyone gotten a push-to-start session to actually appear on the Lock Screen/Control Center without opening the app first? Is there an additional step beyond what's in the current docs (some other registration, entitlement, or timing requirement) that's needed for that, or is this expected behavior right now and the docs are ahead of the implementation? FB24876585 filed on Feedback Assistant with app logs attached.
Replies
0
Boosts
0
Views
50
Activity
6d
Synchronization between displays (M6/M5 Pro)
Hello, Apple recently announced that M6 and M5 Pro are featuring genlock support through USB-C to enables precise synchronization between a display and camera. Regarding displays : would this be possible to frame-lock several displays with this feature ? I mean outputting through several Thunderbolt and synchronizing every output so they works exactly at the same frequency and show exactly the same frame at the same time. If so, how would this work ? Is there some documentation about genlocking displays ? Thank you for your help.
Replies
1
Boosts
1
Views
157
Activity
6d
Music.app hangs on Library tab with Sync Library enabled — iOS 27.2 beta
On iPhone 17 Pro Max running iOS 27.2 beta (24B5084k), Music.app hangs and is watchdog-terminated when opening the Library tab, but only with Sync Library enabled. to reproduce: 1. Settings › Apps › Music › Sync Library OFF — app works normally. 2. Enable Sync Library, let it finish syncing. 3. Open Music and navigate to the Library tab. Result: The app freezes immediately and is terminated. Home, Radio and Search all play normally with Sync Library on — the hang is isolated to the Library tab. The stackshot from Analytics Data shows multiple threads blocked on a single thread, including com.apple.SwiftUI.AsyncRenderer, with the watchdog reporting "Failed to terminate gracefully after 5.0s". No VPN, no automatic downloads, no local files. The same Apple Music account works normally on iPadOS 26 and on Apple Music for Windows. 100% reproducible. Filed as FB24865181. Has anyone else hit this? If so, does your Music- analytics log show the same blocked-thread signature?
Replies
0
Boosts
1
Views
347
Activity
1w
AVSpeechSynthesizer does not work on "Mac (Designed for iPad)", with some voices
The iOS 26 sample below speaks well on iPhone/iPad devices and the iOS simulator. But it does not speak on "Mac (Designed for iPad)", with a voice downloaded via the macOS settings. Instead it issues this warning : Invalid maui voice identifier com.apple.voice.enhanced.en-US.Samantha How to make an iOS app speak on "Mac (Designed for iPad)", with a downloaded voice ? Note : I use iOS 26.5.2 and macOS 26.5.2. I use voices that can be found in System Settings > Accessibility > Read & Speak > System voice. I have checked that "Samantha (Enhanced)" is the "System voice" in the macOS settings. I have checked that the same issue occurs with other voices and other languages. There is no such issue for a voice that never needs to be downloaded. import AVFAudio import SwiftUI @main struct SampleApp: App { var body: some Scene { WindowGroup { SampleView() } } } struct SampleView: View { private var synthesizer = AVSpeechSynthesizer() var body: some View { Button("Speak", action: speak) } private func speak() { let utterance = AVSpeechUtterance(string: "I speak English.") utterance.voice = AVSpeechSynthesisVoice(language: "en") self.synthesizer.speak(utterance) } }
Replies
4
Boosts
0
Views
1.9k
Activity
1w
Issues with AVRoutePickerView channel switching
We are developing a voice call application that uses AVRoutePickerView, allowing users to switch between an iPhone, a speaker, and Bluetooth earphones. However, we have encountered an intermittent issue: when switching from the speaker to Bluetooth earphones, the earphones remain in a loading state, and the audio channel subsequently switches back to the speaker. How can we resolve this issue? Here is the sample code: let session = AVAudioSession.sharedInstance() do { try session.setCategory(.playAndRecord, mode: .default, options: [.allowBluetooth]) try session.overrideOutputAudioPort(isBluetoothConnected ? .none : .speaker) try session.setPreferredSampleRate(48000) try session.setPreferredIOBufferDuration(0.02) try session.setActive(true, options: []) INFO(" >>> start: hasBluetooth=\(isBluetoothConnected), inputs: \(session.currentRoute.inputs.map { $0.portType }) outputs: \(session.currentRoute.outputs.map { $0.portType })") } catch { ERROR("(error.localizedDescription)") }
Replies
1
Boosts
0
Views
976
Activity
1w
iOS 27: SCStreamConfiguration.excludesCurrentProcessAudio has no effect (0.0 dB separation) - what is the supported way to exclude our own audio?
On iOS, SCStreamConfiguration.excludesCurrentProcessAudio appears to do nothing. Audio produced by our own process is captured at full level, so there is currently no way to capture device audio while excluding what our app is playing. Measurement (deterministic probe, 2026-08-08): Our app plays a 1 kHz tone at -4.9 dBFS RMS from its own process while capturing device audio with SCStreamConfiguration.capturesAudio = true and excludesCurrentProcessAudio = true. The configuration in force is read back from the stream and logged, so we know the flag is actually set. The captured audio contained our own tone at -4.9 dBFS peak. Separation = 0.0 dB. 1,573 audio sample buffers analyzed over 31.5 s (16 kHz mono, 50 buffers/s), zero analysis failures, and the run was reproduced twice about 3 hours apart with byte-identical verdicts. Environment for that run: iPhone 16 Pro (iPhone17,1), iOS 27.0, built with Xcode 27 beta 4 (27A5228h) against the iOS 27 SDK, installed directly from Xcode. Still reproducing on the current build: on iOS 27.0 (24A5418b) our shipping capture path still receives our own playback. In production we now have to cancel it ourselves - we align our playback buffer to the captured stream by cross-correlation and subtract it. The correlation between the captured signal and our own playback sits at |r| = 0.65-0.85 in the affected segments, i.e. the capture is dominated by a copy of our own output, exactly what excludesCurrentProcessAudio is supposed to remove. Doing this subtraction in-process costs real CPU and only works while we can hold a delay lock. Why this is blocking: RPSampleBufferType.audioApp is deprecated as of iOS 27 and the documentation points to ScreenCaptureKit as the replacement. With excludesCurrentProcessAudio non-functional there is no supported path on iOS to capture device audio while excluding one's own process. Our app is a real-time dubbing app - it captures foreign-language audio, transcribes it, and plays back a translated voice - so our own output re-entering the capture is fed straight back into transcription and corrupts the session. My questions: (1) Is excludesCurrentProcessAudio expected to be functional on iOS 27, or is it macOS-only in practice? The documentation does not mark it as unavailable on iOS. (2) If it is expected to work, is there anything the app must do besides setting it on the SCStreamConfiguration used to start the stream? (3) If it is not going to work on iOS, what is the supported way to exclude the current process's audio from a ScreenCaptureKit capture, now that RPSampleBufferType.audioApp is deprecated? Filed as FB24170972 on 2026-08-08, with the full JSON event logs from both probe runs attached. There has been no response on the Feedback, which is why I am raising it here.
Replies
5
Boosts
1
Views
519
Activity
1w
Camera app Manuel Focus (MF) not available for iPhone 17 and below
For the new IOS 27.0 system on iPhone 18 pro demo, the camera app have a new feature to let users adjust camera focusing from AF to MF. This feature does not require the newest camera module. Therefore, all previous models should be able to have this feature, especially useful via camera control slider. How to get attention of apple camera software development team to work on this...
Replies
0
Boosts
0
Views
146
Activity
1w
AirPlay screen mirroring connection failure on treadmill since iOS update.Since updating to the latest beta version on my iPhone, I cannot connect to the treadmill via AirPlay screen mirroring. It fails to search for the device or stucks on a loadin
Since updating to the latest beta version on my iPhone, I cannot connect to the treadmill via AirPlay screen mirroring. It fails to search for the device or stucks on a loading screen.
Replies
1
Boosts
0
Views
68
Activity
1w
iOS 27 beta: Opening Notification Center pauses AVPlayer playback
Since iOS 27 beta we are seeing a behavior change in our video streaming app and I would like to know whether others can reproduce it. Behavior on iOS 27 beta: Fully opening the Notification Center pauses playback. Audio continues for about 5 more seconds, then the app is suspended. Closing the Notification Center leaves the player paused. On iOS 26 the same build keeps playing in this situation. Setup: AVQueuePlayer playing video with audio, not muted audiovisualBackgroundPlaybackPolicy = .automatic (default) AVAudioSession category .playback, UIBackgroundModes: audio entitlement AVPictureInPictureController attached with canStartPictureInPictureAutomaticallyFromInline = true Filed as FB23893965 Questions: Can anyone reproduce this on iOS 27 beta? Is this intentional or a regression?
Replies
1
Boosts
3
Views
827
Activity
1w