Streaming

RSS for tag

Deep dive into the technical specifications that influence seamless playback for streaming services, including bitrates, codecs, and caching mechanisms.

Streaming Documentation

Posts under Streaming subtopic

Post

Replies

Boosts

Views

Activity

Inquiry about Low-Latency Frame Interpolation & Super Resolution using VTFrameProcessor
Hello, I have implemented Low-Latency Frame Interpolation using the VTFrameProcessor framework, based on the sample code from https://developer.apple.com/kr/videos/play/wwdc2025/300. It is currently working well for both LIVE and VOD streams. However, I have a few questions regarding the lifecycle management and synchronization of this feature: 1. Common Questions (Applicable to both Frame Interpolation & Super Resolution) 1.1 Dynamic Toggling Do you recommend enabling/disabling these features dynamically during playback? Or is it better practice to configure them only during the initial setup/preparation phase? If dynamic toggling is supported, are there any recommended patterns for managing VTFrameProcessor session lifecycle (e.g., startSession / endSession timing)? 1.2 Synchronization Method I am currently using CADisplayLink to fetch frames from AVPlayerItemVideoOutput and perform processing. Is CADisplayLink the recommended approach for real-time frame acquisition with VTFrameProcessor? If the feature needs to be toggled on/off during active playback, are there any concerns or alternative approaches you would recommend? 1.3 Supported Resolution/Quality Range What are the minimum and maximum video resolutions supported for each feature? Are there any aspect ratio restrictions (e.g., does it support 1:1 square videos)? Is there a recommended resolution range for optimal performance and quality? 2. Frame Interpolation Specific Questions 2.1 LIVE Stream Support Is Low-Latency Frame Interpolation suitable for LIVE streaming scenarios where latency is critical? Are there any special considerations for LIVE vs VOD? 3. Super Resolution Specific Questions 3.1 Adaptive Bitrate (ABR) Stream Support In ABR (HLS/DASH) streams, the video resolution can change dynamically during playback. Is VTLowLatencySuperResolutionScaler compatible with ABR streams where resolution changes mid-playback? If resolution changes occur, should I recreate the VTLowLatencySuperResolutionScalerConfiguration and restart the session, or does the API handle this automatically? 3.2 Small/Square Resolution Issue I observed that 144x144 (1:1 square) videos fail with error:   "VTFrameProcessorErrorDomain Code=-19730: processWithSourceFrame within VCPFrameSuperResolutionProcessor failed" However, 480x270 (16:9) videos work correctly. minimumDimensions reports 96x96, but 144x144 still fails. Is there an undocumented restriction on aspect ratio or a practical minimum resolution? 3.3 Scale Factor Selection supportedScaleFactors returns [2.0, 4.0] for most resolutions. Is there a recommended scale factor for balancing quality and performance? Are there scenarios where 4.0x should be avoided? The documentation on this specific topic seems limited, so I would appreciate any insights or advice. Thank you.
0
0
1.3k
Feb ’26
Lightweight RTSP lib on iOS
idk why there isn't built in lib for watch RTSP stream on iOS of apple framework list, even though rtsp is popular. Can i built my own with swift,? have any tutorial for this purpose, i did try many framework like VLCMobileKit,.. it work but I can't understand why it so many enomous files and account for 400mb to 1.7gb for installed pod and have so many bug i cannot fix when usage (so hard to maintain). Can you suggest for me how to built my own with swift. As my knowledge our camera only support for RTSP so I'm not using HTTP Live Stream, it is true? can I use HTTP Live Streaming for this purpose.
0
0
887
Dec ’21
A mistake in FairPlay Streaming SDK 26 sample code on comparing ProtocolVersionUsed value?
Hello, I am reviewing the sample codes of FairPlay Streaming SDK 26 and there was a place where I think is a mistake. The codes are for the server, for both Swift and Rust codes. There is an if statement which compares "ProtocolVersionUsed"(spcData.versionUsed) and SPCVersion1 constant, though "ProtocolVersionUsed" and SPC Version is a different thing, so shouldn't it be using a different constant value? [createContentKeyPayload.swift] // Fallback to version 1 if content can have encrypted slice headers, which need to be decrypted separately. Slice headers are not encrypted when using CBCS. if serverCtx.spcContainer.spcData.versionUsed == base_constants.SPCVersion.v1.rawValue && [createContentKeyPayload.rs] // Fallback to version 1 if content can have encrypted slice headers, which need to be decrypted separately. Slice headers are not encrypted when using CBCS. if (serverCtx.spcContainer.spcData.versionUsed == SPCVersion::v1 as u32) && Thank you.
0
0
318
Feb ’26
FairPlay Production Deployment Package Requirements
On the FairPlay main page it states: The FPS Deployment Package is not available to third parties acting on behalf of licensed content owners. Could someone please provide more details around this statement? If I were to build a subscription based platform where users can upload & monetize their videos, and used FairPlay to prevent unauthorized access to the creator's content, what would Apple's response be?
0
0
627
Sep ’23
Prioritize codec in a multi codecs m3u8 manifest or lowest bandwidth at equal resolution
Hi guys, I would like to know if there is a way to prioritize a codec (H265) in a multi codecs (H264 and H265) manifest? or lowest BANDWIDTH at the same RESOLUTION Today, it's easy to write multiple variants with different BANDWIDTH, CODEC and RESOLUTION values. But H264 Bandwidths are by construction higher than the H265 ones. Imagine you have multiple variants, that I write here sorted by bandwidth ascending #EXT-X-STREAM-INF:BANDWIDTH=280000,CODECS="mp4a.40.2,hvc1.2.4.L90.90",RESOLUTION=864x467 #EXT-X-STREAM-INF:BANDWIDTH=450000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=512x276 #EXT-X-STREAM-INF:BANDWIDTH=809000,CODECS="mp4a.40.2,hvc1.2.4.L93.90",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=874000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x345 #EXT-X-STREAM-INF:BANDWIDTH=1263000,CODECS="mp4a.40.2,hvc1.2.4.L93.90",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=1404000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=864x467 #EXT-X-STREAM-INF:BANDWIDTH=2607000,CODECS="mp4a.40.2,hvc1.2.4.L120.90",RESOLUTION=1920x1037 #EXT-X-STREAM-INF:BANDWIDTH=2782000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=1024x553 #EXT-X-STREAM-INF:BANDWIDTH=4902000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=5962000,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1037 Current situation : We see that some players start from the lowest bandwidth and then switch until reaching the highest bandwidth they can. Some use the highest BANDWIDTH=5962000. Note that for the same resolution, you have one variant in H265 with BANDWIDTH=2607000 Expected behaviour : If the device/player supports H265, use H265 with the highest priority or At equal resolutions, use the lowest BANDWIDTH (which will be H265 here) Do you have any suggestions to reach the expected behaviour? Thanks Edouard
0
0
621
Dec ’21
Issues Detecting Apple TV's HDR Playback Capability
I've been working with the eligibleforhdrplayback property to determine if HDR playback is supported. However, I've noticed an inconsistency. When the video format switches from HDR to SDR in settings menu on Apple TV, the property still returns true, indicating HDR is playable even when it's not (This seems to contradict what was mentioned around the [20:40] mark of this WWDC video). I've tried using the eligibleForHDRPlaybackDidChangeNotification and even restarted the app, but I still encounter the same issue. Are there alternative approaches to accurately determine if the app can play HDR content on Apple TV?
0
0
685
Oct ’23
"outputObscuredDueToInsufficientExternalProtection" state of this flag always remains true even though output is not obscured.
We have a logic in the SDK which stops playback when the outputObscuredDueToInsufficientExternalProtection event is fired by the player. Our initial understanding was that this event is fired only when the DRM blocks the video playback. However, in the present case we see that it is called even when playback is successful(playback with external screen connected). To determine whether playback still functions when the 'outputObscuredDueToInsufficientExternalProtection' event is triggered, we temporarily disabled the playback stop implementation that occurs after the event is triggered. code snippet - Observations - After this event was triggered during mirroring playback using a Lightning to HDMI connector, our expectation was that the playback would result in a black screen. However, to our surprise, the playback worked perfectly, indicating that this event is being triggered even when there are no DRM restrictions for that asset's playback. Another scenario we tested involved using a VGA connector. In this case, we observed that the 'outputObscuredDueToInsufficientExternalProtection' event was triggered. Initially, playback started as expected when we commented out the playback stop implementation. However, after a few seconds of playback, the screen went black. In the first scenario, it was unexpected for the 'outputObscuredDueToInsufficientExternalProtection' event to trigger, as the playback worked without issues even after the event was triggered. However, in the second scenario, the event was triggered as expected. The issue we identified is that this event is being triggered irrespective of the presence of DRM restrictions for the asset. In another scenario, we attempted to differentiate between the VGA and HDMI connectors to determine if such distinction was possible. However, we found that the VGA cable was also recognized as an HDMI port in the case of iOS. We also tested the issue on an older iOS version (iOS 14.6.1) to see if the problem persisted. Surprisingly, we found that the 'outputObscuredDueToInsufficientExternalProtection' event was triggered even in the older OS version. Conclusion: In our analysis, we have identified that the 'outputObscuredDueToInsufficientExternalProtection' flag always remains true even though output is not obsecured. working case log: default 13:23:19.096682+0530 AMC ||| observeValueForKeyPath = "outputObscuredDueToInsufficientExternalProtection" object = <AVPlayer: 0x281284930> change kind = { kind = 1; new = 1; old = 0; } non working case log: default 13:45:21.356857+0530 AMC ||| observeValueForKeyPath = "outputObscuredDueToInsufficientExternalProtection" object = <AVPlayer: 0x281c071e0> change kind = {kind = 1; new = 1; old = 0; } We searched through related documents and conducted a Google search, but we couldn't find any information or references related to this behavior of the 'outputObscuredDueToInsufficientExternalProtection' event. It would be really appreciated if any one can help us with this!
0
1
1k
Oct ’23
Background transfer of HLS using makeAssetDownloadTask only downloads about half of the data
I am using AVAssetDownloadURLSession's makeAssetDownloadTask method on iOS 15 to simultaneously play and download an HLS VOD stream. Sample code: @objc func createDownloadSession() { // Create new background session configuration. let configuration = URLSessionConfiguration.background(withIdentifier: "TestAppSession") configuration.timeoutIntervalForResource = 60 * 60 * 2 // Create a new AVAssetDownloadURLSession with background configuration, delegate, and queue downloadSession = AVAssetDownloadURLSession(configuration: configuration, assetDownloadDelegate: self, delegateQueue: OperationQueue.main) } @objc func downloadAndCreatePlayerItem(_ url: URL) -> AVPlayerItem? { // Create new AVAssetDownloadTask for the desired asset let asset = AVURLAsset(url: url) // Create the task to download the track. let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset, assetTitle: "Test Title", assetArtworkData: nil, options: nil) // Start task downloadTask!.resume() // Return the URL asset return AVPlayerItem(asset: downloadTask!.urlAsset) } Everything seems to work fine; it starts pulling the data down at a fast rate, and plays the audio immediately. However, after a few seconds it stops downloading. It seems to only load around 15 minutes of the HLS audio (I can see the loadedTimeRanges). How do I get it to download the entire HLS stream? Is there some throttling I am encountering by the OS? The app is in the foreground, though it is a background session. Anything I'm missing? Thank you in advance!
0
0
1.2k
Aug ’22
Are there known cases where DepthData is empty while Face ID is working?
We are experiencing an issue related to DepthData from the TrueDepth camera on a specific device. On December 1, we tested with the complainant’s device iPhone 14 / iOS 26.0.1, and observed that the depth image is received with empty values. However, the same implementation works normally on iPhone 17 Pro Max (iOS 26.1) and iPhone 13 Pro Max (iOS 26.0.1), where depth data is delivered correctly. In the problematic case: TrueDepth camera is active Face ID works normally The app receives a DepthData object, but all values are empty (0), not nil Because the DepthData object is not nil, this makes it difficult to detect the issue through software fallback handling. We developed the feature with reference to the following Apple sample: https://developer.apple.com/documentation/AVFoundation/streaming-depth-data-from-the-truedepth-camera We would like to ask: Are there known cases where Face ID functions normally but DepthData from the TrueDepth camera is returned as empty values? If so, is there a recommended approach for identifying or handling this situation? Any guidance from Apple engineers or the community would be greatly appreciated. Thank you.
0
0
554
Dec ’25
Issues with Playing MOVPKG Files (Domain=CoreMediaErrorDomain Code=-16845)
I've been encountering a substantial increase in the following error log and am eager to find its root cause. The pattern of these logs emerge predominantly when attempting to play downloaded FPS DRM files(MOVPKG files). Except for a few rare instances, most occurrences are associated with content downloaded in previous OS versions, leading to playback issues following recent OS updates. The error log I've been encountering is as follows: Error Domain=CoreMediaErrorDomain Code=-16845 "HTTP 400: (unhandled)" Even after searching, there are hardly any cases available, and the only thing I found is these issues https://github.com/jhomlala/betterplayer/issues?q=is%3Aissue+16845+is%3Aclosed I've been advising users to delete and re-download the affected content, which, in all cases, results in successful playback. I'm seeking advice from anyone who might have experienced similar issues. If you've encountered a comparable situation or have any suggestions, I would greatly appreciate your input.
0
2
1k
Nov ’23
MusicKit broken in simulator with current tools? Can't get token.
Just updated my computer, phone, and dev tools to the latest versions of everything. Now when I run my app in a previously-working simulator (iPhone 16 w. iOS 18.5) I get: Failed retrieving MusicKit tokens: fetching the developer token is not supported in the simulator when running on this version of macOS; please upgrade your Mac to macOS Ventura. Also: <ICCloudServiceStatusMonitor: 0x600003320e60>: Invoking 1 completion handler for MusicKit tokens. error=<ICError.DeveloperTokenFetchingFailed (-8200) "Failed to fetch media token from <AMSMediaTokenService: 0x6000029049a0>." { underlyingErrors: [ <AMSErrorDomain.300 "Token request encoding failed The token request encoder finished with an error." { userInfo: { AMSDescription : "Token request encoding failed", AMSFailureReason : "The token request encoder finished with an error." }; underlyingErrors: [ <AMSErrorDomain.5 "Anisette Failed Platform not supported" { userInfo: { AMSDescription : "Anisette Failed", AMSFailureReason : "Platform not supported" }; Anybody know what gives here? The Ventura message is absurd because I'm on Tahoe 26.1. The same code works on a physical phone running iOS 26.
0
0
741
Nov ’25
AVAssetResourceLoaderDelegate and CoreMediaErrorDomain -12881 When Playing HLS Audio
I am developing an app that plays HLS audio. When using AVPlayerItem with AVURLAsset, can AVAssetResourceLoaderDelegate correctly handle HLS segments? My goal is to use AVAssetResourceLoaderDelegate to add authentication HTTP headers when accessing HLS .m3u8 and .ts files. I can successfully download the files, but playback fails with errors. Specifically, I am observing the following cases: A. AVAssetResourceLoaderDelegate is canceled, and CoreMediaErrorDomain -12881 occurs In NSURLConnectionDataDelegate’s didReceiveResponse method, set contentInformationRequest In didReceiveData, call dataRequest respondWithData resourceLoader didCancelLoadingRequest is called CoreMediaErrorDomain -12881 occurs B. CoreMediaErrorDomain -12881 occurs In NSURLConnectionDataDelegate’s didReceiveResponse method, set contentInformationRequest In connection didReceiveData, buffer all received data until the end In connectionDidFinishLoading, pass the buffered data to respondWithData Call loadingRequest finishLoading CoreMediaErrorDomain -12881 occurs In both cases, dataRequest.requestsAllDataToEndOfResource is YES. For this use case, I am not using AVURLAssetHTTPHeaderFieldsKey because I need to apply the most up-to-date authentication data at the moment each file is accessed. I would appreciate any advice or suggestions you might have. Thank you in advance!
0
1
363
Aug ’25
Regarding FPS SDK Upgrade
Hi Apple Team, We have integrated FairPlay Streaming Server SDK v3 into our MDRM platform since 2017, the system works stable and stayed untouched. As you know, both Widevine and Playready have requirements to upgrade the Server SDK regularly. We want to know if Apple imposes similar requirements for upgrading the FPS SDK, or if we may continue using the old one without any updates. Thanks for your support!
0
1
424
Feb ’25
AVPlayer can't play HLS streaming with rate > x2.0 on OS 15.x
I'm using the AVPlayer to streaming video, same as: let strURL = "https://multiplatform-f.akamaihd.net/i/multi/will/bunny/big_buck_bunny_,640x360_400,640x360_700,640x360_1000,950x540_1500,.f4v.csmil/master.m3u8"             if let url = URL(string: strURL) {                 let asset = AVAsset(url: url)                 let playerItem = AVPlayerItem(asset: asset)                 player = AVPlayer(playerItem: playerItem)                 let layer = AVPlayerLayer(player: player)                 layer.frame = viewPlaying.bounds                 viewPlaying.layer.addSublayer(layer)                 player?.playImmediately(atRate: 4.0)             } The video can't play, it'll play normal with rate &lt;= 2.0 on iOS 15.x. Anybody can give me the advise to fix this issue?
0
0
1.1k
Jan ’22
SDK 4.4.1 spc_internal_values_v2.txt
Hello everyone, I have downloaded the SDK 4.4.1 from Apple and I'm trying to implement fairplay streaming with encrypted videos. I have arrived the a section whereby it is asking to test Key Security Modules. I cannot get hold of any pkeyPem variable with a value and also cannot find the spc_internal_values_v2.txt file. Can anyone help me out? Thank you very much!
0
0
545
Mar ’22
Inquiry about Low-Latency Frame Interpolation & Super Resolution using VTFrameProcessor
Hello, I have implemented Low-Latency Frame Interpolation using the VTFrameProcessor framework, based on the sample code from https://developer.apple.com/kr/videos/play/wwdc2025/300. It is currently working well for both LIVE and VOD streams. However, I have a few questions regarding the lifecycle management and synchronization of this feature: 1. Common Questions (Applicable to both Frame Interpolation & Super Resolution) 1.1 Dynamic Toggling Do you recommend enabling/disabling these features dynamically during playback? Or is it better practice to configure them only during the initial setup/preparation phase? If dynamic toggling is supported, are there any recommended patterns for managing VTFrameProcessor session lifecycle (e.g., startSession / endSession timing)? 1.2 Synchronization Method I am currently using CADisplayLink to fetch frames from AVPlayerItemVideoOutput and perform processing. Is CADisplayLink the recommended approach for real-time frame acquisition with VTFrameProcessor? If the feature needs to be toggled on/off during active playback, are there any concerns or alternative approaches you would recommend? 1.3 Supported Resolution/Quality Range What are the minimum and maximum video resolutions supported for each feature? Are there any aspect ratio restrictions (e.g., does it support 1:1 square videos)? Is there a recommended resolution range for optimal performance and quality? 2. Frame Interpolation Specific Questions 2.1 LIVE Stream Support Is Low-Latency Frame Interpolation suitable for LIVE streaming scenarios where latency is critical? Are there any special considerations for LIVE vs VOD? 3. Super Resolution Specific Questions 3.1 Adaptive Bitrate (ABR) Stream Support In ABR (HLS/DASH) streams, the video resolution can change dynamically during playback. Is VTLowLatencySuperResolutionScaler compatible with ABR streams where resolution changes mid-playback? If resolution changes occur, should I recreate the VTLowLatencySuperResolutionScalerConfiguration and restart the session, or does the API handle this automatically? 3.2 Small/Square Resolution Issue I observed that 144x144 (1:1 square) videos fail with error:   "VTFrameProcessorErrorDomain Code=-19730: processWithSourceFrame within VCPFrameSuperResolutionProcessor failed" However, 480x270 (16:9) videos work correctly. minimumDimensions reports 96x96, but 144x144 still fails. Is there an undocumented restriction on aspect ratio or a practical minimum resolution? 3.3 Scale Factor Selection supportedScaleFactors returns [2.0, 4.0] for most resolutions. Is there a recommended scale factor for balancing quality and performance? Are there scenarios where 4.0x should be avoided? The documentation on this specific topic seems limited, so I would appreciate any insights or advice. Thank you.
Replies
0
Boosts
0
Views
1.3k
Activity
Feb ’26
Lightweight RTSP lib on iOS
idk why there isn't built in lib for watch RTSP stream on iOS of apple framework list, even though rtsp is popular. Can i built my own with swift,? have any tutorial for this purpose, i did try many framework like VLCMobileKit,.. it work but I can't understand why it so many enomous files and account for 400mb to 1.7gb for installed pod and have so many bug i cannot fix when usage (so hard to maintain). Can you suggest for me how to built my own with swift. As my knowledge our camera only support for RTSP so I'm not using HTTP Live Stream, it is true? can I use HTTP Live Streaming for this purpose.
Replies
0
Boosts
0
Views
887
Activity
Dec ’21
A mistake in FairPlay Streaming SDK 26 sample code on comparing ProtocolVersionUsed value?
Hello, I am reviewing the sample codes of FairPlay Streaming SDK 26 and there was a place where I think is a mistake. The codes are for the server, for both Swift and Rust codes. There is an if statement which compares "ProtocolVersionUsed"(spcData.versionUsed) and SPCVersion1 constant, though "ProtocolVersionUsed" and SPC Version is a different thing, so shouldn't it be using a different constant value? [createContentKeyPayload.swift] // Fallback to version 1 if content can have encrypted slice headers, which need to be decrypted separately. Slice headers are not encrypted when using CBCS. if serverCtx.spcContainer.spcData.versionUsed == base_constants.SPCVersion.v1.rawValue && [createContentKeyPayload.rs] // Fallback to version 1 if content can have encrypted slice headers, which need to be decrypted separately. Slice headers are not encrypted when using CBCS. if (serverCtx.spcContainer.spcData.versionUsed == SPCVersion::v1 as u32) && Thank you.
Replies
0
Boosts
0
Views
318
Activity
Feb ’26
FairPlay Production Deployment Package Requirements
On the FairPlay main page it states: The FPS Deployment Package is not available to third parties acting on behalf of licensed content owners. Could someone please provide more details around this statement? If I were to build a subscription based platform where users can upload & monetize their videos, and used FairPlay to prevent unauthorized access to the creator's content, what would Apple's response be?
Replies
0
Boosts
0
Views
627
Activity
Sep ’23
Prioritize codec in a multi codecs m3u8 manifest or lowest bandwidth at equal resolution
Hi guys, I would like to know if there is a way to prioritize a codec (H265) in a multi codecs (H264 and H265) manifest? or lowest BANDWIDTH at the same RESOLUTION Today, it's easy to write multiple variants with different BANDWIDTH, CODEC and RESOLUTION values. But H264 Bandwidths are by construction higher than the H265 ones. Imagine you have multiple variants, that I write here sorted by bandwidth ascending #EXT-X-STREAM-INF:BANDWIDTH=280000,CODECS="mp4a.40.2,hvc1.2.4.L90.90",RESOLUTION=864x467 #EXT-X-STREAM-INF:BANDWIDTH=450000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=512x276 #EXT-X-STREAM-INF:BANDWIDTH=809000,CODECS="mp4a.40.2,hvc1.2.4.L93.90",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=874000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x345 #EXT-X-STREAM-INF:BANDWIDTH=1263000,CODECS="mp4a.40.2,hvc1.2.4.L93.90",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=1404000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=864x467 #EXT-X-STREAM-INF:BANDWIDTH=2607000,CODECS="mp4a.40.2,hvc1.2.4.L120.90",RESOLUTION=1920x1037 #EXT-X-STREAM-INF:BANDWIDTH=2782000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=1024x553 #EXT-X-STREAM-INF:BANDWIDTH=4902000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=1280x691 #EXT-X-STREAM-INF:BANDWIDTH=5962000,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1037 Current situation : We see that some players start from the lowest bandwidth and then switch until reaching the highest bandwidth they can. Some use the highest BANDWIDTH=5962000. Note that for the same resolution, you have one variant in H265 with BANDWIDTH=2607000 Expected behaviour : If the device/player supports H265, use H265 with the highest priority or At equal resolutions, use the lowest BANDWIDTH (which will be H265 here) Do you have any suggestions to reach the expected behaviour? Thanks Edouard
Replies
0
Boosts
0
Views
621
Activity
Dec ’21
Issues Detecting Apple TV's HDR Playback Capability
I've been working with the eligibleforhdrplayback property to determine if HDR playback is supported. However, I've noticed an inconsistency. When the video format switches from HDR to SDR in settings menu on Apple TV, the property still returns true, indicating HDR is playable even when it's not (This seems to contradict what was mentioned around the [20:40] mark of this WWDC video). I've tried using the eligibleForHDRPlaybackDidChangeNotification and even restarted the app, but I still encounter the same issue. Are there alternative approaches to accurately determine if the app can play HDR content on Apple TV?
Replies
0
Boosts
0
Views
685
Activity
Oct ’23
"outputObscuredDueToInsufficientExternalProtection" state of this flag always remains true even though output is not obscured.
We have a logic in the SDK which stops playback when the outputObscuredDueToInsufficientExternalProtection event is fired by the player. Our initial understanding was that this event is fired only when the DRM blocks the video playback. However, in the present case we see that it is called even when playback is successful(playback with external screen connected). To determine whether playback still functions when the 'outputObscuredDueToInsufficientExternalProtection' event is triggered, we temporarily disabled the playback stop implementation that occurs after the event is triggered. code snippet - Observations - After this event was triggered during mirroring playback using a Lightning to HDMI connector, our expectation was that the playback would result in a black screen. However, to our surprise, the playback worked perfectly, indicating that this event is being triggered even when there are no DRM restrictions for that asset's playback. Another scenario we tested involved using a VGA connector. In this case, we observed that the 'outputObscuredDueToInsufficientExternalProtection' event was triggered. Initially, playback started as expected when we commented out the playback stop implementation. However, after a few seconds of playback, the screen went black. In the first scenario, it was unexpected for the 'outputObscuredDueToInsufficientExternalProtection' event to trigger, as the playback worked without issues even after the event was triggered. However, in the second scenario, the event was triggered as expected. The issue we identified is that this event is being triggered irrespective of the presence of DRM restrictions for the asset. In another scenario, we attempted to differentiate between the VGA and HDMI connectors to determine if such distinction was possible. However, we found that the VGA cable was also recognized as an HDMI port in the case of iOS. We also tested the issue on an older iOS version (iOS 14.6.1) to see if the problem persisted. Surprisingly, we found that the 'outputObscuredDueToInsufficientExternalProtection' event was triggered even in the older OS version. Conclusion: In our analysis, we have identified that the 'outputObscuredDueToInsufficientExternalProtection' flag always remains true even though output is not obsecured. working case log: default 13:23:19.096682+0530 AMC ||| observeValueForKeyPath = "outputObscuredDueToInsufficientExternalProtection" object = <AVPlayer: 0x281284930> change kind = { kind = 1; new = 1; old = 0; } non working case log: default 13:45:21.356857+0530 AMC ||| observeValueForKeyPath = "outputObscuredDueToInsufficientExternalProtection" object = <AVPlayer: 0x281c071e0> change kind = {kind = 1; new = 1; old = 0; } We searched through related documents and conducted a Google search, but we couldn't find any information or references related to this behavior of the 'outputObscuredDueToInsufficientExternalProtection' event. It would be really appreciated if any one can help us with this!
Replies
0
Boosts
1
Views
1k
Activity
Oct ’23
Background transfer of HLS using makeAssetDownloadTask only downloads about half of the data
I am using AVAssetDownloadURLSession's makeAssetDownloadTask method on iOS 15 to simultaneously play and download an HLS VOD stream. Sample code: @objc func createDownloadSession() { // Create new background session configuration. let configuration = URLSessionConfiguration.background(withIdentifier: "TestAppSession") configuration.timeoutIntervalForResource = 60 * 60 * 2 // Create a new AVAssetDownloadURLSession with background configuration, delegate, and queue downloadSession = AVAssetDownloadURLSession(configuration: configuration, assetDownloadDelegate: self, delegateQueue: OperationQueue.main) } @objc func downloadAndCreatePlayerItem(_ url: URL) -> AVPlayerItem? { // Create new AVAssetDownloadTask for the desired asset let asset = AVURLAsset(url: url) // Create the task to download the track. let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset, assetTitle: "Test Title", assetArtworkData: nil, options: nil) // Start task downloadTask!.resume() // Return the URL asset return AVPlayerItem(asset: downloadTask!.urlAsset) } Everything seems to work fine; it starts pulling the data down at a fast rate, and plays the audio immediately. However, after a few seconds it stops downloading. It seems to only load around 15 minutes of the HLS audio (I can see the loadedTimeRanges). How do I get it to download the entire HLS stream? Is there some throttling I am encountering by the OS? The app is in the foreground, though it is a background session. Anything I'm missing? Thank you in advance!
Replies
0
Boosts
0
Views
1.2k
Activity
Aug ’22
Are there known cases where DepthData is empty while Face ID is working?
We are experiencing an issue related to DepthData from the TrueDepth camera on a specific device. On December 1, we tested with the complainant’s device iPhone 14 / iOS 26.0.1, and observed that the depth image is received with empty values. However, the same implementation works normally on iPhone 17 Pro Max (iOS 26.1) and iPhone 13 Pro Max (iOS 26.0.1), where depth data is delivered correctly. In the problematic case: TrueDepth camera is active Face ID works normally The app receives a DepthData object, but all values are empty (0), not nil Because the DepthData object is not nil, this makes it difficult to detect the issue through software fallback handling. We developed the feature with reference to the following Apple sample: https://developer.apple.com/documentation/AVFoundation/streaming-depth-data-from-the-truedepth-camera We would like to ask: Are there known cases where Face ID functions normally but DepthData from the TrueDepth camera is returned as empty values? If so, is there a recommended approach for identifying or handling this situation? Any guidance from Apple engineers or the community would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
554
Activity
Dec ’25
Issues with Playing MOVPKG Files (Domain=CoreMediaErrorDomain Code=-16845)
I've been encountering a substantial increase in the following error log and am eager to find its root cause. The pattern of these logs emerge predominantly when attempting to play downloaded FPS DRM files(MOVPKG files). Except for a few rare instances, most occurrences are associated with content downloaded in previous OS versions, leading to playback issues following recent OS updates. The error log I've been encountering is as follows: Error Domain=CoreMediaErrorDomain Code=-16845 "HTTP 400: (unhandled)" Even after searching, there are hardly any cases available, and the only thing I found is these issues https://github.com/jhomlala/betterplayer/issues?q=is%3Aissue+16845+is%3Aclosed I've been advising users to delete and re-download the affected content, which, in all cases, results in successful playback. I'm seeking advice from anyone who might have experienced similar issues. If you've encountered a comparable situation or have any suggestions, I would greatly appreciate your input.
Replies
0
Boosts
2
Views
1k
Activity
Nov ’23
MusicKit broken in simulator with current tools? Can't get token.
Just updated my computer, phone, and dev tools to the latest versions of everything. Now when I run my app in a previously-working simulator (iPhone 16 w. iOS 18.5) I get: Failed retrieving MusicKit tokens: fetching the developer token is not supported in the simulator when running on this version of macOS; please upgrade your Mac to macOS Ventura. Also: <ICCloudServiceStatusMonitor: 0x600003320e60>: Invoking 1 completion handler for MusicKit tokens. error=<ICError.DeveloperTokenFetchingFailed (-8200) "Failed to fetch media token from <AMSMediaTokenService: 0x6000029049a0>." { underlyingErrors: [ <AMSErrorDomain.300 "Token request encoding failed The token request encoder finished with an error." { userInfo: { AMSDescription : "Token request encoding failed", AMSFailureReason : "The token request encoder finished with an error." }; underlyingErrors: [ <AMSErrorDomain.5 "Anisette Failed Platform not supported" { userInfo: { AMSDescription : "Anisette Failed", AMSFailureReason : "Platform not supported" }; Anybody know what gives here? The Ventura message is absurd because I'm on Tahoe 26.1. The same code works on a physical phone running iOS 26.
Replies
0
Boosts
0
Views
741
Activity
Nov ’25
AVAssetResourceLoaderDelegate and CoreMediaErrorDomain -12881 When Playing HLS Audio
I am developing an app that plays HLS audio. When using AVPlayerItem with AVURLAsset, can AVAssetResourceLoaderDelegate correctly handle HLS segments? My goal is to use AVAssetResourceLoaderDelegate to add authentication HTTP headers when accessing HLS .m3u8 and .ts files. I can successfully download the files, but playback fails with errors. Specifically, I am observing the following cases: A. AVAssetResourceLoaderDelegate is canceled, and CoreMediaErrorDomain -12881 occurs In NSURLConnectionDataDelegate’s didReceiveResponse method, set contentInformationRequest In didReceiveData, call dataRequest respondWithData resourceLoader didCancelLoadingRequest is called CoreMediaErrorDomain -12881 occurs B. CoreMediaErrorDomain -12881 occurs In NSURLConnectionDataDelegate’s didReceiveResponse method, set contentInformationRequest In connection didReceiveData, buffer all received data until the end In connectionDidFinishLoading, pass the buffered data to respondWithData Call loadingRequest finishLoading CoreMediaErrorDomain -12881 occurs In both cases, dataRequest.requestsAllDataToEndOfResource is YES. For this use case, I am not using AVURLAssetHTTPHeaderFieldsKey because I need to apply the most up-to-date authentication data at the moment each file is accessed. I would appreciate any advice or suggestions you might have. Thank you in advance!
Replies
0
Boosts
1
Views
363
Activity
Aug ’25
Regarding FPS SDK Upgrade
Hi Apple Team, We have integrated FairPlay Streaming Server SDK v3 into our MDRM platform since 2017, the system works stable and stayed untouched. As you know, both Widevine and Playready have requirements to upgrade the Server SDK regularly. We want to know if Apple imposes similar requirements for upgrading the FPS SDK, or if we may continue using the old one without any updates. Thanks for your support!
Replies
0
Boosts
1
Views
424
Activity
Feb ’25
AVPlayer can't play HLS streaming with rate > x2.0 on OS 15.x
I'm using the AVPlayer to streaming video, same as: let strURL = "https://multiplatform-f.akamaihd.net/i/multi/will/bunny/big_buck_bunny_,640x360_400,640x360_700,640x360_1000,950x540_1500,.f4v.csmil/master.m3u8"             if let url = URL(string: strURL) {                 let asset = AVAsset(url: url)                 let playerItem = AVPlayerItem(asset: asset)                 player = AVPlayer(playerItem: playerItem)                 let layer = AVPlayerLayer(player: player)                 layer.frame = viewPlaying.bounds                 viewPlaying.layer.addSublayer(layer)                 player?.playImmediately(atRate: 4.0)             } The video can't play, it'll play normal with rate &lt;= 2.0 on iOS 15.x. Anybody can give me the advise to fix this issue?
Replies
0
Boosts
0
Views
1.1k
Activity
Jan ’22
SDK 4.4.1 spc_internal_values_v2.txt
Hello everyone, I have downloaded the SDK 4.4.1 from Apple and I'm trying to implement fairplay streaming with encrypted videos. I have arrived the a section whereby it is asking to test Key Security Modules. I cannot get hold of any pkeyPem variable with a value and also cannot find the spc_internal_values_v2.txt file. Can anyone help me out? Thank you very much!
Replies
0
Boosts
0
Views
545
Activity
Mar ’22