问题标签 [avcontentkeysession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
523 浏览

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

我有一个应用程序可以传输受 FairPlay DRM 保护的音频。它最初AVAssetResourceLoaderDelegate用于交付 FairPlay 密钥,但现在我正在更新它以AVContentKeySession用于iOS 11.2 及更高版本。旁注:如果您尝试这样做并且对缺少文档感到沮丧,请在此处的“FairPlay Streaming Server SDK (4.2.0)”链接中提供示例代码

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

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

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

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

0 投票
1 回答
419 浏览

avfoundation - 没有调用 AVContentKeySessionDelegate 上的委托方法

我正在尝试使用 AVContentKeySession 播放加密的 HLS 流,但没有实现播放,并且在日志中看到“NSURLConnection 完成错误 - 代码 -1002”。AVFoundation 没有调用 AVContentKeySessionDelegate 上的委托方法。

如果我在媒体资产上设置资源加载器,我可以成功播放相同的流。

我尝试播放如下

其中委托类如下。它是不完整的,但在这个阶段我只希望看到委托方法被调用。

但是,我看到了上面提到的错误消息。请注意,如果我设置了一个可以获取密钥的有效资源加载器,则播放不会出现任何问题。

0 投票
1 回答
488 浏览

ios - Fairplay 停止在 iOS 12.4 和 13 上运行

我有代码可以从我的应用程序中播放加密的 Fairplay 流,它在 iOS 12.4 之前运行良好。我使用从请求中AVAssetResourceLoaderDelegate获取然后从请求中提取 SPC 并发出 http 请求以获取 CKC。AVAssetResourceLoadingRequestresourceLoader:shouldWaitForLoadingOfRequestedResource:

但是在新的 iOS 12.4 上,加载请求被取消并 resourceLoader:didCancelLoadingRequest:在之后被调用resourceLoader:shouldWaitForLoadingOfRequestedResource:,我的播放器保持在加载状态,没有错误。在测试版 iOS 13 上的行为相同。清晰的流是可播放的,而只有加密流的问题。

有人遇到过这个问题吗?我应该迁移AVContentKeySession到加载密钥吗?

0 投票
2 回答
343 浏览

ios - 未调用 AVContentKeySessionDelegate 方法

在我的 iOS 应用程序中的 ViewController.swift 中实现了AVContentKeySessionDelegate的委托方法,该方法 是使用 Brightcove SDK 播放 drm 内容。

代码片段:


问题

  1. 这些委托方法都没有被调用。
  2. 此外,注意到 Xcode 控制台中的错误提示: NSURLConnection 以错误代码 -1002 完成(在 Info.plist 的 App Transport Settings 中允许任意加载设置为 true
0 投票
1 回答
102 浏览

ios - MacOS/Safari 上的 AVContentKeySession API 等效?

我正在 Safari 上实现 Fairplay Streaming 播放器。它需要在播放之前从 KSM 预取一组密钥。我遇到的所有示例都实现了 AvContentKeySession api,但它仅在 Swift 和 Objective-C(用于 ios)中可用。MacOS/Safari 上的 AVContentKeySession API 是什么?是否有可用于在 MacOS/Safari 上实现此类功能的参考代码?

0 投票
0 回答
29 浏览

ios - 排查 AVContentKeySessionDelegate didProvide keyRequest 不委托成功或失败

我正在使用AVContentKeySessionAVContentKeySessionDelegate管理 iOS 上公平竞争的密钥。contentKeySession didProvide keyRequest: AVPersistableContentKeyRequest正在调用委托方法。应用证书、服务器播放上下文和内容密钥上下文的所有请求都成功返回。在此之后,以下代码不会引发错误。

看来我应该期待两种委托方法中的任何一种,contentKeyRequestDidSucceed或者contentKeyRequest didFailWithError应该在keyRequest收到响应时调用。两者都没有发生。我可以didFailWithError通过传入格式不正确的contentKeyContext.

播放不受 DRM 保护,因为我可以截取播放器的屏幕截图并且它不会被空白。

什么时候keyRequest.processContentKeyResponse被调用而没有抛出错误并且没有成功播放是什么意思?注意:会话确实有一个有效的 AVURLAsset 接收者。什么应该触发完成委托方法被调用?