FairPlay Streaming

RSS for tag

Securely deliver streaming media to devices through the HTTP Live Streaming protocol using FairPlay Streaming (FPS).

Posts under FairPlay Streaming tag

199 Posts

Post

Replies

Boosts

Views

Activity

Case-ID: 3540728 fps issue, no response from reviewing team since a month.
Case-ID: 3540728, we have developer membership, we have applied for fps on 31st July, and it was acknowledged from apple end, it was expected to be done in a week, although despite of many reminders we still have not got any response from apple reviewing team. can anyone have idea about why its taking so long. any help is appreciated.
1
0
591
Aug ’23
How to intercept HLS Playlist chunk request for CDN token implementation
Hello, We are using HLS for our streaming iOS and tvOS applications. We have DRM protection on our applications but we want add another secure layer which is CDN token. We want to add that CDN token data on header or query parameters. Any of two are applicable at our CDN side. There is a problem at client side. We want to send that token knowledge and refresh at given a time. We add token data using at initial state let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers]) and add interceptor with asset.resourceLoader.setDelegate. It works seamlessly. We use AVAssetResourceLoaderDelegate and we can intercept just master playlist and playlists via func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool and we can refresh CDN token data at only playlists. That token data can be at query params or header. It does not matter. For example, #EXTM3U #EXT-X-VERSION:3 #EXTINF:10.0 https://chunk1?cdntoken=A.ts #EXTINF:10.0 https://chunk2?cdntoken=A.ts #EXTINF:10.0 https://chunk3?cdntoken=A.ts #EXTINF:10.0 assume that it is our .m3u8 file for given live video playlist. It has three chunks with cdn token data in query params. If we give that chunks to AVPlayer. It is going to play chunks in order. When we change new cdn token at query params, it effects our chunk Urls and our player stalls. It is because our cdn adds new cdn token knowledge to chunk's Url. It means that our new .m3u8 is going to be like that for next playlist; #EXT-X-VERSION:3 #EXTINF:10.0 https://chunk4?cdntoken=B.ts #EXTINF:10.0 https://chunk5?cdntoken=B.ts #EXTINF:10.0 https://chunk6?cdntoken=B.ts #EXTINF:10.0 Cdn token data is converted to B from A at cdn side and it sends new playlist like that. That's why, our player is going to stall. Is there any way not to player stall with edited chunk url? When we change new cdn token at header. It does not change chunks url like at the first question but AVPlayer does not allow to intercept chunk Urls which means that before callin https://chunk1?cdntoken=A.ts url, i want to intercept and add new cdn token data to header. Is there any way to intercept chunk Urls like intercepting playlist? Thanks for answers in advance
3
0
2.3k
Aug ’23
Offline Fairplay not load persistent key data before download metadata
Hi, we have hls+fps stream, on our app implementation through AVAssetResourceLoader (get spc, generate ckc correctly) and stream played successfully But when we try to download stream for offline, through session.processContentKeyRequest for contentId, we get spc, generate ckc the same as previously, but can't recieve persistent key data keyRequest.persistableContentKey PKD failed Error Domain=AVFoundationErrorDomain Code=-11835 "Cannot Open" UserInfo={NSLocalizedFailureReason=This content is not authorized., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x282da98f0 {Error Domain=NSOSStatusErrorDomain Code=-42668 "(null)"}} Server and client the same, fps stream played, but not load pkd for offline All offline part of sources we get from HLS Catalog example, and implement requestCertificate and requestContentKeyFromKeySecurityModule, and i don't understand why we not recieve pkd.
1
0
1.1k
Jul ’23
iOS 16 - Exception Thrown for processContentKeyResponse
Issue: I am supporting an iOS application that streams Fairplay DRM protected content. On iOS 16 devices, I am seeing intermittent exceptions thrown when trying to process the CKC returned by the license server. The thrown exception is as follows: -[AVContentKeyRequest processContentKeyResponse:] AVContentKeySession's keySystem is not same as that of keyResponse This issue does not occur on older devices (we support iOS 13, 14, 15) I am unable to find documentation about this error so any insight is appreciated: High-Level Code Overview Use ContentKeyRequest to request an application certificate Use returned Cert to call makeStreamingContentKeyRequestData Use returned data to request FairPlay license Use returned CKC to generate AVContentKeyResponse (i.e. AVContentKeyResponse(fairPlayStreamingKeyResponseData:_)) Call processContentKeyResponse(_) App crash/exception thrown when callling processContentKeyResponse I am seeing other issues related to DRM and iOS 16 but these are specific to downloaded and offline content which do not match my use case.
3
0
2.9k
Jul ’23
Query regarding "Different target durations detected" error while validating the VOD playlist with media stream validator
When i validated the VOD playlist with media stream validator, am getting the "Different target durations detected" error for trk vs sub, var vs sub playlists, Error: Different target durations detected --> Detail: Target duration: 3599 vs Target duration: 6 --> Source: subs/eus_2/playlist.m3u8 --> Compare: trk969287/playlist.m3u8 --> Detail: Target duration: 6 vs Target duration: 3599 --> Source: var969287/playlist.m3u8 --> Compare: subs/eus_2/playlist.m3u8 but the apple specification (https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices specification) stated that "5.7. For VOD content, target durations of subtitle playlists MAY be longer than the other media." Can you please clarify the query that why we are getting different target duration error for subtitle vs other media playlists even though the apple spec mentioned that the subtitle playlist may be longer than other media for VOD assets?
1
0
1.1k
Jul ’23
How to determine mimetype of .key and.numbers file ?
I need to correctly determine the mime type of keynote file and numbers file without relying on the extension. For this purpose, I am hoping to use the magic number concept and match it with the first four bytes of a file. Link for magic number understanding -> [https://www.outsystems.com/forge/component-overview/10108/validate-file-extension#:~:text=A%20magic%20number%20is%20a,types%20which%20is%20hexadecimal%20format.] Though after extensive searching online I am unable to find a unique magic number for the above files moreover first four bytes of the file is matching with the magic number of the zip file due to which I am getting the wrong extension as zip. This is the first four bytes 0x50, 0x4B, 0x3, 0x4. Is there any reliable way to find the mime type of these files without relying on an extension?
0
0
881
Jun ’23
Error 16833 and 19152
We have created a hls playback framework and lot of our client's are complaining about this error {"code": -19152, "domain": "CoreMediaErrorDomain", "localizedDescription": "The operation couldn’t be completed. (CoreMediaErrorDomain error -19152 - The operation couldn’t be completed. (CoreMediaErrorDomain error -19152.))", "localizedFailureReason": "", "localizedRecoverySuggestion": ""} We are unable to reproduce this issue on our end but we have data reflecting the same error happening at good rate. Any help/hint is welcome. Thanks
1
0
2.0k
Jun ’23
Can't parse and decrypt SPC and CKC messages
Hello everyone, I have captured SPC and CKC messages. I'm trying to parse it using verify_ckc tool, but I only get SPC encryption key and SPC encryption IV: CKC/SPC Sanity Test v. 2.01 ========================= Begin SPC Data =============================== SPC container size 7296 SPC Encryption Key - a9 a6 8c 2b 62 2f 3a ee bc 92 0c 4d cb 07 d1 c7 SPC Encryption IV - 75 7f f7 60 c9 d0 16 2a 7b 96 0e 42 e6 c3 3e 75 ================ SPC TLLV List ================ =========================== End SPC Data ================================= =========================== Begin CKC Data ================================= =========================== End CKC Data ================================= SPC binary message: https://www.icloud.com/iclouddrive/0c0hm06RJQpTlsWBB1ANb3OZw#SPC CKC binary message: https://www.icloud.com/iclouddrive/016apmD_MZDFaGVNey_HA_17g#CKC What is the problem?
0
0
792
Jun ’23
FairPlay license auto-renewal (on SPC request)
Hi, is it possible to force/ensure an automatic license renewal in a Fairplay SPC response? I can find that feature in other DRM systems like Widevine (using specific parameters in the response) Searching in "FairPlay Streaming Server SDK 4.4.4" I can only find parameters related to lease/rental TLLs, but not an explicit renewal request. does this feature exists on FairPlay? Any information will be appreciated. Have a great day!
0
0
951
Jun ’23
Possibility of using SAME FairPlay Certificate by two providers simultaneously
Hello There, Can the SAME FairPlay Certificate be used by two providers simultaneously without impacting each other? For example, we already have a DRM Providers using our FairPlay Certificate in Production. We are now planning to migrate to another DRM Provider for part of the traffic/channels in parallel with Production. This means, in Production, at the same time, 2 DRM providers would be using the SAME FairPlay Certificate. Kindly let us know if this will create any potential issues with the Encrypted Contents that use the Certificate. Is there any impact on the final user in the iOS/tvOS applications with two DRM providers using the same FairPlay certificate?
0
0
867
May ’23
How to stop AVPlayer to cache/download hls chunks during playback
Hi Team, I am pre-caching first 5 seconds of vidoes to improve start up playback latency. I am using AVAssetDownloadTask(AVAssetDownloadTask | Apple Developer Documentation) for pre-caching first 5 seconds in movpkg container in local. Now during playback of pre-cache vidoe from local file, AVPlayer start downloading remaining video chunks hence completely download video in local which increase space in device. Is there any way to stop AVPlayer to cache/download chunks in local during playback ?
1
0
1.8k
May ’23
I cannot apply for a FPS certificate
I filled out the FPS certificate application form for existing applications twice in https://developer.apple.com/contact/fps/. After successful submission, I will say that I need to receive email in my mailbox, but I have not received the corresponding notification email in my mailbox. How do I deal with it? thank you!
1
0
979
May ’23
Native HLS streaming w/ Fairplay fails in Safari iOS 16+ but works in Safari iOS 15.6.1 at least
Streaming a FairPlay DRM protected video stream does not work in Safari iOS since iOS 16+. It was working correctly at least in Safari under iOS 15.6.1. (Note: it works correctly in Safari MacOS) I was able to reproduce the problem with 2 test pages of HLS FairPlay content in iOS Safari : JW player test page : https://developer-tools.jwplayer.com/stream-tester Shaka Player test page : https://shaka-player-demo.appspot.com/demo/#audiolang=en-US;textlang=en-US;uilang=en-US;panel=CUSTOM%20CONTENT;build=uncompiled Can you please confirm that it is broken ? Thanks !
2
0
2.5k
Apr ’23
HLS+Fairplay stream resources freeing issue
The Context I'm using the HTML video element to play HLS+Fairplay streams (VOD and live) in Safari. My application is a Netflix-like. You can watch a video, stop, and watch another one. Concretly, the <video> tag is created upon each play and destroyed when the player exits. The Problem Sometimes, after exiting the player, launching a new video causes a MEDIA_ERR_DECODE error without anymore explanation. I can trace in my code that the Fairplay certificate and the CKC have been correctly retrieved and that the media session has been created and updated (with the CKC). In fact, when I log everything, I see the exact same logs as when it works. Except the final MEDIA_ERR_DECODE error. When I get this error, if I immediately retry to play, the same error happens, but if I wait about 5~10 seconds, it successfully plays. It's like some resource is waiting to be garbage-collected. What I tried I tried playing non-DRMed videos and it works perfectly: I could play, stop, play, etc. without any issue. So my guess is something is happening at the EME level. I've browsed the whole Internet (twice) and couldn't come up with a clear explanation. Most of the hints I found couldn't explain my issue (e.g. bad DRM-encryption, but how could it work the first time?) or solve it (e.g. videoElement.src = ""). I'm throwing a bottle into the sea, here... Thanks for your help!
2
0
2.1k
Apr ’23
FairPlay Content Packaging Using mediafilesegmenter tool
New to FairPlay implementation. Following Apple's "FairPlay Streaming Programming Guide", to transcoded & encrypted a MP4 file using command - mediafilesegmenter --stream-encrypt --streaming-key-delivery --encrypt-key-file=./key_iv.bin --encrypt-key-url="skd://example/key" ./input-content.mp4 key_iv.bin is the file which contains Encryption Key and Initialisation Vector. It is generating HLS's playlist, index and segment files. To test the encryption and the decryption precess, I am taking one segment file(which is generated by mediafilesegmenter, say fileSequence125.ts) and trying to decrypt(algorithm is "AES/CBC/NOPADDING") it using the same Encryption Key and Initialisation Vector, then I am getting bellow errors - Input length not multiple of 16 bytes So, does it means the length/size of each segment(.ts) file, which is generated by the mediafilesegmenter, should be a multiple of 16 bytes?
0
0
814
Apr ’23
FairPlay on iOS 16.1 and onward: AVAssetResourceLoaderDelegate not called with offline DRMs anymore
Hello, We are experiencing a new regression with iOS 16.1/16.2 beta when trying to play a video with offline FairPlay DRMs. Everything was working fine with 16.0.3 and below. The delegate public func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool is never called when you start playing an offline video. It prevents the player to get the DRM and we end up with a timeout CoreMediaError -19512. We tried to preload the existing keys asset.resourceLoader.preloadsEligibleContentKeys = true to no avail. We also looked at the solutions provided in this thread iOS 16 FairPlay Changes which was very similar to our issue but nothing worked for us (we are already using keyRequest.processContentKeyResponse(response)). The DRMs are valid and can be loaded if we move the key to an older iOS device (iOS 16 and below). However, we can see in the logs the following error happening before the CoreMediaError -19512. <<< FigPKDKeyManager >>>> PKDKeyManagerSetKeyRequestError: keyManager: 0x606ce 210 KeyID: F017D7B0-390-45ED-803-01A748DFB7A1 errOr: Error Domain-CoreMediaErrorDomain Code=-19160 " (null)" err: 0 The player just seem not to trigger any delegate starting 16.1+. Is anybody else experiencing the same issue? How can we find out why the delegate aren't triggered? Bests
2
1
2.4k
Mar ’23
Case-ID: 3540728 fps issue, no response from reviewing team since a month.
Case-ID: 3540728, we have developer membership, we have applied for fps on 31st July, and it was acknowledged from apple end, it was expected to be done in a week, although despite of many reminders we still have not got any response from apple reviewing team. can anyone have idea about why its taking so long. any help is appreciated.
Replies
1
Boosts
0
Views
591
Activity
Aug ’23
How to intercept HLS Playlist chunk request for CDN token implementation
Hello, We are using HLS for our streaming iOS and tvOS applications. We have DRM protection on our applications but we want add another secure layer which is CDN token. We want to add that CDN token data on header or query parameters. Any of two are applicable at our CDN side. There is a problem at client side. We want to send that token knowledge and refresh at given a time. We add token data using at initial state let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers]) and add interceptor with asset.resourceLoader.setDelegate. It works seamlessly. We use AVAssetResourceLoaderDelegate and we can intercept just master playlist and playlists via func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool and we can refresh CDN token data at only playlists. That token data can be at query params or header. It does not matter. For example, #EXTM3U #EXT-X-VERSION:3 #EXTINF:10.0 https://chunk1?cdntoken=A.ts #EXTINF:10.0 https://chunk2?cdntoken=A.ts #EXTINF:10.0 https://chunk3?cdntoken=A.ts #EXTINF:10.0 assume that it is our .m3u8 file for given live video playlist. It has three chunks with cdn token data in query params. If we give that chunks to AVPlayer. It is going to play chunks in order. When we change new cdn token at query params, it effects our chunk Urls and our player stalls. It is because our cdn adds new cdn token knowledge to chunk's Url. It means that our new .m3u8 is going to be like that for next playlist; #EXT-X-VERSION:3 #EXTINF:10.0 https://chunk4?cdntoken=B.ts #EXTINF:10.0 https://chunk5?cdntoken=B.ts #EXTINF:10.0 https://chunk6?cdntoken=B.ts #EXTINF:10.0 Cdn token data is converted to B from A at cdn side and it sends new playlist like that. That's why, our player is going to stall. Is there any way not to player stall with edited chunk url? When we change new cdn token at header. It does not change chunks url like at the first question but AVPlayer does not allow to intercept chunk Urls which means that before callin https://chunk1?cdntoken=A.ts url, i want to intercept and add new cdn token data to header. Is there any way to intercept chunk Urls like intercepting playlist? Thanks for answers in advance
Replies
3
Boosts
0
Views
2.3k
Activity
Aug ’23
Offline Fairplay not load persistent key data before download metadata
Hi, we have hls+fps stream, on our app implementation through AVAssetResourceLoader (get spc, generate ckc correctly) and stream played successfully But when we try to download stream for offline, through session.processContentKeyRequest for contentId, we get spc, generate ckc the same as previously, but can't recieve persistent key data keyRequest.persistableContentKey PKD failed Error Domain=AVFoundationErrorDomain Code=-11835 "Cannot Open" UserInfo={NSLocalizedFailureReason=This content is not authorized., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x282da98f0 {Error Domain=NSOSStatusErrorDomain Code=-42668 "(null)"}} Server and client the same, fps stream played, but not load pkd for offline All offline part of sources we get from HLS Catalog example, and implement requestCertificate and requestContentKeyFromKeySecurityModule, and i don't understand why we not recieve pkd.
Replies
1
Boosts
0
Views
1.1k
Activity
Jul ’23
iOS 16 - Exception Thrown for processContentKeyResponse
Issue: I am supporting an iOS application that streams Fairplay DRM protected content. On iOS 16 devices, I am seeing intermittent exceptions thrown when trying to process the CKC returned by the license server. The thrown exception is as follows: -[AVContentKeyRequest processContentKeyResponse:] AVContentKeySession's keySystem is not same as that of keyResponse This issue does not occur on older devices (we support iOS 13, 14, 15) I am unable to find documentation about this error so any insight is appreciated: High-Level Code Overview Use ContentKeyRequest to request an application certificate Use returned Cert to call makeStreamingContentKeyRequestData Use returned data to request FairPlay license Use returned CKC to generate AVContentKeyResponse (i.e. AVContentKeyResponse(fairPlayStreamingKeyResponseData:_)) Call processContentKeyResponse(_) App crash/exception thrown when callling processContentKeyResponse I am seeing other issues related to DRM and iOS 16 but these are specific to downloaded and offline content which do not match my use case.
Replies
3
Boosts
0
Views
2.9k
Activity
Jul ’23
Query regarding "Different target durations detected" error while validating the VOD playlist with media stream validator
When i validated the VOD playlist with media stream validator, am getting the "Different target durations detected" error for trk vs sub, var vs sub playlists, Error: Different target durations detected --> Detail: Target duration: 3599 vs Target duration: 6 --> Source: subs/eus_2/playlist.m3u8 --> Compare: trk969287/playlist.m3u8 --> Detail: Target duration: 6 vs Target duration: 3599 --> Source: var969287/playlist.m3u8 --> Compare: subs/eus_2/playlist.m3u8 but the apple specification (https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices specification) stated that "5.7. For VOD content, target durations of subtitle playlists MAY be longer than the other media." Can you please clarify the query that why we are getting different target duration error for subtitle vs other media playlists even though the apple spec mentioned that the subtitle playlist may be longer than other media for VOD assets?
Replies
1
Boosts
0
Views
1.1k
Activity
Jul ’23
How to determine mimetype of .key and.numbers file ?
I need to correctly determine the mime type of keynote file and numbers file without relying on the extension. For this purpose, I am hoping to use the magic number concept and match it with the first four bytes of a file. Link for magic number understanding -> [https://www.outsystems.com/forge/component-overview/10108/validate-file-extension#:~:text=A%20magic%20number%20is%20a,types%20which%20is%20hexadecimal%20format.] Though after extensive searching online I am unable to find a unique magic number for the above files moreover first four bytes of the file is matching with the magic number of the zip file due to which I am getting the wrong extension as zip. This is the first four bytes 0x50, 0x4B, 0x3, 0x4. Is there any reliable way to find the mime type of these files without relying on an extension?
Replies
0
Boosts
0
Views
881
Activity
Jun ’23
Error 16833 and 19152
We have created a hls playback framework and lot of our client's are complaining about this error {"code": -19152, "domain": "CoreMediaErrorDomain", "localizedDescription": "The operation couldn’t be completed. (CoreMediaErrorDomain error -19152 - The operation couldn’t be completed. (CoreMediaErrorDomain error -19152.))", "localizedFailureReason": "", "localizedRecoverySuggestion": ""} We are unable to reproduce this issue on our end but we have data reflecting the same error happening at good rate. Any help/hint is welcome. Thanks
Replies
1
Boosts
0
Views
2.0k
Activity
Jun ’23
Can't parse and decrypt SPC and CKC messages
Hello everyone, I have captured SPC and CKC messages. I'm trying to parse it using verify_ckc tool, but I only get SPC encryption key and SPC encryption IV: CKC/SPC Sanity Test v. 2.01 ========================= Begin SPC Data =============================== SPC container size 7296 SPC Encryption Key - a9 a6 8c 2b 62 2f 3a ee bc 92 0c 4d cb 07 d1 c7 SPC Encryption IV - 75 7f f7 60 c9 d0 16 2a 7b 96 0e 42 e6 c3 3e 75 ================ SPC TLLV List ================ =========================== End SPC Data ================================= =========================== Begin CKC Data ================================= =========================== End CKC Data ================================= SPC binary message: https://www.icloud.com/iclouddrive/0c0hm06RJQpTlsWBB1ANb3OZw#SPC CKC binary message: https://www.icloud.com/iclouddrive/016apmD_MZDFaGVNey_HA_17g#CKC What is the problem?
Replies
0
Boosts
0
Views
792
Activity
Jun ’23
FairPlay license auto-renewal (on SPC request)
Hi, is it possible to force/ensure an automatic license renewal in a Fairplay SPC response? I can find that feature in other DRM systems like Widevine (using specific parameters in the response) Searching in "FairPlay Streaming Server SDK 4.4.4" I can only find parameters related to lease/rental TLLs, but not an explicit renewal request. does this feature exists on FairPlay? Any information will be appreciated. Have a great day!
Replies
0
Boosts
0
Views
951
Activity
Jun ’23
Download fairplay encrypted video asset in tvOS
I need to download encrypted HLS stream in tvos and save it in local file path. But AVAssetDownloadURLSession is not available in tvOS. Is there any alternative?. Thanks
Replies
0
Boosts
0
Views
858
Activity
May ’23
Possibility of using SAME FairPlay Certificate by two providers simultaneously
Hello There, Can the SAME FairPlay Certificate be used by two providers simultaneously without impacting each other? For example, we already have a DRM Providers using our FairPlay Certificate in Production. We are now planning to migrate to another DRM Provider for part of the traffic/channels in parallel with Production. This means, in Production, at the same time, 2 DRM providers would be using the SAME FairPlay Certificate. Kindly let us know if this will create any potential issues with the Encrypted Contents that use the Certificate. Is there any impact on the final user in the iOS/tvOS applications with two DRM providers using the same FairPlay certificate?
Replies
0
Boosts
0
Views
867
Activity
May ’23
How to stop AVPlayer to cache/download hls chunks during playback
Hi Team, I am pre-caching first 5 seconds of vidoes to improve start up playback latency. I am using AVAssetDownloadTask(AVAssetDownloadTask | Apple Developer Documentation) for pre-caching first 5 seconds in movpkg container in local. Now during playback of pre-cache vidoe from local file, AVPlayer start downloading remaining video chunks hence completely download video in local which increase space in device. Is there any way to stop AVPlayer to cache/download chunks in local during playback ?
Replies
1
Boosts
0
Views
1.8k
Activity
May ’23
I cannot apply for a FPS certificate
I filled out the FPS certificate application form for existing applications twice in https://developer.apple.com/contact/fps/. After successful submission, I will say that I need to receive email in my mailbox, but I have not received the corresponding notification email in my mailbox. How do I deal with it? thank you!
Replies
1
Boosts
0
Views
979
Activity
May ’23
Native HLS streaming w/ Fairplay fails in Safari iOS 16+ but works in Safari iOS 15.6.1 at least
Streaming a FairPlay DRM protected video stream does not work in Safari iOS since iOS 16+. It was working correctly at least in Safari under iOS 15.6.1. (Note: it works correctly in Safari MacOS) I was able to reproduce the problem with 2 test pages of HLS FairPlay content in iOS Safari : JW player test page : https://developer-tools.jwplayer.com/stream-tester Shaka Player test page : https://shaka-player-demo.appspot.com/demo/#audiolang=en-US;textlang=en-US;uilang=en-US;panel=CUSTOM%20CONTENT;build=uncompiled Can you please confirm that it is broken ? Thanks !
Replies
2
Boosts
0
Views
2.5k
Activity
Apr ’23
HLS+Fairplay stream resources freeing issue
The Context I'm using the HTML video element to play HLS+Fairplay streams (VOD and live) in Safari. My application is a Netflix-like. You can watch a video, stop, and watch another one. Concretly, the <video> tag is created upon each play and destroyed when the player exits. The Problem Sometimes, after exiting the player, launching a new video causes a MEDIA_ERR_DECODE error without anymore explanation. I can trace in my code that the Fairplay certificate and the CKC have been correctly retrieved and that the media session has been created and updated (with the CKC). In fact, when I log everything, I see the exact same logs as when it works. Except the final MEDIA_ERR_DECODE error. When I get this error, if I immediately retry to play, the same error happens, but if I wait about 5~10 seconds, it successfully plays. It's like some resource is waiting to be garbage-collected. What I tried I tried playing non-DRMed videos and it works perfectly: I could play, stop, play, etc. without any issue. So my guess is something is happening at the EME level. I've browsed the whole Internet (twice) and couldn't come up with a clear explanation. Most of the hints I found couldn't explain my issue (e.g. bad DRM-encryption, but how could it work the first time?) or solve it (e.g. videoElement.src = ""). I'm throwing a bottle into the sea, here... Thanks for your help!
Replies
2
Boosts
0
Views
2.1k
Activity
Apr ’23
Do FairPlay and AVPlayer support Clear Lead?
In DRM-protected files, usually there's a Clear Lead -- the first few seconds are clear. It allows playback to start without having to wait for license response, improving video start time (and user experience).The question is, therefore: if a stream has clear lead, will AVPlayer start playing without waiting for response from the DRM server?
Replies
12
Boosts
0
Views
6.4k
Activity
Apr ’23
FairPlay Content Packaging Using mediafilesegmenter tool
New to FairPlay implementation. Following Apple's "FairPlay Streaming Programming Guide", to transcoded & encrypted a MP4 file using command - mediafilesegmenter --stream-encrypt --streaming-key-delivery --encrypt-key-file=./key_iv.bin --encrypt-key-url="skd://example/key" ./input-content.mp4 key_iv.bin is the file which contains Encryption Key and Initialisation Vector. It is generating HLS's playlist, index and segment files. To test the encryption and the decryption precess, I am taking one segment file(which is generated by mediafilesegmenter, say fileSequence125.ts) and trying to decrypt(algorithm is "AES/CBC/NOPADDING") it using the same Encryption Key and Initialisation Vector, then I am getting bellow errors - Input length not multiple of 16 bytes So, does it means the length/size of each segment(.ts) file, which is generated by the mediafilesegmenter, should be a multiple of 16 bytes?
Replies
0
Boosts
0
Views
814
Activity
Apr ’23
How do I access a FairPlay protected stream's frame in avplayer?
when i played a fairplay streaming by avplayer,calling copyPixelBufferForItemTime on AVPlayerItemVideoOutput the pixelbuffer returns NULL.is there any way to get the pixel buffer from a stream that is protected using FairPlay on iOS or apple's APIs in order to display FairPlay stream on an OpenGL texture in 3D space?
Replies
1
Boosts
0
Views
712
Activity
Mar ’23
FairPlay on iOS 16.1 and onward: AVAssetResourceLoaderDelegate not called with offline DRMs anymore
Hello, We are experiencing a new regression with iOS 16.1/16.2 beta when trying to play a video with offline FairPlay DRMs. Everything was working fine with 16.0.3 and below. The delegate public func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool is never called when you start playing an offline video. It prevents the player to get the DRM and we end up with a timeout CoreMediaError -19512. We tried to preload the existing keys asset.resourceLoader.preloadsEligibleContentKeys = true to no avail. We also looked at the solutions provided in this thread iOS 16 FairPlay Changes which was very similar to our issue but nothing worked for us (we are already using keyRequest.processContentKeyResponse(response)). The DRMs are valid and can be loaded if we move the key to an older iOS device (iOS 16 and below). However, we can see in the logs the following error happening before the CoreMediaError -19512. <<< FigPKDKeyManager >>>> PKDKeyManagerSetKeyRequestError: keyManager: 0x606ce 210 KeyID: F017D7B0-390-45ED-803-01A748DFB7A1 errOr: Error Domain-CoreMediaErrorDomain Code=-19160 " (null)" err: 0 The player just seem not to trigger any delegate starting 16.1+. Is anybody else experiencing the same issue? How can we find out why the delegate aren't triggered? Bests
Replies
2
Boosts
1
Views
2.4k
Activity
Mar ’23
New FairPlay Streaming (FPS) credentials
Hi, I have a question about FairPlay Streaming (FPS) credentials. When a new set of FPS credentials is requested, will existing FPS Credentials on a live app continue to function until it is swapped for the new ones?  Or will the existing FPS credentials immediately cease to function upon issuing new FPS credentials?
Replies
0
Boosts
0
Views
711
Activity
Mar ’23