无法通过 AVPlayer 通过 HTTP 播放 mp3 文件

Posted

技术标签:

【中文标题】无法通过 AVPlayer 通过 HTTP 播放 mp3 文件【英文标题】:Can't play mp3 file over HTTP via AVPlayer 【发布时间】:2017-09-26 19:03:52 【问题描述】:

我正在尝试通过 AVPlayer 播放 MP3 文件:

let url = URL(string: "http://transom.org/wp-content/uploads/2004/03/stereo_40kbps.mp3?_=7")!
let asset = AVURLAsset(url: url)
let item = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: item)
player.play()

但是我得到了下一个日志:

2017-09-26 21:57:07.906598+0300 MyApp[7558:1177816] CredStore - performQuery - Error copying matching creds.  Error=-25300, query=
    class = inet;
    "m_Limit" = "m_LimitAll";
    "r_Attributes" = 1;
    sync = syna;

我猜是因为 ios 11 和 Xcode 9,但我不知道如何解决这个问题。

【问题讨论】:

您的应用是否有应用传输安全设置以允许不安全的http:// URL? 【参考方案1】:

问题似乎出在 App Transport 安全性上,启用它后,它在 iOS 11 中的以下代码集运行良好, 此外,您提供的上述 URL 似乎有关联的 https 链接,请使用 https 链接或允许应用程序传输安全

let avPlayerVC = AVPlayerViewController()
        let url = URL(string: "https://transom.org/wp-content/uploads/2004/03/stereo_40kbps.mp3?_=7")!
        let asset = AVURLAsset(url: url)
        let item = AVPlayerItem(asset: asset)
        let player = AVPlayer(playerItem: item)
        avPlayerVC.player = player

        present(avPlayerVC, animated: true) 
            player.play()
        

但在这里我使用了 AVPlayerViewController 并使用了与您在代码中使用的相同的 AVPlayer 实例。 我不知道你在你的情况下是如何使用 AVPlayer 的,但是上面的情况很好。

【讨论】:

我正在使用 AVPlayer,并且我的视频已经通过 HTTPS 提供(我什至为 HTTP 设置了一个断言失败,只是为了确定),但仍然遇到同样的错误。 @CanPoyrazoğlu :我应该已经工作了,好吧,可能还有另一种可能失败的情况,使用示例生成的 url 制作传递给 AVURLAsset(url: URL) 的 url(示例:让 url = yourVideoURLString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) )。因为链接中的无效字符也可能导致问题。 有趣。没有任何非字母数字字符,它们看起来都像(我在这里混淆了真实的 URL)https://abc123.cloudfront.net/abc123456。没有什么可以逃脱,没有片段,没有什么可以编码/解码。但我仍然收到此错误。 这里有人弄清楚了吗?【参考方案2】:

同样的错误。 我已经解决了服务器端工作。 从 http 响应中删除 HSTS 标头“Strict-Transport-Security: max-age=31536000”,消除错误并正常工作。我不知道原因.. 请求:https://abc.../aaaa.mp3

【讨论】:

【参考方案3】:

我也遇到过同样的问题,我们尝试将服务器端的所有标头设置为 inactive/active

最后将unset range 设置为inactive,然后它就起作用了。

【讨论】:

以上是关于无法通过 AVPlayer 通过 HTTP 播放 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

设备自动锁定时,AVPlayer 无法在 iPad 上运行

是否可以强制 AVPlayer 停止在外部播放视频(在 Apple TV 上)

AVPlayer 无法在 iOS 9 上播放

分块解密媒体文件并通过 AVPlayer 播放

如何在 tableViewCell 中控制 AVPlayer(通过滑块和搜索播放、暂停、进度)?

AVPlayer 视频播放