-
Notifications
You must be signed in to change notification settings - Fork 576
AVFoundation tvOS xcode27.0 b5
Alex Soto edited this page Aug 10, 2026
·
1 revision
#AVFoundation.framework
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetExportSession.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetExportSession.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetExportSession.h 2026-07-15 00:41:09
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetExportSession.h 2026-08-04 01:25:51
@@ -118,38 +118,47 @@
AVAssetTrackGroupOutputHandlingDefaultPolicy = AVAssetTrackGroupOutputHandlingNone
} API_AVAILABLE(macos(13.0), ios(16.0), tvos(16.0), visionos(1.0)) API_UNAVAILABLE(watchos);
-/// An enum that identifies various reasons why resumable export configuration has failed.
+/// The reason that configuring the export session for resumption failed.
typedef NSString * AVAssetExportSessionResumptionFailureReason NS_SWIFT_NAME(AVAssetExportSession.ResumptionFailureReason) NS_EXTENSIBLE_STRING_ENUM API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
-AVF_EXPORT AVAssetExportSessionResumptionFailureReason const AVAssetExportSessionResumptionFailureReasonIncompatiblePreset API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+/// Indicates that resumption isn't supported for this preset and platform combination.
+///
+/// You can continue the export, but it runs as a non-resumable (default) export.
AVF_EXPORT AVAssetExportSessionResumptionFailureReason const AVAssetExportSessionResumptionFailureReasonUnsupportedForPresetOnPlatform API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+/// Indicates that the specified temporary files directory doesn't exist.
+///
+/// Create the temporary files directory and call ``configureForResumableExportWithCompletionHandler:`` again.
AVF_EXPORT AVAssetExportSessionResumptionFailureReason const AVAssetExportSessionResumptionFailureReasonTemporaryDirectoryDoesNotExist API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+/// Indicates the export session settings are incompatible with resumable export.
AVF_EXPORT AVAssetExportSessionResumptionFailureReason const AVAssetExportSessionResumptionFailureReasonIncompatibleSessionSettings API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+/// Indicates that the contents of the specified temporary files directory are inconsistent with the current resuming export.
+///
+/// You're likely aliasing two distinct exports together. Use a unique temporary files directory for each export, or clear the directory before resuming.
AVF_EXPORT AVAssetExportSessionResumptionFailureReason const AVAssetExportSessionResumptionFailureReasonIncompatibleTemporaryDirectoryContents API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
-/// AVAssetExportSessionResumptionState details the current resumption state of the export session. A resumable export session is configured via configureForResumableExportWithCompletionHandler:.
+/// The current resumption state of the export session.
+///
+/// Configure a resumable export session with ``AVAssetExportSession/configureForResumableExportWithCompletionHandler:``.
API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos)
NS_REFINED_FOR_SWIFT
@interface AVAssetExportSessionResumptionState : NSObject
-/// Reports whether or not the export session has been successfully configure as resumable.
-///
-/// If YES, the export session in configured as resumable. If NO, the export session will remain
-/// as non-resumable (default). exportAsynchronouslyWithCompletionHandler may still be called
-/// if this returns as NO.
+/// A Boolean value that indicates whether the export session is configured as resumable.
+///
+/// If `true`, the export session is configured as resumable. If `false`, the export session will remain as non-resumable (default). You can still call ``AVAssetExportSession/exportAsynchronouslyWithCompletionHandler:`` when this property is `false`.
@property (readonly, getter=isResumptionConfigured) BOOL resumptionConfigured;
-/// Reports whether or not a resuming export is continuing from a previous state.
-///
-/// This indicates whether or not the export is resuming (YES) or starting from the beginning (NO).
-/// Valid only if resumptionConfigured is YES.
+/// A Boolean value that indicates whether or not a resuming export is continuing from a previous state.
+///
+/// A value of `true` means the export resumes from previous results; a value of `false` means it starts from the beginning. This value is valid only when ``resumptionConfigured`` is `true`.
@property (readonly, getter=isResumingFromPreviousState) BOOL resumingFromPreviousState;
-/// Provides details on why the session was not able to be configured as resumable.
-///
-/// Reasons for failure include incompatible session settings and incompatible
-/// directoryForTemporaryFiles contents.
-/// Valid only if resumptionConfigured is NO.
+/// The reason that the export session couldn't be configured as resumable.
+///
+/// This value is valid only when ``resumptionConfigured`` is `false`.
@property (readonly, nullable) AVAssetExportSessionResumptionFailureReason configurationFailureReason;
@end // AVAssetExportSessionResumptionState
@@ -197,7 +206,7 @@
+ (nullable instancetype)exportSessionWithAsset:(AVAsset *)asset presetName:(NSString *)presetName API_AVAILABLE(macos(10.7), ios(4.1), tvos(9.0), visionos(1.0)) API_UNAVAILABLE(watchos);
/// Initialize an AVAssetExportSession with the specified preset and set the source to the contents of the asset.
-///
+///
/// If the specified asset belongs to a mutable subclass of AVAsset, AVMutableComposition or AVMutableMovie, the results of any export-related operation are undefined if you mutate the asset after the operation commences. These operations include but are not limited to: 1) testing the compatibility of export presets with the asset, 2) calculating the maximum duration or estimated length of the output file, and 3) the export operation itself.
///
/// - Parameter asset: An AVAsset object that is intended to be exported.
@@ -210,13 +219,13 @@
/* Swift apps should use AVAssetExportSession.states to monitor the session */
-/// Indicates the name of the preset with which the AVExportSession was initialized.
+/// Indicates the name of the preset with which the export session was initialized.
@property (nonatomic, readonly) NSString *presetName;
-/// Indicates the instance of AVAsset with which the AVExportSession was initialized.
+/// Indicates the instance of AVAsset with which the export session was initialized.
@property (nonatomic, retain, readonly) AVAsset *asset API_AVAILABLE(macos(10.8), ios(5.0), tvos(9.0), visionos(1.0)) API_UNAVAILABLE(watchos);
-/// Indicates the type of file to be written by the session.
+/// Indicates the type of file to be written by the export session.
///
/// The value of this property must be set before you invoke -exportAsynchronouslyWithCompletionHandler:; otherwise -exportAsynchronouslyWithCompletionHandler: will raise an NSInternalInconsistencyException. Setting the value of this property to a file type that's not among the session's supported file types will result in an NSInvalidArgumentException. See supportedFileTypes.
@property (nonatomic, copy, nullable) AVFileType outputFileType
@@ -300,8 +309,8 @@
///
/// Not all export presets are compatible with all AVAssets. For example an video only asset is not compatible with an audio only preset.
/// This method returns only the identifiers for presets that will be compatible with the given asset.
-/// A client should pass in an AVAsset that is ready to be exported.
-/// In order to ensure that the setup and running of an export operation will succeed using a given preset no significant changes
+/// You should pass in an ``AVAsset`` that is ready to be exported.
+/// In order to ensure that the setup and running of the export operation will succeed using a given preset no significant changes
/// (such as adding or deleting tracks) should be made to the asset between retrieving compatible identifiers and performing the export operation.
/// This method will access the tracks property of the AVAsset to build the returned NSArray. To avoid blocking the calling thread,
/// the tracks property should be loaded using the AVAsynchronousKeyValueLoading protocol before calling this method.
@@ -322,7 +331,7 @@
/// - Parameter presetName: An NSString specifying the name of the preset template for the export.
/// - Parameter asset: An AVAsset object that is intended to be exported.
/// - Parameter outputFileType: An AVFileType indicating a file type to check; or nil, to query whether there are any compatible types.
-/// - Parameter handler: A block called with the compatibility result.
+/// - Parameter handler: A callback that receives the compatibility result.
+ (void)determineCompatibilityOfExportPreset:(NSString *)presetName withAsset:(AVAsset *)asset outputFileType:(nullable AVFileType)outputFileType completionHandler:(void (^ NS_SWIFT_SENDABLE)(BOOL compatible))handler API_AVAILABLE(macos(10.9), ios(6.0), tvos(9.0), visionos(1.0)) API_UNAVAILABLE(watchos) NS_SWIFT_ASYNC_NAME(compatibility(ofExportPreset:with:outputFileType:));
@end // AVAssetExportSessionPresets
@@ -363,14 +372,14 @@
///
/// If fileLengthLimit is not set on the export session, fileLengthLimit will be assumed to be the maximum file size specified by the preset (if any); else infinite.
///
-/// - Parameter handler: A block called with the estimated maximum duration, or kCMTimeInvalid if an error occurs. The error parameter will be non-nil if an error occurs.
+/// - Parameter handler: A callback that receives the estimated maximum duration, or <doc://com.apple.documentation/documentation/coremedia/cmtime/invalid> if an error occurs. The error parameter will be non-nil if an error occurs.
- (void)estimateMaximumDurationWithCompletionHandler:(void (^ NS_SWIFT_SENDABLE)(CMTime estimatedMaximumDuration, NSError * _Nullable error ))handler API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), visionos(1.0)) API_UNAVAILABLE(watchos) NS_SWIFT_ASYNC_NAME(getter:estimatedMaximumDuration());
/// Starts the asynchronous execution of estimating the output file length of the export based on the asset, preset, and timeRange associated with the export session.
///
/// If timeRange is not set on the export session, timeRange will be assumed to be the full time range of the asset.
///
-/// - Parameter handler: A block called with the estimated output file length in bytes, if it can be determined; 0 otherwise. The error parameter will be non-nil if an error occurs.
+/// - Parameter handler: A callback that receives the estimated output file length in bytes, if it can be determined; 0 otherwise. The error parameter will be non-nil if an error occurs.
- (void)estimateOutputFileLengthWithCompletionHandler:(void (^ NS_SWIFT_SENDABLE)(int64_t estimatedOutputFileLength, NSError * _Nullable error ))handler API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), visionos(1.0)) API_UNAVAILABLE(watchos) NS_SWIFT_ASYNC_NAME(getter:estimatedOutputFileLengthInBytes());
@end // AVAssetExportSessionDurationAndLength
@@ -443,43 +452,28 @@
API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos)
@interface AVAssetExportSession (AVAssetExportSessionResumable)
-/// Attempt to configure the exportSession into resumption mode.
-///
-/// For select encoders, an export can be performed in temporal segments, and then
-/// stitched together at the end.
-///
-/// The client is responsible for configuring the export session identically for subsequent
-/// sessions, if the export is to be resumed from partial results from a previous run.
-///
-/// IMPORTANT: directoryForTemporaryFiles MUST be specified for resumable exports.
-/// This directory holds the temporary files for resumable exports which allows the export to
-/// resume on a subsequent instantiation. The client is responsible for making the
-/// directoryForTemporaryFiles unique and deterministic across app launches or device reboots
-/// if the session is intended to be resumable after such events. The client must ensure that
-/// it does not re-use a temporary directory corresponding to a different resumable export
-/// session, or the contents between different exports may be erroneously combined.
-///
-/// This method validates that the currently configured export properties allow resumption,
-/// and interrogates the contents of directoryForTemporaryFiles to determine if this is a resuming
-/// session or a new one. As such, this should be called after all settings are finalized for this
-/// export session, i.e. just prior to exportAsynchronouslyWithCompletionHandler.
-///
-/// resumptionState details the currently configured resumption state of the export session.
-/// Even if resumptionState indicates not all conditions for resumption are met, a client may still
-/// call exportAsynchronouslyWithCompletionHandler using the current session, and the export
-/// will be performed in the default (non-resuming) manner.
-///
+/// Attempts to configure the export session into resumption mode.
+///
+/// For select encoders, an export can be performed in temporal segments, and then stitched together at the end.
+///
+/// You are responsible for configuring the export session identically for subsequent sessions, if the export is to be resumed from partial results from a previous run.
+///
+/// - Important: ``directoryForTemporaryFiles`` must be specified for resumable exports. This directory holds the temporary files for resumable exports, which allows the export to resume on a subsequent instantiation. You are responsible for making the ``directoryForTemporaryFiles`` unique and deterministic across app launches or device reboots if the session is intended to be resumable after such events. You must ensure that it doesn't re-use a temporary directory corresponding to a different resumable export session, or the contents between different exports may be erroneously combined.
+///
+/// This method validates that the currently configured export properties allow resumption, and interrogates the contents of ``directoryForTemporaryFiles`` to determine whether this is a resuming session or a new one. As such, call this method after all settings are finalized for this export session, that is, just prior to ``exportAsynchronouslyWithCompletionHandler:``.
+///
+/// ``resumptionState`` details the currently configured resumption state of the export session. Even if resumptionState indicates that not all conditions for resumption are met, you may still call ``exportAsynchronouslyWithCompletionHandler:`` using the current session, and the export proceeds in the default, non-resuming manner.
+///
/// This method cannot be called after the export has started.
///
-/// cancelExport may be called if an in-flight export needs to be interrupted. The partial results
-/// will be maintained.
-///
-/// The client is responsible for deleting the temporary directory if the export will never be
-/// resumed in the future.
-///
-/// Since intermediate files are written to support the resume functionality, resumable exports
-/// will typically double the NAND accesses, since the samples need to be written to disk twice.
-- (void)configureForResumableExportWithCompletionHandler:(void (^)(AVAssetExportSessionResumptionState * resumptionState))completionHandler NS_REFINED_FOR_SWIFT;
+/// Call ``cancelExport`` if an in-flight export needs to be interrupted. The export maintains the partial results.
+///
+/// You are responsible for deleting the temporary directory and its contents if the export will never be resumed.
+///
+/// Because intermediate files are written to support the resume functionality, resumable exports typically double the NAND accesses, because the samples need to be written to disk twice.
+///
+/// - Parameter handler: A callback that receives the resumption configuration state. If configuration fails, the system might call the handler synchronously.
+- (void)configureForResumableExportWithCompletionHandler:(void (^)(AVAssetExportSessionResumptionState * resumptionState))handler NS_REFINED_FOR_SWIFT;
@end // AVAssetExportSessionResumable
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetReaderOutput.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetReaderOutput.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetReaderOutput.h 2026-07-15 00:28:47
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVAssetReaderOutput.h 2026-08-04 01:31:34
@@ -89,7 +89,9 @@
The client is responsible for calling CFRelease on the returned CMSampleBuffer object when finished with it. This method will return NULL if there are no more sample buffers available for the receiver within the time range specified by its AVAssetReader's timeRange property, or if there is an error that prevents the AVAssetReader from reading more media data. When this method returns NULL, clients should check the value of the associated AVAssetReader's status property to determine why no more samples could be read.
In certain configurations, such as when outputSettings is nil, copyNextSampleBuffer may return marker-only sample buffers as well as sample buffers containing media data. Marker-only sample buffers can be identified by CMSampleBufferGetNumSamples returning 0. Clients who do not need the information attached to marker-only sample buffers may skip them.
-
+
+ The order of returned sample buffers depends on the output's configuration. For a track output with a `nil` ``AVAssetReaderTrackOutput/outputSettings`` dictionary, the output skips decoding and returns sample buffers in decode order. Preserve that order when working with the encoded samples directly, such as when passing them to ``AVAssetWriter``. When the output decodes the samples, it returns them in presentation order. Playback and downstream processing operate in presentation order, so decode order no longer matters after decoding.
+
This method throws an exception if this output is not added to an instance of AVAssetReader (using -addOutput:) and -startReading is not called on that asset reader.
*/
- (nullable CMSampleBufferRef)copyNextSampleBuffer CF_RETURNS_RETAINED
@@ -313,7 +315,7 @@
The output settings used by the receiver.
@discussion
- The value of this property is an NSDictionary that contains values for keys as specified by either AVAudioSettings.h for audio tracks or AVVideoSettings.h for video tracks. A value of nil indicates that the receiver will vend samples in their original format as stored in the target track.
+ The value is a dictionary that contains values for audio and video settings keys. A value of `nil` indicates that the track output vends samples in their original format as stored in the target track. In that case, the track output skips decoding and returns the samples in decode order. A non-`nil` value causes the track output to decode the samples and return them in presentation order.
*/
@property (nonatomic, readonly, nullable) NSDictionary<NSString *, id> *outputSettings;
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSystemPressure.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSystemPressure.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSystemPressure.h 2026-07-11 03:32:57
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSystemPressure.h 2026-08-05 01:49:46
@@ -63,8 +63,9 @@
AVCaptureSystemPressureFactorDepthModuleTemperature = (1UL << 2),
/// Indicates that the camera module is operating at an elevated temperature.
AVCaptureSystemPressureFactorCameraTemperature API_AVAILABLE(ios(17.0), macCatalyst(17.0), tvos(17.0)) API_UNAVAILABLE(macos) API_UNAVAILABLE(watchos) = (1UL << 3),
- /// Indicates that the system is 30 seconds away from unexpected power off.
- AVCaptureSystemPressureFactorSystemStress API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos) API_UNAVAILABLE(watchos) = (1UL << 4),
+ /// Indicates that under the current battery conditions, the device will shut down within 30 seconds if system load is not reduced.
+ AVCaptureSystemPressureFactorBatteryStress API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) API_UNAVAILABLE(watchos) = (1UL << 4),
+
} API_AVAILABLE(ios(11.1), macCatalyst(14.0), tvos(17.0), visionos(1.0)) API_UNAVAILABLE(macos) API_UNAVAILABLE(watchos);
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayerItemSampleBufferOutput.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayerItemSampleBufferOutput.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayerItemSampleBufferOutput.h 2026-07-15 00:41:09
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayerItemSampleBufferOutput.h 2026-08-04 01:25:51
@@ -53,7 +53,8 @@
///
/// Must be a PCM format.
///
-/// The output `CMSampleBuffers'` `CMFormatDescription` may not exactly match this format description, but it will match the parts described in the ``AudioStreamBasicDescription``.
+/// The output `CMSampleBuffers'` `CMFormatDescription` may not exactly match this format description, but it will match the parts described in the ``AudioStreamBasicDescription``. The output format may differ from the requestedAudioFormat in its LPCM numeric type, channel interleaving and sample size.
+/// If any of these differs from the format in which you wish to operate, you can set up conversions between the format of audio sample buffers provided by the AVPlayerItemSampleBufferOutput and your required processing format by using AudioConverter or AVAudioEngine.
///
/// Specifying a PCM format is currently required. In the future it may be optional.
@property (nonatomic, nullable) __attribute__((NSObject)) CMFormatDescriptionRef requestedAudioFormat;
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVQueuedSampleBufferRendering.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVQueuedSampleBufferRendering.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVQueuedSampleBufferRendering.h 2026-07-11 03:29:13
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVQueuedSampleBufferRendering.h 2026-08-04 11:15:55
@@ -33,7 +33,11 @@
/// Defines methods for enqueueing CMSampleBuffers for presentation.
///
/// AVSampleBufferDisplayLayer and AVSampleBufferAudioRenderer conform to this protocol. When used in conjunction with an AVSampleBufferRenderSynchronizer, an object conforming to AVQueuedSampleBufferRendering can only be attached to a single synchronizer.
+#if defined(__swift__)
+API_DEPRECATED("Use an AVSampleBufferVideoRenderer or AVSampleBufferAudioRenderer with a render synchronizer instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
@protocol AVQueuedSampleBufferRendering <NSObject>
/// The renderer's timebase, which governs how time stamps are interpreted.
@@ -55,12 +59,7 @@
///
/// The combination of either a non-NULL controlTimebase or an AVSampleBufferRenderSynchronizer with the use of kCMSampleAttachmentKey_DisplayImmediately as an attachment to the CMSampleBuffers that are enqueued for display is not recommended.
- (void)enqueueSampleBuffer:(CMSampleBufferRef)sampleBuffer
-#if defined(__swift__)
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async or enqueueImmediately(_:) methods instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async or enqueueImmediately(_:) methods instead", watchos(4.0, 27.0))
-#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
-#endif
;
/// Instructs the receiver to discard pending enqueued sample buffers.
@@ -71,12 +70,7 @@
///
/// It is not possible to determine which sample buffers have been decoded, so the next frame passed to enqueueSampleBuffer: should be an IDR frame (also known as a key frame or sync sample).
- (void)flush
-#if defined(__swift__)
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush() method instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush() method instead", watchos(4.0, 27.0))
-#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
-#endif
;
/// Indicates the readiness of the receiver to accept more sample buffers.
@@ -93,11 +87,7 @@
///
/// This property is not key value observable.
@property (readonly, getter=isReadyForMoreMediaData) BOOL readyForMoreMediaData
-#if defined(__swift__)
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async method on its own detached Task to suspend until it is ready for more media data instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
-#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
-#endif
;
/// Instructs the target to invoke a client-supplied block repeatedly, at its convenience, in order to gather sample buffers for playback.
@@ -108,36 +98,21 @@
///
/// Each call to requestMediaDataWhenReadyOnQueue:usingBlock: should be paired with a corresponding call to stopRequestingMediaData:. Releasing the AVQueuedSampleBufferRendering object without a call to stopRequestingMediaData will result in undefined behavior.
- (void)requestMediaDataWhenReadyOnQueue:(dispatch_queue_t)queue usingBlock:(void (^ NS_SWIFT_SENDABLE)(void))block
-#if defined(__swift__)
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver to enqueue samples on a detached Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver to enqueue samples on a detached Task instead", watchos(4.0, 27.0))
-#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
-#endif
;
/// Cancels any current requestMediaDataWhenReadyOnQueue:usingBlock: call.
///
/// This method may be called from outside the block or from within the block.
- (void)stopRequestingMediaData
-#if defined(__swift__)
-API_DEPRECATED("Cancel the receiver's Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Cancel the receiver's Task instead", watchos(4.0, 27.0))
-#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
-#endif
;
/// Indicates whether the enqueued media data meets the renderer's preroll level.
///
/// Clients should fetch the value of this property to learn if the renderer has had enough media data enqueued to start playback reliably. Starting playback when this property is NO may prevent smooth playback following an immediate start.
@property (nonatomic, readonly) BOOL hasSufficientMediaDataForReliablePlaybackStart
-#if defined(__swift__)
-API_DEPRECATED("For smooth playback, attach the renderer to a render synchronizer and set the synchronizer's delaysRateChangeUntilHasSufficientMediaData property to true instead", macos(11.3, 27.0), ios(14.5, 27.0), tvos(14.5, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("For smooth playback, attach the renderer to a render synchronizer and set the synchronizer's delaysRateChangeUntilHasSufficientMediaData property to true instead", watchos(7.4, 27.0))
-#else
API_AVAILABLE(macos(11.3), ios(14.5), tvos(14.5), watchos(7.4), visionos(1.0))
-#endif
;
@end
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferAudioRenderer.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferAudioRenderer.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferAudioRenderer.h 2026-07-11 03:29:37
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferAudioRenderer.h 2026-08-04 11:16:24
@@ -37,8 +37,7 @@
/// This property is key value observable.
@property (nonatomic, readonly) AVQueuedSampleBufferRenderingStatus status
#if defined(__swift__)
-API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", watchos(4.0, 27.0))
+API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
#endif
@@ -49,8 +48,7 @@
/// The value of this property is an NSError that describes what caused the renderer to no longer be able to render sample buffers. The value of this property is nil unless the value of status is AVQueuedSampleBufferRenderingStatusFailed.
@property (nonatomic, readonly, nullable) NSError *error
#if defined(__swift__)
-API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", watchos(4.0, 27.0))
+API_DEPRECATED("Use EnqueueResult from enqueue(_:) and enqueueImmediately(_:), and RenderingEvent from renderingEventsAfterFinishedEnqueuing instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
#endif
@@ -87,6 +85,86 @@
/// Spatialization uses psychoacoustic methods to create a more immersive audio rendering when the content is played on specialized headphones and speaker arrangements. When an AVSampleBufferAudioRenderer's allowedAudioSpatializationFormats property is set to AVAudioSpatializationFormatMonoAndStereo the AVSampleBufferAudioRenderer will attempt to spatialize content tagged with a stereo channel layout, two-channel content with no layout specified as well as mono. It is considered incorrect to render a binaural recording with spatialization. A binaural recording is captured using two carefully placed microphones at each ear where the intent, when played on headphones, is to reproduce a naturally occurring spatial effect. Content tagged with a binaural channel layout will ignore this property value. When an AVSampleBufferAudioRenderer's allowedAudioSpatializationFormats property is set to AVAudioSpatializationFormatMultichannel the AVSampleBufferAudioRenderer will attempt to spatialize any decodable multichannel layout. Setting this property to AVAudioSpatializationFormatMonoStereoAndMultichannel indicates that the sender allows the AVSampleBufferAudioRenderer to spatialize any decodable mono, stereo or multichannel layout. This property is not observable. The default value for this property is AVAudioSpatializationFormatMultichannel.
@property (nonatomic, assign) AVAudioSpatializationFormats allowedAudioSpatializationFormats API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), visionos(1.0)) API_UNAVAILABLE(watchos);
+/// Sends a sample buffer in order to render its contents.
+///
+/// The audio in the sample buffer is rendered at the sample buffer's output presentation timestamp, as interpreted by the timebase.
+- (void)enqueueSampleBuffer:(CMSampleBufferRef)sampleBuffer
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async or enqueueImmediately(_:) methods instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Instructs the receiver to discard pending enqueued sample buffers.
+///
+/// Additional sample buffers can be appended after -flush.
+- (void)flush
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush() method instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Indicates the readiness of the receiver to accept more sample buffers.
+///
+/// An object conforming to AVQueuedSampleBufferRendering keeps track of the occupancy levels of its internal queues for the benefit of clients that enqueue sample buffers from non-real-time sources -- i.e., clients that can supply sample buffers faster than they are consumed, and so need to decide when to hold back.
+///
+/// Clients enqueueing sample buffers from non-real-time sources may hold off from generating or obtaining more sample buffers to enqueue when the value of readyForMoreMediaData is NO.
+///
+/// It is safe to call enqueueSampleBuffer: when readyForMoreMediaData is NO, but it is a bad idea to enqueue sample buffers without bound.
+///
+/// To help with control of the non-real-time supply of sample buffers, such clients can use -requestMediaDataWhenReadyOnQueue:usingBlock in order to specify a block that the receiver should invoke whenever it's ready for sample buffers to be appended.
+///
+/// The value of readyForMoreMediaData will often change from NO to YES asynchronously, as previously supplied sample buffers are decoded and rendered.
+///
+/// This property is not key value observable.
+@property (readonly, getter=isReadyForMoreMediaData) BOOL readyForMoreMediaData
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async method on its own detached Task to suspend until it is ready for more media data instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Instructs the target to invoke a client-supplied block repeatedly, at its convenience, in order to gather sample buffers for playback.
+///
+/// The block should enqueue sample buffers to the receiver either until the receiver's readyForMoreMediaData property becomes NO or until there is no more data to supply. When the receiver has decoded enough of the media data it has received that it becomes ready for more media data again, it will invoke the block again in order to obtain more.
+///
+/// If this method is called multiple times, only the last call is effective. Call stopRequestingMediaData to cancel this request.
+///
+/// Each call to requestMediaDataWhenReadyOnQueue:usingBlock: should be paired with a corresponding call to stopRequestingMediaData:. Releasing the AVQueuedSampleBufferRendering object without a call to stopRequestingMediaData will result in undefined behavior.
+- (void)requestMediaDataWhenReadyOnQueue:(dispatch_queue_t)queue usingBlock:(void (^ NS_SWIFT_SENDABLE)(void))block
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver to enqueue samples on a detached Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Cancels any current requestMediaDataWhenReadyOnQueue:usingBlock: call.
+///
+/// This method may be called from outside the block or from within the block.
+- (void)stopRequestingMediaData
+#if defined(__swift__)
+API_DEPRECATED("Cancel the receiver's Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Indicates whether the enqueued media data meets the renderer's preroll level.
+///
+/// Clients should fetch the value of this property to learn if the renderer has had enough media data enqueued to start playback reliably. Starting playback when this property is NO may prevent smooth playback following an immediate start.
+@property (nonatomic, readonly) BOOL hasSufficientMediaDataForReliablePlaybackStart
+#if defined(__swift__)
+API_DEPRECATED("For smooth playback, attach the renderer to a render synchronizer and set the synchronizer's delaysRateChangeUntilHasSufficientMediaData property to true instead", macos(11.3, 27.0), ios(14.5, 27.0), tvos(14.5, 27.0), watchos(7.4, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(11.3), ios(14.5), tvos(14.5), watchos(7.4), visionos(1.0))
+#endif
+;
+
@end
@interface AVSampleBufferAudioRenderer (AVSampleBufferAudioRendererVolumeControl)
@@ -118,8 +196,7 @@
/// - Parameter completionHandler: A block that is invoked, possibly asynchronously, after the flush operation completes or fails.
- (void)flushFromSourceTime:(CMTime)time completionHandler:(void (^ NS_SWIFT_SENDABLE)(BOOL flushSucceeded))completionHandler
#if defined(__swift__)
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush(fromSourceTime:) method instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush(fromSourceTime:) method instead", watchos(4.0, 27.0))
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush(fromSourceTime:) method instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
#endif
@@ -134,8 +211,7 @@
/// This notification is delivered on an arbitrary thread. If sample buffers are being enqueued with the renderer concurrently with the receipt of this notification, it is possible that one or more sample buffers will remain enqueued in the renderer. This is generally undesirable, because the sample buffers that remain will likely have timestamps far ahead of the timebase's current time and so won't be rendered for some time. The best practice is to invoke the -flush method, in a manner that is serialized with enqueueing sample buffers, after receiving this notification and before resuming the enqueueing of sample buffers.
AVF_EXPORT NSNotificationName const AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification
#if defined(__swift__)
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", watchos(4.0, 27.0))
+API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
#endif
@@ -146,8 +222,7 @@
/// The output configuration of the playback hardware might change during the playback session if other clients play content with different format. In such cases, if the media content format does not match the hardware configuration it would produce suboptimal rendering of the enqueued media data. When the framework detects such mismatch it will issue this notification, so the client can flush the renderer and re-enqueue the sample buffers from the current media playhead, which will configure the hardware based on the format of newly enqueued sample buffers.
AVF_EXPORT NSNotificationName const AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification
#if defined(__swift__)
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(12.0, 27.0), ios(15.0, 27.0), tvos(15.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", watchos(8.0, 27.0))
+API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(12.0, 27.0), ios(15.0, 27.0), tvos(15.0, 27.0), watchos(8.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0), visionos(1.0))
#endif
@@ -158,8 +233,7 @@
/// The value of this key is an NSValue wrapping a CMTime.
AVF_EXPORT NSString * const AVSampleBufferAudioRendererFlushTimeKey
#if defined(__swift__)
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
-API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", watchos(4.0, 27.0))
+API_DEPRECATED("Use the result of AVSampleBufferAudioRenderer.Receiver enqueue(_:) and enqueueImmediately(_:) for .successWithSuggestedFlushReason instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
#else
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
#endif
diff -ruN /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferVideoRenderer.h /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferVideoRenderer.h
--- /Applications/Xcode_27.0.0-beta4.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferVideoRenderer.h 2026-07-15 00:42:52
+++ /Applications/Xcode_27.0.0-beta5.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVSampleBufferVideoRenderer.h 2026-08-04 12:00:01
@@ -111,6 +111,103 @@
#endif
;
+/// Sends a sample buffer in order to render its contents.
+///
+/// Video-specific notes:
+///
+/// If sampleBuffer has the kCMSampleAttachmentKey_DoNotDisplay attachment set to kCFBooleanTrue, the frame will be decoded but not displayed. Otherwise, if sampleBuffer has the kCMSampleAttachmentKey_DisplayImmediately attachment set to kCFBooleanTrue, the decoded image will be displayed as soon as possible, replacing all previously enqueued images regardless of their timestamps. Otherwise, the decoded image will be displayed at sampleBuffer's output presentation timestamp, as interpreted by the timebase.
+///
+/// To schedule the removal of previous images at a specific timestamp, enqueue a marker sample buffer containing no samples, with the kCMSampleBufferAttachmentKey_EmptyMedia attachment set to kCFBooleanTrue.
+///
+/// IMPORTANT NOTE: attachments with the kCMSampleAttachmentKey_ prefix must be set via CMSampleBufferGetSampleAttachmentsArray and CFDictionarySetValue. Attachments with the kCMSampleBufferAttachmentKey_ prefix must be set via CMSetAttachment.
+///
+/// The combination of either a non-NULL controlTimebase or an AVSampleBufferRenderSynchronizer with the use of kCMSampleAttachmentKey_DisplayImmediately as an attachment to the CMSampleBuffers that are enqueued for display is not recommended.
+- (void)enqueueSampleBuffer:(CMSampleBufferRef)sampleBuffer
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async or enqueueImmediately(_:) methods instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async or enqueueImmediately(_:) methods instead", watchos(4.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Instructs the receiver to discard pending enqueued sample buffers.
+///
+/// Additional sample buffers can be appended after -flush.
+///
+/// Video-specific notes:
+///
+/// It is not possible to determine which sample buffers have been decoded, so the next frame passed to enqueueSampleBuffer: should be an IDR frame (also known as a key frame or sync sample).
+- (void)flush
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush() method instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's flush() method instead", watchos(4.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Indicates the readiness of the receiver to accept more sample buffers.
+///
+/// An object conforming to AVQueuedSampleBufferRendering keeps track of the occupancy levels of its internal queues for the benefit of clients that enqueue sample buffers from non-real-time sources -- i.e., clients that can supply sample buffers faster than they are consumed, and so need to decide when to hold back.
+///
+/// Clients enqueueing sample buffers from non-real-time sources may hold off from generating or obtaining more sample buffers to enqueue when the value of readyForMoreMediaData is NO.
+///
+/// It is safe to call enqueueSampleBuffer: when readyForMoreMediaData is NO, but it is a bad idea to enqueue sample buffers without bound.
+///
+/// To help with control of the non-real-time supply of sample buffers, such clients can use -requestMediaDataWhenReadyOnQueue:usingBlock in order to specify a block that the receiver should invoke whenever it's ready for sample buffers to be appended.
+///
+/// The value of readyForMoreMediaData will often change from NO to YES asynchronously, as previously supplied sample buffers are decoded and rendered.
+///
+/// This property is not key value observable.
+@property (readonly, getter=isReadyForMoreMediaData) BOOL readyForMoreMediaData
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver's enqueue(_:) async method on its own detached Task to suspend until it is ready for more media data instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), watchos(4.0, 27.0), visionos(1.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Instructs the target to invoke a client-supplied block repeatedly, at its convenience, in order to gather sample buffers for playback.
+///
+/// The block should enqueue sample buffers to the receiver either until the receiver's readyForMoreMediaData property becomes NO or until there is no more data to supply. When the receiver has decoded enough of the media data it has received that it becomes ready for more media data again, it will invoke the block again in order to obtain more.
+///
+/// If this method is called multiple times, only the last call is effective. Call stopRequestingMediaData to cancel this request.
+///
+/// Each call to requestMediaDataWhenReadyOnQueue:usingBlock: should be paired with a corresponding call to stopRequestingMediaData:. Releasing the AVQueuedSampleBufferRendering object without a call to stopRequestingMediaData will result in undefined behavior.
+- (void)requestMediaDataWhenReadyOnQueue:(dispatch_queue_t)queue usingBlock:(void (^ NS_SWIFT_SENDABLE)(void))block
+#if defined(__swift__)
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver to enqueue samples on a detached Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
+API_DEPRECATED("Attach renderer to a render synchronizer with sampleBufferReceiver(adding:) and use the receiver to enqueue samples on a detached Task instead", watchos(4.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Cancels any current requestMediaDataWhenReadyOnQueue:usingBlock: call.
+///
+/// This method may be called from outside the block or from within the block.
+- (void)stopRequestingMediaData
+#if defined(__swift__)
+API_DEPRECATED("Cancel the receiver's Task instead", macos(10.13, 27.0), ios(11.0, 27.0), tvos(11.0, 27.0), visionos(1.0, 27.0))
+API_DEPRECATED("Cancel the receiver's Task instead", watchos(4.0, 27.0))
+#else
+API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0), visionos(1.0))
+#endif
+;
+
+/// Indicates whether the enqueued media data meets the renderer's preroll level.
+///
+/// Clients should fetch the value of this property to learn if the renderer has had enough media data enqueued to start playback reliably. Starting playback when this property is NO may prevent smooth playback following an immediate start.
+@property (nonatomic, readonly) BOOL hasSufficientMediaDataForReliablePlaybackStart
+#if defined(__swift__)
+API_DEPRECATED("For smooth playback, attach the renderer to a render synchronizer and set the synchronizer's delaysRateChangeUntilHasSufficientMediaData property to true instead", macos(11.3, 27.0), ios(14.5, 27.0), tvos(14.5, 27.0), visionos(1.0, 27.0))
+API_DEPRECATED("For smooth playback, attach the renderer to a render synchronizer and set the synchronizer's delaysRateChangeUntilHasSufficientMediaData property to true instead", watchos(7.4, 27.0))
+#else
+API_AVAILABLE(macos(11.3), ios(14.5), tvos(14.5), watchos(7.4), visionos(1.0))
+#endif
+;
+
@end
API_AVAILABLE(macos(14.4), ios(17.4), tvos(17.4), visionos(1.1)) API_UNAVAILABLE(watchos)