AVPlayer无法播放HLS直播

时间:2018-07-23 13:33:22

标签: ios swift avplayer live-streaming hls

我对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次的情况。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,通过日志显示我的流URL不安全。因此,这就是ATS(应用程序传输安全性)问题。 通过在info.plist中添加ATS特定的KVP解决了该问题

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

答案 1 :(得分:0)

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

方法总是创建AVPlayer的新对象,不要使用self.player。

然后检查。

答案 2 :(得分:0)

验证您的mediaUrl已填充。尝试流式传输Apple的示例实时流:https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8

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

private var player: AVPlayer!

override func viewDidLoad() {
    super.viewDidLoad()
    if let mediaUrl = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8") {
        // load movie via url
        self.player = AVPlayer(url: mediaUrl)
        let layer = AVPlayerLayer(player: self.player)
        self.view.layer.addSublayer(layer)
        // set stream view where will be shown stream
        layer.frame = self.view.layer.bounds
        self.player.play()
    }
}

答案 3 :(得分:0)

原因可能是视频中的元数据错误。看看我回答的这个线程:AVPlayer HLS实时流IOS

已转码的视频需要具有配置文件基准,才能在AVPlayer中播放。查看ffmpeg转码命令以了解详细信息:

https://gist.github.com/chung-nguyen/d88e73e3cc8788878f5ffb8c232b4729