Ios AVPlayer不播放HLS直播流

Ios AVPlayer不播放HLS直播流,ios,swift,avplayer,live-streaming,http-live-streaming,Ios,Swift,Avplayer,Live Streaming,Http Live Streaming,我有HLS直播的问题。有时,当我通过代码创建AVPlayer时: if let mediaUrl = URL(string: obj.message.replacingOccurrences(of: ".mpd", with: ".m3u8")) { // load movie via url self.player = AVPlayer(url: mediaUrl) let layer = AVPlayerLayer(player: self.player) self.

我有HLS直播的问题。有时,当我通过代码创建AVPlayer时:

    if let mediaUrl = URL(string: obj.message.replacingOccurrences(of: ".mpd", with: ".m3u8")) {
  // load movie via url
  self.player = AVPlayer(url: mediaUrl)
  let layer = AVPlayerLayer(player: self.player)
  self.streamView.layer.addSublayer(layer)
  // set stream view where will be shown stream
  layer.frame = self.streamView.layer.bounds
  self.player.play()
}
我有没有流和错误的空白屏幕,但当我锁定设备和解锁,然后流开始

当我尝试播放流时,这种情况每10/20次出现一次


有什么建议吗?

尝试创建AVPlayer的新对象,不要使用AVPlayer的sharedInstance,然后检查

意味着始终创建AVPlayer的新对象,不要使用self.player


然后检查。

验证是否填充了您的
mediaUrl
。尝试流式传输Apple的示例实时流:

这对我来说很好(但我没有实现您的streamView)


原因可能是视频中的元数据错误。看看我回答的这个帖子:AVPlayer HLS live stream IOS

转码后的视频需要有配置文件基线才能在AVPlayer中播放。有关详细信息,请参阅ffmpeg转码命令:


我也有同样的问题,查看日志发现我的流式url不安全。这就是ATS(应用程序传输安全)问题。 通过在info.plist中添加ATS特定KVP解决了该问题

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads

self.player
是我的类变量,不是AVPlayer实例。是的,请不要将类变量用于AVPlayer。总是在方法中创建新的,然后检查。在多次测试之后,我得到了与类变量相同的效果
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>