繁体   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