簡體   English   中英

AVPlayer 不播放 HLS 直播

[英]AVPlayer not play HLS live stream

我對 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 次發生一次。

有什么建議?

我遇到了同樣的問題,通過日志發現我的流媒體網址不安全。 所以這是 ATS(應用程序傳輸安全)問題。 通過在 info.plist 中添加 ATS 特定 KVP 解決了該問題

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

驗證您的mediaUrl已填充。 嘗試流式傳輸 Apple 的示例直播: https : //devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8

這對我來說運行良好(雖然我沒有實現你的流視圖)

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()
    }
}

原因可能是視頻中的元數據錯誤。 看看我回答的這個線程:AVPlayer HLS live stream IOS

轉碼后的視頻需要有配置文件基線才能在 AVPlayer 中播放。 詳細看ffmpeg轉碼命令:

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

嘗試創建 AVPlayer 的新對象,不要使用 AVPlayer 的 sharedInstance 然后檢查。

意味着總是創建 AVPlayer 的新對象,不要使用 self.player。

然后檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM