标签: fairplay

解码AirPlay镜像协议

我希望我的应用能够将iPad 2的显示镜像到我的Mac上.

我已经发布了该_airplay._tcp服务,正在监听端口7100.该应用程序显示在AirPlay菜单中,Mirroring选项也在那里.视频和音频流完美地工作.

但我不知道如何解码FairPlay加密(POST /fp-setup)以支持AirPlay镜像.我参考了http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/.如果有人知道如何做到这一点,请告诉我.

macos fairplay ipad ios airplay

20
推荐指数
1
解决办法
8527
查看次数

下载前获取 AVAssetDownloadTask 的大小

我目前正在使用 FairPlay 流实现离线流。因此,我正在使用AVAssetDownloadTask.

我想向用户提供有关开始下载的大小的反馈:

您确定要下载此流吗?下载需要 2.4GB,您目前还有 14GB 的空间

我已经检查过类似countOfBytesReceived和的属性,countOfBytesExpectedToReceive但这些不会返回正确的值。

let headRequest = NSMutableURLRequest(URL: asset.streamURL)
headRequest.HTTPMethod = "HEAD"
let sizeTask = NSURLSession.sharedSession().dataTaskWithRequest(headRequest) { (data, response, error) in
    print("Expected size is \(response?.expectedContentLength)")
}.resume()
Run Code Online (Sandbox Code Playgroud)

打印大小为 2464,最后大小为 3GB。

在下载过程中,我记录了上述属性:

func URLSession(session: NSURLSession, assetDownloadTask: AVAssetDownloadTask, didLoadTimeRange timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange) {
    print("Downloaded \( convertFileSizeToMegabyte(Float(assetDownloadTask.countOfBytesReceived)))/\(convertFileSizeToMegabyte(Float(assetDownloadTask.countOfBytesExpectedToReceive))) MB")
}
Run Code Online (Sandbox Code Playgroud)

但这些保持为零:

已下载 0.0/0.0 MB

fairplay nsurlsession nsurlsessiondatatask avassetdownloadtask

7
推荐指数
1
解决办法
1421
查看次数

Safari 版本的 chrome://media-internals

Safari 是否有类似于 chrome://media-internals 的东西?我正在处理 HLS/SAMPLE-AES fMP4 流和视频“MEDIA_ERR_DECODE”并不是很有帮助。我希望找到一些可以仔细检查流的工具,并提供更多关于为什么解码/解密失败的信息......

safari google-chrome fairplay http-live-streaming

7
推荐指数
0
解决办法
619
查看次数

IOS App提交加密/ Fairplay,如何做或自动

环顾四周只需要快速了解应用程序本身是如何加密的.

默认情况下,在构建应用程序时,在加载到测试设备等时,它都是未加密的.

因此,当我们提交应用程序并构建它以进行分发时,它何时被加密,因此当它部署在用户的手机上时,它不容易进行逆向工程....

或者这是在构建/提交时间必须发生的额外步骤吗?

encryption submission fairplay ios

6
推荐指数
1
解决办法
2210
查看次数

使用 FairPlay DRM 编码媒体的 SDK?

我的公司经营一个视频网站。我们目前通过流媒体提供我们的内容,并使用 WMRM DRM 下载到 Windows PC。我们希望为 Mac 提供可供下载的内容,但需要使用 FairPlay DRM 系统来保护它们。

这是我们可以做的,还是 FairPlay 专有的,只允许由 Apple 编码?是否有基于 Windows 的 SDK/工具包使我们能够扩展编码器软件以创建受 FairPlay 保护的文件?我更喜欢 SDK,这样我们就可以开发进程内解决方案,而不必调用可执行文件。


(PS:我知道 DRM 并不流行,但这不是我们的要求,而是工作室。所以我们可以选择使用 DRM 提供下载或根本不提供下载。请不要回复“DRM”之类的答案不好”或“DRM 不是答案”,因为这不是我的电话,甚至不是我公司的电话。)

sdk encoding drm fairplay

5
推荐指数
2
解决办法
2617
查看次数

iOS IPA Re-packagin /重新签名AppStore应用程序

问题描述

我需要在iOS设备上控制任意应用程序,我的计划是向IPA注入可执行文件(实现远程控制逻辑),然后重新打包它.

由于应用程序应在受控环境(特定设备)中运行,因此我计划将我的配置文件与我的开发证书一起用于重新打包/签名.

首先,我试图重新打包第三方应用程序没有注入任何代码,这是通过以下方式完成的:

 1. Unzip the existing IPA
 2. Copy the provisioning profile to %APP_NAME%.app/embedded.mobileprovisioning
 3. export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
 4. signcode --force --deep -s "%Dev Cert Name%" "%Path/To/APP_NAME%.app"
 5. zip the re-signed code back together
Run Code Online (Sandbox Code Playgroud)

Above对于我使用Xcode手动构建的应用程序非常有用,但是,当使用从AppStore下载的IPA时,这不适用于以下设备日志错误:

<Debug>: AppleFairplayTextCrypterSession::fairplayOpen() failed, error -42112
Run Code Online (Sandbox Code Playgroud)

检查应用程序的'Mach-O'可执行文件,我已经验证相关体系结构的"代码签名"部分已完全更改(通过'signcode'工具).

问题

  • 为什么我不能重新打包我从AppStore下载的应用程序,而我手动创建w/Xcode的应用程序成功重新打包/签名?
  • 如何使用我的开发证书和配置文件重新打包/签署AppStore应用程序?
  • FairPaly如何区分我手动制作的应用程序(使用Xcode)和从appstore下载的应用程序?appstore应用程序有哪些残差,手动制作的应用程序没有?

参考

xcode cocoa-touch fairplay ios

5
推荐指数
1
解决办法
950
查看次数

是什么导致 AVAssetCache 报告完全下载的资产无法离线播放?

我正在开发一个 iOS 应用程序,它通过 HLS 播放 FairPlay 加密的音频,并支持下载和流式传输。在飞行模式下,我无法播放下载的内容。如果我AVURLAsset在下载完成时从本地 URL创建一个,asset.assetCache.isPlayableOffline返回NO,并且当我尝试以飞行模式播放时,它仍然尝试请求 .m3u8 播放列表文件之一。

我的主播放列表如下所示:

#EXTM3U
# Created with Bento4 mp4-hls.py version 1.1.0r623

#EXT-X-VERSION:5
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://url/to/key?KID=foobar",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"


# Media Playlists
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=133781,BANDWIDTH=134685,CODECS="mp4a.40.2" media-1/stream.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=67526,BANDWIDTH=67854,CODECS="mp4a.40.2" media-2/stream.m3u8
Run Code Online (Sandbox Code Playgroud)

流播放列表如下所示:

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:30
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://url/to/key?KID=foobar",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
#EXTINF:30.000181,
#EXT-X-BYTERANGE:470290@0
media.aac
# more segments...
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)

下载资产:

AVURLAsset *asset = [AVURLAsset assetWithURL:myM3u8Url];
[asset.resourceLoader setDelegate:[FairPlayKeyManager instance] queue:[FairPlayKeyManager queue]];
asset.resourceLoader.preloadsEligibleContentKeys = YES;
AVAssetDownloadTask *task = [self.session assetDownloadTaskWithURLAsset:asset assetTitle:@"Track" assetArtworkData:imgData options:nil];
[task resume];
Run Code Online (Sandbox Code Playgroud)

在代表的URLSession:assetDownloadTask:didFinishDownloadingToURL:

self.downloadedPath = location.relativePath;
Run Code Online (Sandbox Code Playgroud)

在代表的URLSession:task:didCompleteWithError: …

avfoundation fairplay http-live-streaming avasset avassetdownloadtask

5
推荐指数
1
解决办法
1511
查看次数

AVContentKeySession makeStreamingContentKeyRequestDataForApp 可以安全地强制同步吗?

我有一个应用程序可以流式传输受 FairPlay DRM 保护的音频。它最初AVAssetResourceLoaderDelegate用于交付 FairPlay 密钥,但现在我将其更新为AVContentKeySession用于iOS 11.2 及更高版本。附注:如果你想做到这一点,在缺少文档感到沮丧,有一个在示例代码“FairPlay的流媒体服务器SDK(4.2.0)”链接在这里

我的每个音频产品都被分成了许多曲目。当我打开一个音频产品时,我通过AVQueuePlayer. 这些轨道中的每一个都会生成一个对 FairPlay 密钥的请求。在没有已下载的持久密钥的情况下,这些请求中的每一个都进入密钥服务器,下载密钥,生成持久密钥并保存它。每个轨道都有相同的密钥,因此它们最终都具有相同的持久密钥数据,并且每个轨道都覆盖最后一个以完成。

因为我的密钥服务器的成本取决于我发出的密钥请求的数量,所以我希望只有第一个请求实际到达密钥服务器,随后的请求使用持久密钥。但是用于将 SPC 数据传递给密钥服务器的方法makeStreamingContentKeyRequestDataForApp使用异步完成块。onAVAssetResourceLoadingRequest等效方法是同步的。

我的问题:使用信号量强制此调用同步是否安全?像这样:

-(void)handleOnlineRequest:(AVContentKeyRequest *)req
  NSData *appCert = [self _getAppCertData];
  NSData *assetId = [self _kidFromRequest:req];
  dispatch_semaphore_t sema = dispatch_semaphore_create(0);
  [req makeStreamingContentKeyRequestDataForApp:appCert
                              contentIdentifier:assetId
                                        options:nil
                                        completion:^
    NSData *contentKeyRequestData, NSError *error)
    {
      //request key data and respond to request

      dispatch_semaphore_signal(sema);
    }];
  dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
  dispatch_release(semaphore);
Run Code Online (Sandbox Code Playgroud)

下载以前未流式传输的音频时,效果尤其明显。使用 AVAssetDownloadTask 下载音频的速度非常慢,所以我一次启动很多,每个都会生成一个密钥请求。

avfoundation fairplay ios avcontentkeysession

5
推荐指数
0
解决办法
485
查看次数

如何使用 DRM (FairPlay) 将图像转换为视频

我想在屏幕截图上隐藏一些私人内容。由于 Apple 只为我们提供userDidTakeScreenshotNotification,实现此目的的唯一方法是使用 DRM 将图像转换为视频。根据这些线程

如果您的应用程序使用 FairPlay Streaming (FPS),iOS 11 屏幕录制功能或 macOS 上的 QuickTime Player 将不会自动捕获您的视频内容。正在播放内容的应用程序部分将被涂黑。

我在 ScreenShieldKit 中找到了这些想法的商业实现,但它需要花钱。

主要问题: 如何在离线模式下将图像或标签转换为 FairPlay Streaming (FPS) 视频?

drm video-streaming fairplay ios swift

5
推荐指数
0
解决办法
858
查看次数

我们自己设置DRM许可证服务器是否可行

我们想要在内容中添加 DRM 加密,并想知道拥有自己的 DRM 服务器是否确实可行,还是应该使用第三方?另外,如果可行的话,我们可以实现所有 3 个 fairplay、playready、widevine 吗?

streaming drm fairplay playready widevine

5
推荐指数
1
解决办法
2465
查看次数