如何检测 MPMediaItem 是否代表 iOS 上受 DRM 保护的音轨
我想知道代表音乐曲目的 MPMediaItem 是否适用于受 Fairplay/DRM 保护的项目。有办法做到这一点吗?
I would like to know if an MPMediaItem that represents a music track is for a Fairplay/DRM-protected item. Any way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我是这样做的:
Here's how I do it:
从 iOS 4.2 开始就有了一种方法。可能有比这里的示例更有效的方法(但对于我的应用程序,我无论如何都需要创建 AVPlayerItems)。
Since iOS 4.2 there is a way. There may be a more effective way then the example here (but for my app I needed to create AVPlayerItems anyway).
从 iOS 4.2 开始,
AVAsset
类有一个hasProtectedContent
属性,因此您可以检查:From iOS 4.2 the
AVAsset
class has a propertyhasProtectedContent
so you can check:对于通过 Apple Music 离线保存的歌曲,在运行 iOS 11 的 iPhone X 上,
MPMediaItemPropertyAssetURL
是非零 em> 但AVPlayer
无法播放它们,因为它们受 DRM 保护。同一首歌曲在 iOS 9 上返回MPMediaItemPropertyAssetURL
nil。对于通过 Apple Music 添加到库中的歌曲,
MPMediaItemPropertyAssetURL
返回 nil,但无法离线使用 - 均在 iOS 上9& 11。因此,@voidStern 的答案(而不是 Justin Kent 的答案)是测试受 DRM 保护的资产的正确方法。
voidStern 答案的 Swift 4 版本(在 iOS 9 到 11 上非常适合我):
检查受 DRM 保护的资产的另一种正确方法是使用
属性 - @weirdyu 的回答。但是,此属性仅在 iOS 9.2 及更高版本上可用。MPMediaItem
的 protectedAsset此方法的 Swift 4 解决方案(在 iOS 9.2 及更高版本上非常适合我):
MPMediaItemPropertyAssetURL
is not nil on iPhone X running iOS 11 for songs saved offline via Apple Music butAVPlayer
is unable to play them since they are DRM protected. The same song returnsMPMediaItemPropertyAssetURL
nil on iOS 9.MPMediaItemPropertyAssetURL
returns nil for songs added to Library via Apple Music but not available offline - both on iOS 9 & 11.Thus, @voidStern's answer (and not Justin Kent's) is the correct way to test for DRM-protected asset.
Swift 4 version of voidStern's answer (works perfectly for me on iOS 9 to 11):
Another correct way of checking for DRM-protected asset is by making use of
protectedAsset
property ofMPMediaItem
- an answer by @weirdyu. But, this property is available only on iOS 9.2 and above.Swift 4 solution for this method (works perfectly for me on iOS 9.2 and above):
iOS9.2+:
iOS9.2-请使用MPMediaItem“protectedAsset”属性
:
判断MPMediaItem"assetURL"属性是否为nil
iOS9.2+:
Please use MPMediaItem "protectedAsset" property
iOS9.2-:
Judge MPMediaItem"assetURL"property is nil or not
贾斯汀·肯特的解决方案效果很好。我建议使用块,否则如果你处理一堆歌曲,用户体验将会受到影响:
Justin Kents' solution works great. I recommend using blocks though or else the UX will suffer if you deal with a bunch of songs:
现在我正在 ios 9 的 swift 2 上构建,我发现使用 hasProtectedContent 或使用 nil url 测试我的代码被破坏了。我发现以下代码有效:
如果该项目无法通过 AV 播放器播放,那么它是一个 DRM 项目,应该由 iPod 播放器(现在称为 SystemMusicPlayer)播放。
Now I'm building on swift 2 for ios 9, I found my code broken using hasProtectedContent or using nil url test. I've found the following code work:
If the item is not playable by AV Player, then it's a DRM item and should be played by iPod Player (now called SystemMusicPlayer).