我有一个网址。它看起来像这样:
https://content.stage.someCompany.net/deliveries/artistNameHere/songNameHere-128.mp3?Expires=someNumberHere&Signature=someReallyReallyReallyLongStringHere&Key-Pair-Id=someIdHere
让我把它分解成几部分:
https://content.stage.someCompany.net/deliveries/artistNameHere/songNameHere-128.mp3
?Expires=someNumberHere
&Signature=someReallyReallyReallyLongStringHere
&Key-Pair-Id=someIdHere
正如您所看到的,它只是一个限制为 128 kbps 的美化 .mp3,最后带有一些安全内容。
如果我将它加载到 Mac 上的 Safari 中,它就会播放。如果我将它传递给我的 iOS 应用程序中的 AVPlayer 构造函数,它也会播放。
但是,如果我使用它来创建 AVURLAsset,它会报告 .isPlayable 为 false。如果我顽固地坚持进一步创建基于该资产的 AVPlayerItem,它将报告 AVPlayerItemStatusFailed。
不用说,在这些条件下,我的 AVURLAsset + AVPlayerItem + AVPLayer 基础结构最终在 player.play() 中达到顶峰,实际上不播放音乐。
但是,如果我替换其他 URL,例如 Apple 自己的https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bibpbop_4x3_variant.m3u8 ,它确实可以成功播放
或者
(来自另一个stackoverflow主题的一些随机.mp3)http://podcast.cbc.ca/mp3/podcasts/asithappens_20160907_50906.mp3
我看到的区别:Apple 的 url 实际上是某种“播放列表”,而第二个是普通的“文明”.mp3。链接末尾不再有安全 mambo-jumbo。
为什么我的网址播放不了?我需要对安全性做一些具体的事情吗?现在,我只是天真地“嘿,AVURLAsset ......这是我的(整个)URL......用它做你的东西......”