Hello,
I've been very familiar with the UVC Support in iPadOS ever since it launched in iOS 17. There are a number of people that use the software I've developed built around UVC and there are often queries about 8-Bit vs. 10-Bit.
My understanding is that the newest UVC Spec is 1.5 which was standardised in 2012 and almost every UVC Capture Card runs at 8-Bit.
The only 10-Bit Capture Card that is on my radar is the AJA U-Tap SDI, however it looks like this is 10-Bit up until the UVC Part where the 10-Bit Input is downsampled to 8-Bit. Though I have read in certain places that it works as a 10-Bit Capture Card on macOS but not on iPadOS.
I was just wondering if 10-Bit via UVC is even possible on iPadOS? If there was indeed a true 10-Bit Source being passed into an iPad, would iPadOS allow it or would it be downsampled by AVFoundation so it can show up as a valid external video input?
All USB Capture Cards that I have encountered use one of the following formats:
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
kCVPixelFormatType_32BGRA
So if a UVC Device delivered a 10-Bit Format, would that be accessible by iPadOS or would it fallback to these 8-Bit Formats by default?
Thanks!
Explore the integration of media technologies within your app. Discuss working with audio, video, camera, and other media functionalities.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I'm trying to use the new Speech framework for streaming transcription on macOS 26.3, and I can reproduce a failure with SpeechAnalyzer.start(inputSequence:).
What is working:
SpeechAnalyzer + SpeechTranscriber
offline path using start(inputAudioFile:finishAfterFile:)
same Spanish WAV file transcribes successfully and returns a coherent final result
What is not working:
SpeechAnalyzer + SpeechTranscriber
stream path using start(inputSequence:)
same WAV, replayed as AnalyzerInput(buffer:bufferStartTime:)
fails once replay starts with:
_GenericObjCError domain=Foundation._GenericObjCError code=0 detail=nilError
I also tried:
DictationTranscriber instead of SpeechTranscriber
no realtime pacing during replay
Both still fail in stream mode with the same error.
So this does not currently look like a ScreenCaptureKit issue or a Python integration issue. I reduced it to a pure Swift CLI repro.
Environment:
macOS 26.3 (25D122)
Xcode 26.3
Swift 6.2.4
Apple Silicon Mac
Has anyone here gotten SpeechAnalyzer.start(inputSequence:) working reliably on macOS 26.x?
If so, I'd be interested in any workaround or any detail that differs from the obvious setup:
prepareToAnalyze(in:)
bestAvailableAudioFormat(...)
AnalyzerInput(buffer:bufferStartTime:)
replaying a known-good WAV in chunks
I already filed Feedback Assistant:
FB22149971
How I can get iCloud photo file size?
Could I use private API like this in prod? Does anyone know another way? (without downloading the file to the device)
func getFileSize(asset: PHAsset) -> Int64? {
let resources = PHAssetResource.assetResources(for: asset)
let resource = resources.first
let size = resource?.value(forKey: "fileSize") as? Int64
return size
}
Hi,
I am trying to implement a PHBackgroundResourceUploadExtension to upload backup media files to an external cloud service based on these docs: https://developer.apple.com/documentation/PhotoKit/uploading-asset-resources-in-the-background#Acknowledge-completed-jobs
Creating jobs and actual uploading is working as expected, but the problem I have is in the acknowledgeCompletedJobs() function.
When trying to access a job's resource, the resource is nil and thus has empty assetLocalIdentifier and originalFilename.
Did anybody successfully implement this extension or knows, why this would happen? Because the resource of an acknowledgable job is empty, I can not match it back to my processed assets.
Hi,
I am trying to implement a PHBackgroundResourceUploadExtension to upload backup media files to an external cloud service based on these docs: https://developer.apple.com/documentation/PhotoKit/uploading-asset-resources-in-the-background#Acknowledge-completed-jobs
Creating jobs and actual uploading is working as expected, but the problem I have is in the acknowledgeCompletedJobs() function.
When in this function, I am trying to access a job's resource. The resource is nil and thus has empty assetLocalIdentifier and originalFilename.
Did anybody successfully implement this extension or knows, why this would happen? Because the resource of an acknowledgable job is empty, I can not match it back to my processed assets.
Hello!
My name is Mason Prather. I'm a graduate student at Kennesaw State University and a Research Engineer working in XR environments through my Graduate Research Assistant role. I’m currently building a research prototype that connects a mobile companion application to a VR headset.
The mobile application is built in Unity and deployed on iOS, and it streams video frames to a remote Unity client using WebRTC.
Environment
Device: iPhone 15
OS: iOS 26.3 (tested on physical device, not Simulator)
Engine: Unity 2022.3.57f1
Graphics API: Metal
Streaming Technology: WebRTC (Unity WebRTC package)
Architecture: Mobile Unity app streaming video frames to a remote Unity client
Receiver Device: Meta Quest Pro headset (Unity application)
Networking: LAN (UDP discovery + TCP signaling)
Video Source: Unity RenderTexture
Goal
The goal of the system is to allow a VR user to view media stored on their phone inside a VR environment.
The iOS app:
renders or captures media content
converts frames into a WebRTC video track
streams the video to the headset
Current Status
Connection setup works correctly.
Observed behavior:
Signaling connection successful
ICE candidate exchange successful
PeerConnection state becomes Connected
Video track created successfully
However, the receiving application displays black frames.
iOS App Details
The video source originates from a Unity RenderTexture.
Inside the phone application:
RenderTexture displays correctly
Frames appear correct locally
But the receiving peer does not display the frames.
Relevant Components
Unity WebRTC package
iOS Metal rendering pipeline
Custom TCP signaling
LAN discovery via UDP
Expected Behavior
Rendered frames should transmit via WebRTC and appear on the remote device.
Actual Behavior
The remote video track is active, but the rendered frames appear black on the receiving client.
Questions
Are there known issues involving Unity WebRTC + iOS Metal texture capture?
Are there specific pixel format requirements when streaming textures from Unity on iOS?
Could the issue relate to texture readback limitations or GPU synchronization?
I am more than happy to provide screenshots and console logs upon request.
If anyone has experience streaming Unity video frames via WebRTC on iOS, I would greatly appreciate any guidance.
Topic:
Media Technologies
SubTopic:
Streaming
In Instruments, I'm seeing "Zero Time Stamp" events in the "Audio Server" lane.
What does that mean?
Hi,
I’m trying to better understand how AVAssetDownloadConfiguration selects video variants when downloading HLS content for offline playback.
Suppose I have an HLS master playlist (.m3u8) that contains several video variants defined with #EXT-X-STREAM-INF.
For example, the master playlist may contain multiple video streams like this:
Same resolution, different BANDWIDTH
Or different resolutions (for example 720p, 1080p, etc.)
My question is:
How many video variants are actually downloaded when using AVAssetDownloadConfiguration without specifying any variantQualifiers?
In other words:
If the master playlist contains multiple video variants, will the download task fetch only one variant, or multiple variants?
Does the behavior differ depending on whether the variants differ only by BANDWIDTH or also by RESOLUTION?
What I observed in testing
In my tests, I always end up with only one video variant downloaded, specifically the one with the highest BANDWIDTH parameter. In the m3u8 files I tested, all video variants had identical parameters (resolution, codec, frame rate, etc.) and differed only by the BANDWIDTH attribute in the master playlist.
However, when inspecting the downloaded .movpkg, I noticed something interesting in boot.xml.
It lists two video streams:
one with complete="true" (the one with highest bandwidth)
another with complete="no" (the one with lowest bandwidth)
I actually had 3 video streams listed in m3u8, but the one with middle bandwidth wasn't listed in boot.xml file at all.
There are also additional streams for audio and subtitles in boot.xml file.
This made me wonder whether the system initially attempts to download another video variant (possibly a lower bitrate one), but then switches to the highest-quality variant and only completes that one.
Additional question about variantQualifiers
If I provide a predicate such as:
NSPredicate(format: "peakBitRate > 0")
which should theoretically match all variants, will the download task attempt to download all matching video variants, or will it still select only one?
Summary
So the main questions are:
Without variantQualifiers, does AVAssetDownloadConfiguration always download a single video variant, and if so, how is it chosen?
Does the behavior differ if variants have different resolutions vs only different bitrates?
When a predicate matches multiple variants, can multiple video variants actually be downloaded in a single .movpkg?
Why might boot.xml list multiple video streams when only one appears to be fully downloaded?
Any clarification on the intended behavior would be greatly appreciated.
Thanks!
Hi everyone,
Our team is encountering a reproducible crash when using VTLowLatencyFrameInterpolation on iOS 26.3 while processing a live LL-HLS input stream.
🤖 Environment
Device: iPhone 16
OS: iOS 26.3
Xcode: Xcode 26.3
Framework: VideoToolbox
💥 Crash Details
The application crashes with the following fatal error:
Fatal error: Swift/ContiguousArrayBuffer.swift:184: Array index out of range
The stack trace highlights the following:
VTLowLatencyFrameInterpolationImplementation processWithParameters:frameOutputHandler:
Called from VTFrameProcessor.process(parameters:)
Here is the simplified implementation block where the crash occurs. (Note: PrismSampleBuffer and PrismLLFIError are our internal custom wrapper types).
// Create `VTFrameProcessorFrame` for the source (previous) frame.
let sourcePTS = sourceSampleBuffer.presentationTimeStamp
var sourceFrame: VTFrameProcessorFrame?
if let pixelBuffer = sourceSampleBuffer.imageBuffer {
sourceFrame = VTFrameProcessorFrame(buffer: pixelBuffer, presentationTimeStamp: sourcePTS)
}
// Validate the source VTFrameProcessorFrame.
guard let sourceFrame else { throw PrismLLFIError.missingImageBuffer }
// Create `VTFrameProcessorFrame` for the next frame.
let nextPTS = nextSampleBuffer.presentationTimeStamp
var nextFrame: VTFrameProcessorFrame?
if let pixelBuffer = nextSampleBuffer.imageBuffer {
nextFrame = VTFrameProcessorFrame(buffer: pixelBuffer, presentationTimeStamp: nextPTS)
}
// Validate the next VTFrameProcessorFrame.
guard let nextFrame else { throw PrismLLFIError.missingImageBuffer }
// Calculate interpolation intervals and allocate destination frame buffers.
let intervals = interpolationIntervals()
let destinationFrames = try framesBetween(firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals)
let interpolationPhase: [Float] = intervals.map { Float($0) }
// Create VTLowLatencyFrameInterpolationParameters.
// This sets up the configuration required for temporal frame interpolation between the previous and current source frames.
guard let parameters = VTLowLatencyFrameInterpolationParameters(
sourceFrame: nextFrame,
previousFrame: sourceFrame,
interpolationPhase: interpolationPhase,
destinationFrames: destinationFrames
) else {
throw PrismLLFIError.failedToCreateParameters
}
try await send(sourceSampleBuffer)
// Process the frames.
// Using progressive callback here to get the next processed frame as soon as it's ready,
// preventing the system from waiting for the entire batch to finish.
for try await readOnlyFrame in self.frameProcessor.process(parameters: parameters) {
// Create an interpolated sample buffer based on the output frame.
let newSampleBuffer: PrismSampleBuffer = try readOnlyFrame.frame.withUnsafeBuffer { pixelBuffer in
try PrismLowLatencyFrameInterpolation.createSampleBuffer(from: pixelBuffer, readOnlyFrame.timeStamp)
}
// Pass the newly generated frame to the output stream.
try await send(newSampleBuffer)
}
🙋 Questions
Are there any known limitations or bugs regarding VTLowLatencyFrameInterpolation when handling live 60fps streams?
Are there any undocumented constraints we should be aware of regarding source/previous frame timing, pixel buffer attributes, or how destinationFrames and interpolationPhase arrays must be allocated?
Is a "warm-up" sequence recommended after startSession() before making the first process(parameters:) call?
I have exhausted standard debugging approaches and need guidance on Final Cut Pro's AU plugin loading behavior.
PLUGIN OVERVIEW
My plugin is an AUv2 audio plugin built with JUCE 8.
The plugin loads and functions correctly in:
Pro Tools (AAX)
Media Composer (AAX)
Reaper (AU + VST3)
Logic Pro (AU)
GarageBand (AU)
Audacity (AU)
DaVinci Resolve / Fairlight (AU)
Harrison Mixbus (AU)
Ableton Live (AU)
Cubase (VST3)
Nuendo (VST3)
It does NOT load in Final Cut Pro (tested on 10.8.x, macOS 14.6 and 15.2).
DIAGNOSTICS COMPLETED
auval passes cleanly:
auval -v aufx Hwhy Manu → AU VALIDATION SUCCEEDED
Plugin is notarized and stapled:
xcrun stapler validate → The validate action worked
spctl --assess --type exec → Note: returns 'not an app' which we understand is expected for .component bundles.
Hardened Runtime is enabled on the bundle.
We identified that our Info.plist contained a 'resourceUsage' dictionary in the AudioComponents entry. We found via system logs that this was setting au_componentFlags = 2 (kAudioComponentFlag_SandboxSafe), causing FCP to attempt loading the plugin in-process inside its sandbox, where our UDP networking is denied. We removed the resourceUsage dict, confirmed au_componentFlags = 0 in the CAReportingClient log, and FCP now loads the plugin out-of-process via AUHostingServiceXPC_arrow.
Despite au_componentFlags = 0 and out-of-process loading confirmed, the plugin still does not appear in FCP's effects browser.
We also identified and fixed a channel layout issue — our isBusesLayoutSupported was not returning true for 5-channel layouts (which FCP uses internally). This is now fixed.
AU cache has been fully cleared:
~/Library/Caches/com.apple.audio.AudioComponentRegistrar
/Library/Caches/com.apple.audio.AudioComponentRegistrar
coreaudiod and AudioComponentRegistrar killed to force rescan
auval -a run to force re-registration
Topic:
Media Technologies
SubTopic:
Video
Tags:
Audio
Professional Video Applications
Media
AudioUnit
I'm using MusicKit for DRM track playback in my iOS app and a third party library to play local user-owned music on the file system and from the music library.
This app is also supporting accessory devices that offer Bluetooth remote media control.
The wish is to achieve parity between how the remote interacts with user owned music and the DRM / cloud / Apple Music tracks in my application music player.
Track navigation, app volume (rather than system volume), and scrubbing need to work consistently on a mix of tracks which could alternate DRM and cloud status within one album or playlist.
Apple Music queue and track pickers are not useful tools in my app.
How can I support playing DRM and Apple Music tracks while not surrendering the remote control features to the system?
Hello Apple Developer Support,
I’m developing a virtual camera using the CMIOExtensionDevice / CMIOExtensionStreamSource APIs on macOS. While the virtual camera appears in system settings and apps like Zoom and Google Meet, the video output exhibits the following issues:
Jittering frames: The first frame sometimes appears correctly, but subsequent frames flicker or jitter.
Solid color fill: Eventually, the camera feed fills entirely with a solid accent color (e.g., blue), rather than the intended video content.
Console logs: Repeated messages appear in Console.app:
Invalid display 0x00000000
Setup details:
The virtual camera is created using CMIOExtensionDevice and CMIOExtensionStream.
Video frames are rendered from NSImage/CGImage using CGContext and copied into CVPixelBuffers.
Frame delivery is controlled by a DispatchSourceTimer at 60 FPS.
macOS version: 26.2
Xcode version: 26.1
Observations:
The Invalid display 0x00000000 logs suggest that CGContext drawing or NSImage operations are failing in headless mode (i.e., there is no real display attached to the virtual camera).
Using CIContext with .useSoftwareRenderer = true appears to mitigate some flicker, but not entirely.
Questions / Requests:
Is it expected that CoreMediaIO virtual cameras cannot reliably render CGImage / NSImage frames offscreen?
Are there recommended APIs or approaches to render virtual camera frames fully headless to avoid display-dependent jitter?
Is there any documentation or sample code from Apple showing stable video output from a virtual camera extension that does not rely on a physical display?
Any guidance or examples would be greatly appreciated. This issue prevents the virtual camera from being used reliably in standard video apps.
Thank you,
Savvy
Topic:
Media Technologies
SubTopic:
Photos & Camera
Tags:
System Extensions
Core Media
Continuity Camera
Hello Apple Developer Support,
I’m developing a virtual camera using the CMIOExtensionDevice / CMIOExtensionStreamSource APIs on macOS. While the virtual camera appears in system settings and apps like Zoom and Google Meet, the video output exhibits the following issues:
Jittering frames: The first frame sometimes appears correctly, but subsequent frames flicker or jitter.
Solid color fill: Eventually, the camera feed fills entirely with a solid accent color (e.g., blue), rather than the intended video content.
Console logs: Repeated messages appear in Console.app:
Invalid display 0x00000000
Setup details:
The virtual camera is created using CMIOExtensionDevice and CMIOExtensionStream.
Video frames are rendered from NSImage/CGImage using CGContext and copied into CVPixelBuffers.
Frame delivery is controlled by a DispatchSourceTimer at 60 FPS.
macOS version: [Your macOS version here]
Xcode version: [Your Xcode version here]
Observations:
The Invalid display 0x00000000 logs suggest that CGContext drawing or NSImage operations are failing in headless mode (i.e., there is no real display attached to the virtual camera).
Using CIContext with .useSoftwareRenderer = true appears to mitigate some flicker, but not entirely.
Questions / Requests:
Is it expected that CoreMediaIO virtual cameras cannot reliably render CGImage / NSImage frames offscreen?
Are there recommended APIs or approaches to render virtual camera frames fully headless to avoid display-dependent jitter?
Is there any documentation or sample code from Apple showing stable video output from a virtual camera extension that does not rely on a physical display?
Any guidance or examples would be greatly appreciated. This issue prevents the virtual camera from being used reliably in standard video apps.
Thank you,
Savvy
Topic:
Media Technologies
SubTopic:
Photos & Camera
Tags:
System Extensions
Core Media
Continuity Camera
I am conducting a forensic examination of a video, and it would be helpful if anyone knew how to decode the LiveTrackInfo of the metadata of a QuickTake .MOV recorded on iOS 17.5.1 There are 27 different fields, and I am not sure what each one represents. Any help would be appreciated! Thank you!
log-file
Hey,
I've noticed that in some scenarios photo data can be corrupted from the cameras on iPhone 17 Pro. The requirements are:
The zoom level is greater than 2 times the base zoom, so 2x for the wide lens, and 8x for the telephoto.
QualityPrioritization is set to .Quality. If set to .Balanced the images look as expected.
The scene is well lit. I haven't managed to work out if there's an ISO cut off, but in darker scenes the images look as expected.
The scene does not contain any objects or texture, e.g. a blank white screen, a blue sky, up close against a bright wall.
Here is an example:
This is really weird behavior. I have opened a ticket here: https://feedbackassistant.apple.com/feedback/22092908
There's also a repo here if anyone would like to try it:
https://github.com/alexfoxy/CameraQualityTest.
Thanks,
Alex
My code that streams buffers into AVAudioPlayerNode is stuttering when the buffer is finished and before the next one is played.
while engine.isRunning {
let framesToCopy = min(buffer.frameLength - framePosition, Self.BufferSize)
let srcRaw = UnsafeRawPointer(srcPtr)
let playbackBuffer = AVAudioPCMBuffer(pcmFormat: buffer.format, frameCapacity: Self.BufferSize)!
let playbackPtr = playbackBuffer.floatChannelData![0]
let destRaw = UnsafeMutableRawPointer(mutating: playbackPtr)
memcpy(destRaw, srcRaw, Int(framesToCopy) * MemoryLayout<Float>.stride)
srcPtr = srcPtr.advanced(by: Int(framesToCopy))
playbackBuffer.frameLength = framesToCopy
await player.scheduleBuffer(playbackBuffer,
at: nil,
options: [],
completionCallbackType: .dataRendered)
}
I've tried to schedule multiple buffers at once using a combination of both the synchronous and async versions of scheduleBuffer because I thought the delay might be but it still stutters and the data copied into the playbackBuffer matches the source buffer. I've tried all combinations of options and completionCallbackType but no luck.
I've tried increasing the buffer size but that just spaces out the stutters because the buffer is larger.
What am I missing about this API?
Hi everyone,
We’re encountering an issue where AudioQueueNewOutput blocks indefinitely and never returns, and we’re hoping to get some insight or confirmation if this is a known behavior/regression on newer iOS versions.
Issue Description
When triggering audio playback, we create an output AudioQueue using AudioQueueNewOutput.
On some devices, the call hangs inside AudioQueueNewOutput and never returns, with no OSStatus error and no subsequent logs.
This behavior is reproducible mainly on iOS 18.3.
Earlier iOS versions do not show this issue under the same code path.
if (audioDes)
{
mAudioDes.mSampleRate = audioDes->mSampleRate;
mAudioDes.mBitsPerChannel = audioDes->mBitsPerChannel;
mAudioDes.mChannelsPerFrame = audioDes->mChannelsPerFrame;
mAudioDes.mFormatID = audioDes->mFormatID;
mAudioDes.mFormatFlags = audioDes->mFormatFlags;
mAudioDes.mFramesPerPacket = audioDes->mFramesPerPacket;
mAudioDes.mBytesPerFrame = audioDes->mBytesPerFrame;
mAudioDes.mBytesPerPacket = audioDes->mBytesPerFrame;
mAudioDes.mReserved = 0;
}
// Create AudioQueue for output
OSStatus status = AudioQueueNewOutput(
&mAudioDes,
AQOutputCallback,
this,
NULL,
NULL,
0,
&audioQueue
);
code-block
The thread blocks inside AudioQueueNewOutput, and execution never reaches the next line.
Additional Notes / Observations
ASBD is confirmed to be valid
Standard PCM output
Sample rate, channels, bytes per frame/packet all consistent
Same ASBD works correctly on earlier iOS versions
AudioQueue is created on a background thread
Not on the main thread
Not inside the AudioQueue callback
On first creation, AVAudioSession may not yet be active
setCategory and setActive:YES may be called shortly before creating the AudioQueue
There may be a timing window where the session is still activating
Issue is reported mainly on iOS 18.3
Multiple user reports point to iOS 18.3 devices
Same code path works on iOS 17.x and earlier
No OSStatus error is returned — the call simply never returns.
Questions
Is it expected that AudioQueueNewOutput can block indefinitely while waiting for AVAudioSession / audio route / HAL readiness?
Have there been any behavior changes in iOS 18.3 regarding AudioQueue creation or AudioSession synchronization?
Is it unsafe to call AudioQueueNewOutput before AVAudioSession is fully active on recent iOS versions?
Are there recommended patterns (or delays / callbacks) to ensure AudioQueue creation does not hang?
Any insight or confirmation would be greatly appreciated.
Thanks in advance!
[Note: this issue was happening on a main testing device, and after testing the same code on other devices, this issue is only happening on 1 out of 4 devices]
We are successfully getting a MusicCatalogResourceResponse for every song ID where we make the MusicCatalogResourceRequest. We are able to display the song title, artist name, and album artwork for each Song in the response.
However - when we go to play the song, there are some songs that play, and several songs that do not play. For the songs that don't play, the console shows “Failed to prepareToPlay error=<MPMusicPlayerControllerErrorDomain.6 "Failed to prepare to play" {}>”
let musicPlayer = ApplicationMusicPlayer.shared
func playSong(_ song: Song) {
musicPlayer.queue = [song]
Task {
try await musicPlayer.prepareToPlay()
try await musicPlayer.play()
}
Is there anything else we can investigate about what may be causing specific song IDs not to play on this specific device?
Even if we remove line 6 musicPlayer.prepareToPlay() we still see the same console error when running playSong with the Songs that don't work.
It is always the same song IDs that we can play and always the same song IDs that we cannot get to play, even trying them across different projects with different bundle identifiers.
We can tap to play a song that works, and it starts playing immediately. Then tap a song that doesn't work, and nothing happens. Then back to a song that works. It's consistent which songs succeed and fail on this device.
Perhaps there is an issue specific to this very iPad when it comes to certain specific songs, but we'd like to be confident that an app relying on MusicKit will be able to play songs that have been successfully loaded with a MusicCatalogResourceResponse.
Thanks for any help or suggestions about what we may be able to investigate further on the device or what we should consider when launching an app that expects anyone with Apple Music to be able to listen to any of the songs loaded by the app.
Specific iPad details: iPad Pro (12.9-inch) (6th generation) running iPadOS 26.4 Beta
Two of the song IDs that won't play on this iPad (even though we can access and display their album artwork and all other information): 943204000 and 1441164805
I read somewhere that the frames are returned in decode order instead of presentation order when using AVAssetReader. The documentation seems sparse on the subject. I have so far failed to find a video file where the frames are not returned in presentation order.
Can anyone confirm the frames are actually returned in decode order?
Hello,
I am currently developing a live streaming application using AVPlayer to play LL-HLS (Low-Latency HLS) content.
During our testing phase, we consistently encountered the following error in the logs:
CoreMediaErrorDomain Code=-15517
The challenge we are facing is that the error description is quite vague. It only provides cryptic messages such as "Key not found" or "No value information," which makes it extremely difficult to identify the root cause or perform a deep-dive analysis.
I have searched through the official Apple Developer documentation and technical notes, but I couldn’t find any specific reference to what Code -15517 signifies in the context of LL-HLS or CoreMedia.
Regarding this issue, I have the following questions:
What is the specific meaning of this error code (-15517)? Does it relate to missing tags in the HLS manifest, or is it an internal state issue within the AVPlayer stack?
Specifically, I would like to know if this is a critical error that disrupts playback, or if it is just a warning that can be safely ignored.
Is there any additional logging or debugging tool you would recommend to further investigate "Key not found" issues in LL-HLS?
Any insights or guidance from the community or Apple engineers would be greatly appreciated.
Thank you in advance for your help.