使用 AVURLAsset + AVPlayerItem + AVPLayer 流式传输 .mp3
Posted
技术标签:
【中文标题】使用 AVURLAsset + AVPlayerItem + AVPLayer 流式传输 .mp3【英文标题】:Streaming .mp3 with AVURLAsset + AVPlayerItem + AVPLayer 【发布时间】:2017-05-03 14:45:53 【问题描述】:我有一个网址。它看起来像这样:
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/bipbop_4x3_variant.m3u8
或
(来自另一个 *** 主题的一些随机 .mp3)http://podcast.cbc.ca/mp3/podcasts/asithappens_20160907_50906.mp3
我看到的差异:Apple 的 url 实际上是某种“播放列表”,而第二个是简单的“文明”.mp3。链接末尾不再有安全 mambo-jumbo。
为什么我的网址无法播放?我需要对安全性做一些具体的事情吗?现在,我只是天真地“嘿,AVURLAsset……这是我的(整个)网址……用它做你的事情……”
【问题讨论】:
嗯,您提供的工作示例没有 url 属性。您的请求是否被网络服务器或其他东西重定向,而不是直接指向文件? 【参考方案1】:找到了。
我收到的链接只有一次有效。显然这就是为什么在它们的末尾有“安全性”的原因。
在 Safari 中测试一个并“看到它有效”会使它失效。随后,在应用程序结果中尝试相同的是 .isPlayable = false。 直接在应用程序中请求和使用会导致 .isPlayable = true。
所以 AVURLAsset + AVPlayerItem + AVPLayer 工作得很好。我只是一个该死的傻瓜。
【讨论】:
以上是关于使用 AVURLAsset + AVPlayerItem + AVPLayer 流式传输 .mp3的主要内容,如果未能解决你的问题,请参考以下文章
使用多个音频类型的 AVAsset 轨道切换 AVURLAsset 的音轨
为啥我不能在 Playground 中使用 AVURLAsset 从媒体文件中提取数据?