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

11

我正在尝试通过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的原因,但我不知道如何解决这个问题。


你的应用程序是否有App Transport Security设置,以允许非安全的http:// URL? - Tom Harrington
3个回答

2
问题似乎出在应用程序传输安全性上,启用后,在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放置了断言失败),但仍然出现相同的错误。 - Can Poyrazoğlu
@CanPoyrazoğlu:我应该工作的,好吧,还有一种情况可能会失败,就是将你传递给AVURLAsset(url:URL)的URL与使用示例生成的URL(例如:let url = yourVideoURLString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed))相匹配。因为链接中的无效字符也可能导致问题。 - Bharath
3
有趣。没有任何非字母数字字符,它们看起来像(我在这里混淆了真正的URL)https://abc123.cloudfront.net/abc123456。没有需要转义的内容,没有片段,也无需编码/解码。但是我仍然会收到这个错误。 - Can Poyrazoğlu
这里有人解决了吗? - Benjamin Gruenbaum

1

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


0

我曾经遇到过同样的问题,我们尝试在服务器端设置所有头文件为不活动/活动

最终使用unset range将其设置为不活动,然后问题得以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接