FairPlay Streaming

RSS for tag

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

FairPlay Streaming Documentation

Posts under FairPlay Streaming tag

31 Posts
Sort by:
Post not yet marked as solved
0 Replies
99 Views
Hi, We are trying to adopt FPS for mp4 content protection playing on safari browser of Mac OS. I have verified that native functions of safari browser support the decryption for AES-128 encrypted TSs based on EME of HTML5 and HLS mechanism, where the CEK stores in http server described in the m3u8 manifest and is delivered to the browser in plain. Although it is a simple and easy solution to protect the mp4 contents, the security is still matter because the key is delivered in plain. So we decided to implment a key server to issue the CKC message after receiving SPC as safari browser's key request. I have a question before starting it. Q: The Encrypted AES-128 key in the Table 2-3. SPC container structure of FairPlay Streaming Programming Guide document says that "This key is itself encrypted, using RSA public key encryption with Optimal Asymmetric Encryption Padding (OAEP)". It means we needs a private key to decrypt it. I understand it if the client is a proprietary application so that the public key would be one of the FPS development credential, which will be issued by Apple according to our request. Because the client application can use the public key during the implementation. But what if the client is the safari browser? We cannot use any kind of new issued public key for the safari browser. I guess Mac OS uses some fixed public key which is already issued by Apple for safari browser's FPS. Now how can I get the counter private key? It could not be contained in the FPS credential. Because it should be a fixed one, not new generated one.
Posted
by
Post not yet marked as solved
0 Replies
127 Views
Hello I have a HLS manifest with multiple audio and multiple subtitle tracks. I use AVPlayer on iOS to play this HLS asset. On the iOS app I have the freedom to display selective subtitle and audio track list to the user but when the user uses AirPlay on the iOS, all the subtitle and audio tracks available in the HLS manifest is displayed to the user on the Apple TV (or any AirPlay compatible device). Let me explain with one example. Say, the HLS manifest has the following tracks: English, Spanish & German audio tracks English, Italian, Spanish & German subtitle tracks When the user uses AirPlay, I want to hide German language and display only the following tracks on the Apple TV: English & Spanish audio tracks English, Italian & Spanish subtitle tracks The primary intent here is that the user should not be able to see German language anywhere on the target AirPlay device. How to achieve this in code? Note: It's difficult to modify the source HLS manifest file.
Posted
by
Post not yet marked as solved
0 Replies
217 Views
I have an iOS app that can play audio books as FairPlay DRM'd audio streams. I'm using AVContentKeySession to fetch keys and AVQueuePlayer to play. It works great on iOS, but on Catalyst (Monterey 12.3.1, M1 Max MacBook Pro) it crashes. When it happens in debug, I get a message "Too few bits left in input buffer" printed to the console, and an exception is thrown in the guts of what appears to be core media. Here's the output from [NSThread callStackSymbols] when paused on an exception breakpoint at that point: 0   ???                       0x0000000156b8cc9c 0x0 + 5749918876, 1   BRFree                    0x000000010445cf08 main + 0, 2   AudioCodecs               0x0000000157918c24 _ZL11GetPropertyPvjPjS_ + 52, 3   AudioToolboxCore          0x00000001862536a4 _ZN15ADTSAudioStream11ParseHeaderER27AudioFileStreamContinuation + 1060, 4   AudioToolboxCore          0x000000018624259c AudioFileStreamParseBytes + 412, 5   MediaToolbox              0x00000001915f7d98 FigManifoldCreateForICY + 2176, 6   MediaToolbox              0x00000001915f7718 FigManifoldCreateForICY + 512, 7   MediaToolbox              0x00000001916bbd78 FigPlayerStreamCreate + 315920, 8   MediaToolbox              0x0000000191a269a0 FigMetadataConverterCreateForQuickTimeToFromiTunes + 45888, 9   MediaToolbox              0x0000000191a4a290 FigMetadataConverterCreateForQuickTimeToFromiTunes + 191536, 10  MediaToolbox              0x0000000191a2a470 FigMetadataConverterCreateForQuickTimeToFromiTunes + 60944, 11  MediaToolbox              0x0000000191a28c34 FigMetadataConverterCreateForQuickTimeToFromiTunes + 54740, 12  MediaToolbox              0x0000000191a413b4 FigMetadataConverterCreateForQuickTimeToFromiTunes + 154964, 13  MediaToolbox              0x0000000191a2f144 FigMetadataConverterCreateForQuickTimeToFromiTunes + 80612, 14  MediaToolbox              0x00000001917cae64 FigAlternateFilterMonitorCreateForThermalNotification + 30428, 15  MediaToolbox              0x00000001917ccb44 FigAlternateFilterMonitorCreateForThermalNotification + 37820, 16  MediaToolbox              0x00000001917cb134 FigAlternateFilterMonitorCreateForThermalNotification + 31148, 17  CFNetwork                 0x0000000189937cd4 _CFHostIsDomainTopLevelForCertificatePolicy + 27728, 18  Foundation                0x0000000185ba980c __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 24, 19  Foundation                0x0000000185ba96b4 -[NSBlockOperation main] + 104, 20  Foundation                0x0000000185ba9644 __NSOPERATION_IS_INVOKING_MAIN__ + 24, 21  Foundation                0x0000000185ba88dc -[NSOperation start] + 788, 22  Foundation                0x0000000185ba85c0 __NSOPERATIONQUEUE_IS_STARTING_AN_OPERATION__ + 24, 23  Foundation                0x0000000185ba8478 __NSOQSchedule_f + 184, 24  libdispatch.dylib         0x00000001099f60f4 _dispatch_block_async_invoke2 + 148, 25  libdispatch.dylib         0x00000001099e2394 _dispatch_client_callout + 20, 26  libdispatch.dylib         0x00000001099eb778 _dispatch_lane_serial_drain + 980, 27  libdispatch.dylib         0x00000001099ec814 _dispatch_lane_invoke + 492, 28  libdispatch.dylib         0x00000001099f9fc8 _dispatch_root_queue_drain + 408, 29  libdispatch.dylib         0x00000001099f9d3c _dispatch_worker_thread + 264, 30  libsystem_pthread.dylib   0x00000001094e1890 _pthread_start + 148, 31  libsystem_pthread.dylib   0x00000001094ebaa8 thread_start + 8 In the Debug Navigator, the top of the stack looks a little different: #0 0x0000000184bdeb3c in __cxa_throw () #1 0x000000015791941c in ACMP4AACLowComplexityDecoder::GetProperty(unsigned int, unsigned int&, void*) () #2 0x0000000157918c24 in GetProperty(void*, unsigned int, unsigned int*, void*) () #3 0x00000001862536a4 in ADTSAudioStream::ParseHeader(AudioFileStreamContinuation&) () #4 0x000000018624259c in AudioFileStreamParseBytes () #5 0x00000001915f7d98 in ___lldb_unnamed_symbol598$$MediaToolbox () What's going wrong here? Can anyone give me direction on what to fix? Or is FairPlay audio not even expected to work in Catalyst at this point?
Posted
by
Post not yet marked as solved
1 Replies
210 Views
Website serving Apple FairPlay videos here... I have three users reporting problems with playback using Safari on iPad with iOS 15.4. It seems they can no longer use Chrome (where we serve the same videos using DASH+CENC) either. That is all I know at this time. Not finding anything from google except the 15.1 FairPlay debacle... Just fishing. Anything similar for anyone else? Thank you kindly.
Posted
by
Post not yet marked as solved
0 Replies
141 Views
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!
Posted
by
Post not yet marked as solved
0 Replies
248 Views
Hi, I have a video streaming application and a part of code which use FairPlay + DRM. Im trying stream DRN content on appletv and It works well on iOS 13, but on iOS 15 i see nothing and catch internal player error: Error Domain=AVFoundationErrorDomain Code=-11870 "Operation failed" UserInfo={NSLocalizedFailureReason=An unknown error has occurred (808), NSLocalizedDescription=Operation failed, NSUnderlyingError=0x283902700 {Error Domain=NSOSStatusErrorDomain Code=808 "(null)"}}
Posted
by
Post not yet marked as solved
0 Replies
256 Views
I've been searching all over to find an answer to this question. I know that FairPlay/HLS supports audio Streams since there's obviously audio in video, but I'm wondering if this is practical? Also is there any way to stream FairPlay DRM encrypted content without HLS? or if I use HLS could I create only a single audio bitrate format in order to save on hosting costs? I work on and Audio Book app that requires DRM for some content. Also any links to documentation, videos, tutorials, blog posts... etc on the topic would be awesome too. Very much appreciate anyone who takes the time to answer this. I wish this was more explicitly talked about on the Apple Dev site, but it seems very geared towards video streaming.
Posted
by
Post not yet marked as solved
2 Replies
572 Views
Trying to play some non DRM video from HLS url but AVPlayer is not playing the video, Exactly getting this error :- "Player Item Error: Optional("The operation couldn’t be completed. (CoreMediaErrorDomain error -12971.)")" . No idea what is happening here and also what does error -12971 means exactly?
Posted
by
Post not yet marked as solved
0 Replies
212 Views
When recording 4K 60fps on iPhone 11 Pro, 12 and 13 it does not provide a stable frame rate of 60fps. Checking the Meta data it ranges from 52-58. Are there any settings that can force 60 frames or anything I can do to get a stable frame rate of 60fps. it also appears when trimming the video the frame rate drops as well.
Posted
by
Post marked as solved
3 Replies
521 Views
I've been maintaining adaptive HLS+FairPlay streams with audio and video for years. My implementation works great. However, I'm now also implementing captions or subtitles, and I'm having trouble with the later. I'm actually able to generate my HLS streams with WebVTT subtitles, and they work great. But as soon as I encrypt the streams, Apple players stop working (forever stall). And my fairplay implementation works perfectly when no subtitles are involved. I'm not encrypting the webvtt chunks: they travel as plain text, as stated in Apple guidelines. I believe this may be the issue: encrypted a/v streams with an unencrypted subtitles stream. However, encrypting plain text subtitles with SAMPLE-AES has no sense to me, so far I was unable to find a single HLS example online with subtitles that also happen to have FairPlay encryption. All documents I have about FairPlay also say nothing about this, I've also tried applying CEA-608 closed captions in the video stream, and this actually works great with FairPlay. But CEA-608 has its own issues, and so I would like to migrate that tech to WebVTT: which also works great, except when FairPlay is involved. I understand that Apple also establishes that I could use TTML (ISMC1) inside fMP4, which I suspect may be SAMPLE-AES encryptable. However, given my customers use cases, I need to use TS format for HLS, and so I can't use fMP4. With all this in mind, do anybody know how to properly configure HLS+FairPlay with a plain text WebVTT subtitles stream? Please note this is about live streaming, and not VOD nor offline playback. Thanks.
Posted
by
Post not yet marked as solved
0 Replies
234 Views
I recently successfully registered for the FPS certificate but I lost the ASK. How can I find it? Or I need to revoke the certificate.
Posted
by
Post not yet marked as solved
2 Replies
623 Views
Hi, we have a customer having problem with our TV Live application with its iPhone 13 iOS 15. The player raises a CoreMediaErrorDomain error -42765 upon fairplay HLS stream. Is it possible to get a description and potential cause of this probleme to help him. Kind regards Cédric
Posted
by
Post not yet marked as solved
1 Replies
333 Views
I am running a spike for apple watches and one of the things that I'm evaluating now is the capability to play HLS + fairplay content offline. It seems like the only way forward is by using AVAssetDownloadTask, which is not available on watchOS. So, my question is if there is any plan to release this capability to apple watches soon or if there is any other way to do that.
Posted
by
Post marked as solved
16 Replies
8.8k Views
Hi, IOS 15 Safari does not support Fairplay DRM and gives an error, other browsers like Chrome also do not work. Since IOS 15 released today, we as DRM providers are having a lot of complaints from our customers. The issue does not happen on IOS app, only for IOS browser. We have seen the same issue across multiple DRM providers, so issue is at the end of Apple and only occurs for IOS 15.
Posted
by
Post not yet marked as solved
0 Replies
1.2k Views
Playbacking FPS content on iOS v15 Beta + Safari fails even if key request succeeds. I've used Shaka player and other HTML5 players which ends in the same result. Although, when trying it on AVPlayer, playback succeeds so I guess there is some problem in Safari or somewhere. Is it a bug and will it be fixed before release? By the way iOS v14 + Safari + FPS works with no problem.
Posted
by
Post not yet marked as solved
2 Replies
522 Views
Trying to download an encrypted HLS stream we faced the following behaviour: Setting requestCachePolicy and/or urlCache properties of URLSessionConfiguration that used to create the AVAssetDownloadURLSession seems to have no effect at all. In our application the user can add multiple encrypted HLS streams at a queue. Before adding them in queue, we make sure that the manifest gets cached using the shared URLSession like this: URLSession.shared.configuration.urlCache = .shared let task = URLSession.shared.dataTask(with: media.url) { _, _, _ in self.addMediaToQueue(media) } task.resume() and we setup our AVAssetDownloadURLSession like this: // Create the configuration for the AVAssetDownloadURLSession. let backgroundConfiguration = URLSessionConfiguration.background(withIdentifier: "AAPL-Identifier") backgroundConfiguration.urlCache = .shared backgroundConfiguration.requestCachePolicy = .returnCacheDataElseLoad // Create the AVAssetDownloadURLSession using the configuration. assetDownloadURLSession = AVAssetDownloadURLSession(     configuration: backgroundConfiguration,     assetDownloadDelegate: self,     delegateQueue: .main ) Here is an example of the caching headers that we use: Last-Modified: Thu, 11 Mar 2021 02:23:57 GMT Cache-Control: max-age=604800 This is important for us since our manifest url is signed and expires after 12 hours. Example of manifest URL: https://example.host.gr/v1/791/888/773923397316/773923397316.ism/.m3u8[…]~hmac=ee37a750b8238745b5c8cf153ebcd0b693dd5d83 If the client followed the HTTP cache policy and didn’t request the .m3u8 manifest file over the internet, the download would start, despite the 12 hours limit. Is this the intended behaviour of the download process or some kind of an issue? Could you suggest a workaround?
Posted
by
Post not yet marked as solved
0 Replies
388 Views
Hi My team generated the CSR for FairPlay on Windows and when we got the certificate, installing it on the machine used to generate the CSR we get the following error : A certificate issued by the certification authority cannot be installed. Contact your administrator. A certificate chain could not be built to a trusted root authority. 0x800b010a (-2146762486 CERT_E_CHAINING) We did this using the instructions on the FiraPlay Streaming Credential Generation Guide. If we install the certificate by opening the certificate and clicking on the install option, we get this error on the certificate "Windows does not have enough information to verify this certificate" Desperately looking for a solution. Any help would be most appreciated.
Posted
by
Post not yet marked as solved
0 Replies
437 Views
I am trying to encrypt a live stream with FairPlay and then play it in the player. I use this method: public void onHTTPCupertinoEncryptionKeyLiveChunk(ILiveStreamPacketizer liveStreamPacketizer, String streamName, CupertinoEncInfo encInfo, long chunkId, int mode) {   if (streamName.startsWith("aes")) {     encInfo.setEncMethod(CupertinoEncInfo.METHOD_SAMPLE_AES);    encInfo.setEncKeyFormat("com.apple.streamingkeydelivery");    encInfo.setEncKeyBytes(BufferUtils.decodeHexString("123456789ABCDEF123456789ABCDEF12"));    encInfo.setEncIVBytes(BufferUtils.decodeHexString("FEDCBA9876543210FEDCBA9876543210"));    encInfo.setEncUrl("skd://skd");    encInfo.setEncKeyFormatVersion("1");   } I use http://player.wmspanel.com/ and I get this license https://ls-proxy.redlabs.pl/license/fps/tvnTest/fps/tvnTest?key=123456789ABCDEF123456789ABCDEF12&iv=FEDCBA9876543210FEDCBA9876543210 and https://r.dcs.redcdn.pl/file/o2/portal/prod/fairplay/cert.pub I just want to see if I get my live license it will be work. Where could there be a mistake? maybe you know some sample players and licenses to test the DRM?
Posted
by