2017-05-03 194 views
0

我有一个URL。它看起来像这样:使用AVURLAsset + AVPlayerItem + AVPLayer流式传输.mp3

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()中实际上不会播放音乐。

但是,它成功地打,如果我(从另一个计算器话题一些随机.MP3)取代其他URL,就像苹果公司自己https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8

http://podcast.cbc.ca/mp3/podcasts/asithappens_20160907_50906.mp3

,我看到的差异:苹果的网址实际上是某种类型的“播放列表”,而第二个网址则是一个普通的“文明”.mp3文件。链接末尾没有更多的安全mambo-jumbo。

为什么我的网址不能播放?我需要做一些特定的安全措施吗?现在,我只是天真地“嘿,AVURLAsset ...这是我的(整个)URL ...做你的东西...”

+0

那么,你提供的工作样本没有url属性。您的请求是否被网络服务器或其他东西重定向,而不是直接指向文件? – Lepidopteron

回答

0

找到它。

我收到的链接仅有效一次。显然这就是为什么“安全”到位的原因。

在Safari中测试一个并“看到它有效”会使其失效。随后,在应用结果中尝试使用同一个.isPlayable = false。 只需要在应用程序中直接请求&结果.isPlayable = true。

所以AVURLAsset + AVPlayerItem + AVPLayer工作得很好。我只是一个血腥的傻瓜。