【问题标题】:Play encrypted video with AVPlayer使用 AVPlayer 播放加密视频
【发布时间】:2012-04-02 05:07:28
【问题描述】:

我正在实现一个包含视频播放器的应用程序。由于某些原因,视频文件使用 AES 加密,并且这些文件的大小可能相当大,以避免将其作为一个整体加载到 RAM 中。我正在寻找用 AVPlayer 播放它的方法。

试过了:

1) 此处建议的自定义 NSURLProtocol http://aptogo.co.uk/2010/07/protecting-resources/ 没用,我建议 AVPlayer 使用它自己的,我的不被调用。

2) 使用 AVAsset 将视频切成小块,然后将它们提供给 AVPlayer - 失败,因为 AVPlayer 中没有用于此的 API。

任何解决方法将不胜感激:)

【问题讨论】:

  • 如果您有加密文件,我们应该至少知道格式等。您是否考虑过创建一个进行解密的代理?您的期望/用例(寻求等)是什么?
  • 我不太明白,你的意思是什么。您提供创建代理,但是为了什么?在我看来,有以下算法: 1. 捕获 AVPlayer 尝试通过 url 加载的加密数据。 2. 解密。 3.将解密后的数据放入AVPlayer。很可能是错的,因为 AVPlayer 没有任何数据提供者。但我不知道其他方式。
  • 您可以创建一个连接到实际内容的 Web 代理,并将 URL 指向解密数据的本地服务。这样就可以解耦加解密和播放视频。
  • 你有什么运气吗?我处于同样的情况,除了音频文件......我已经实现了一个自定义 NSURLProtocol 类,但它永远不会被调用。
  • 我正在经历“使用 AVPlayerItemVideoOutput 进行实时视频处理”,也许可以帮助developer.apple.com/library/ios/samplecode/AVBasicVideoOutput/…

标签: objective-c encryption avplayer


【解决方案1】:

你有两个选择:

  1. 如果面向 iOS 7 和更新版本,请查看 AVAssetResourceLoaderDelegate。它允许您使用自定义 NSURLProtocol 执行您想做的事情,但专门针对 AVPlayer。

  2. 模拟支持 Range 标头的 HTTP 服务器并将 AVURLAsset 指向 localhost。

我之前实现了#2,如果需要可以提供更多信息。

【讨论】:

  • 你能提供更多关于2的细节吗?
  • 我也有同样的问题。请您介意打开您的解决方案。
  • @JerneyStrasner 您能否提供有关#2 的更多信息。多年来,我一直在尝试使用CocoaHTTPServer 来实现这一点,但我的视频在播放 3 秒后尝试播放混乱。
  • Jernej,您能否提供有关 1 的更多详细信息。
  • 任何实际样品可用?
【解决方案2】:

我刚刚下载了 Apple 示例项目 https://developer.apple.com/library/ios/samplecode/sc1791/Listings/ReadMe_txt.html,它似乎完全符合您的要求。

代理捕获每个AVURLAssetAVAssetResourceLoader 调用并组成一个全新的.m3a8 文件,其中包含自定义解密密钥。
然后它将m3a8 中的所有.ts 文件URL 提供给播放器。

该项目很好地概述了使用 HLS 提要可以做什么。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多