【问题标题】:How to use AVQueuePlayer?如何使用 AVQueuePlayer?
【发布时间】:2018-02-09 13:41:11
【问题描述】:

我想在 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() 数组时,那里什么都没有。

这是预期的行为吗?如何完成我的任务?

【问题讨论】:

    标签: ios video avplayer avplayeritem avqueueplayer


    【解决方案1】:

    好吧,让我认为代码是这样的。

    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 的 App 项目并在您的 ViewController 中替换它,然后构建并运行:)

    【讨论】:

    • 尝试新的代码更改 :) 希望对您有所帮助。
    【解决方案2】:

    问题可能出在您的媒体上。 iOS 上的AVPlayer 不支持直接播放.ts 文件。这些必须包含在 HLS 播放列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多