使用AVURLAsset + AVPlayerItem + AVPLayer流式传输.mp3

时间:2017-05-03 14:45:54

标签: ios avplayer audio-streaming avplayeritem avurlasset

我有一个网址。它看起来像这样:

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()中)实际上没有播放任何音乐。

但是,如果我替换其他网址,例如Apple自己的https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8

,它确实会成功播放

(来自另一个stackoverflow主题的一些随机.mp3)http://podcast.cbc.ca/mp3/podcasts/asithappens_20160907_50906.mp3

我看到的差异:Apple的url实际上是某种“播放列表”,而第二种是简单的“文明”.mp3。在链接的末尾没有更多的安全mambo-jumbo。

为什么我的网址不会播放?我是否需要针对安全性做一些特定的事情?现在,我只是天真地“嘿,AVURLAsset ......这是我的(整个)网址......用它做你的东西......”

1 个答案:

答案 0 :(得分:0)

找到它。

我收到的链接只有一次有效。显然,这就是为什么“安全”在他们的最后到位。

在Safari中测试一个并且“看到它工作”使它无效。随后,在app结果中尝试相同的结果是.isPlayable = false。 简单地请求&在应用程序中直接使用会导致.isPlayable = true。

所以AVURLAsset + AVPlayerItem + AVPLayer工作正常。我只是个傻瓜。