簡體   English   中英

如何使用 AVQueuePlayer?

[英]How to use AVQueuePlayer?

我想從 iOS 上的遠程服務器播放一組視頻文件。 我不想使用 HLS 播放列表。

我正在嘗試使用 AVQueuePlayer。 這是我初始化它的方法:

let url = URL(string: "https://example.com/video.ts")! // 10 second video
let item = AVPlayerItem(url: url)
let player = AVQueuePlayer(items: [item])
player.play()

當我在屏幕上顯示此播放器時,使用 AVPlayerLayer 和自定義視圖或使用 AVPlayerViewController,它只顯示加載圖標而沒有內容。 當我幾秒鍾后檢查player.items()數組時,那里什么也沒有。

這是預期的行為嗎? 如何完成我的任務?

好吧,讓我認為代碼是這樣的。

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AVQueuePlayer?
    private var playerLayer: AVPlayerLayer?

    override func viewDidLoad() {
        super.viewDidLoad()
        super.view.backgroundColor = UIColor.lightGray

        // Video file for demo
        let mediaPath = URL(fileURLWithPath:Bundle.main.path(forResource: "ChoppedBipBop", ofType: "m4v")!)

        startDemoVideo(videoURL: mediaPath)
    }

    public func startDemoVideo(videoURL: URL) {
        player = AVQueuePlayer()
        playerLayer = AVPlayerLayer(player: player)

        guard let playerLayer = playerLayer else { fatalError("Error creating player layer") }
        playerLayer.frame = view.layer.bounds
        view.layer.addSublayer(playerLayer)

        let videoAsset = AVURLAsset(url: videoURL)

        videoAsset.loadValuesAsynchronously(forKeys: ["duration", "playable"]) {

            DispatchQueue.main.async {
                let loopItem = AVPlayerItem(asset: videoAsset)
                self.player?.insert(loopItem, after: nil)

                self.player?.play()
            }
        }
    }

}

編輯:我把我所有用於演示的代碼都放在我有一個本地文件視頻,所以你需要用一個 URL 請求對象替換,如果你想測試你可以用 Swift 創建一個單視圖應用程序項目並在你的 ViewController 中替換它然后構建並運行:)

問題可能出在您的媒體上。 iOS 上的AVPlayer不支持直接播放.ts文件。 這些必須包含在 HLS 播放列表中。

暫無
暫無

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

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