我希望我的应用能够将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/.如果有人知道如何做到这一点,请告诉我.
我目前正在使用 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
Safari 是否有类似于 chrome://media-internals 的东西?我正在处理 HLS/SAMPLE-AES fMP4 流和视频“MEDIA_ERR_DECODE”并不是很有帮助。我希望找到一些可以仔细检查流的工具,并提供更多关于为什么解码/解密失败的信息......
环顾四周只需要快速了解应用程序本身是如何加密的.
默认情况下,在构建应用程序时,在加载到测试设备等时,它都是未加密的.
因此,当我们提交应用程序并构建它以进行分发时,它何时被加密,因此当它部署在用户的手机上时,它不容易进行逆向工程....
或者这是在构建/提交时间必须发生的额外步骤吗?
我的公司经营一个视频网站。我们目前通过流媒体提供我们的内容,并使用 WMRM DRM 下载到 Windows PC。我们希望为 Mac 提供可供下载的内容,但需要使用 FairPlay DRM 系统来保护它们。
这是我们可以做的,还是 FairPlay 专有的,只允许由 Apple 编码?是否有基于 Windows 的 SDK/工具包使我们能够扩展编码器软件以创建受 FairPlay 保护的文件?我更喜欢 SDK,这样我们就可以开发进程内解决方案,而不必调用可执行文件。
(PS:我知道 DRM 并不流行,但这不是我们的要求,而是工作室。所以我们可以选择使用 DRM 提供下载或根本不提供下载。请不要回复“DRM”之类的答案不好”或“DRM 不是答案”,因为这不是我的电话,甚至不是我公司的电话。)
我需要在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'工具).
我正在开发一个 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
我有一个应用程序可以流式传输受 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 下载音频的速度非常慢,所以我一次启动很多,每个都会生成一个密钥请求。
我想在屏幕截图上隐藏一些私人内容。由于 Apple 只为我们提供userDidTakeScreenshotNotification,实现此目的的唯一方法是使用 DRM 将图像转换为视频。根据这些线程:
如果您的应用程序使用 FairPlay Streaming (FPS),iOS 11 屏幕录制功能或 macOS 上的 QuickTime Player 将不会自动捕获您的视频内容。正在播放内容的应用程序部分将被涂黑。
我在 ScreenShieldKit 中找到了这些想法的商业实现,但它需要花钱。
主要问题: 如何在离线模式下将图像或标签转换为 FairPlay Streaming (FPS) 视频?
我们想要在内容中添加 DRM 加密,并想知道拥有自己的 DRM 服务器是否确实可行,还是应该使用第三方?另外,如果可行的话,我们可以实现所有 3 个 fairplay、playready、widevine 吗?
fairplay ×10
ios ×5
drm ×3
avfoundation ×2
airplay ×1
avasset ×1
cocoa-touch ×1
encoding ×1
encryption ×1
ipad ×1
macos ×1
nsurlsession ×1
playready ×1
safari ×1
sdk ×1
streaming ×1
submission ×1
swift ×1
widevine ×1
xcode ×1