簡體   English   中英

“advanceToNextItem()”不允許循環播放所有視頻

[英]"advanceToNextItem()" doesn't allow to loop through ALL videos

我有自動播放視頻剪輯序列,循環行為建立在KVO 但是,除了自動播放之外,我還想使用NSButton推進所有剪輯。 因此,如果我在序列自動播放時按下“ Next Video按鈕,此操作會將我推進到隊列中的下一個剪輯。 但它沒有以正確的方式工作。

問題是:當隊列結束時,隊列中的所有剪輯都沒有循環。 只有第一個剪輯有一個循環(如果我按下Next Video按鈕 10 次 –只有第一個剪輯循環 10 次),之后所有剪輯都會正常自動播放。

問題如何(前進時)使用 NSButton 循環播放所有視頻

這是我的代碼:

import Cocoa
import AVFoundation
import AVKit

class ViewController: NSViewController {

    @IBOutlet weak var avPlayerView: AVPlayerView!
    @IBOutlet weak var nextVideoButton: NSButton!
    @objc private let player = AVQueuePlayer()
    let clips = ["One", "Two", "Three", "Four"]
    private var token: NSKeyValueObservation?

    override func viewDidAppear() {
        super.viewDidAppear()
        addAllVideosToPlayer()
    }

    func addAllVideosToPlayer() {
        avPlayerView.player = player
        for clip in clips {
            let urlPath = Bundle.main.path(forResource: clip, ofType: "mov")!
            let url = URL(fileURLWithPath: urlPath)
            let playerItem = AVPlayerItem(url: url)
            player.insert(playerItem, after: player.items().last)

            token = player.observe(\.currentItem) { [weak self] player, _ in
                if self!.player.items().count == 1 { self?.addAllVideosToPlayer() }
            }
            player.play()
            avPlayerView.controlsStyle = .none
        }
    }

    @IBAction func nextVideo(_ sender: Any) {
        var number: Int = 0
        let clip = clips[number]

        let urlPath = Bundle.main.path(forResource: clip, ofType: "mov")!
        let url = URL(fileURLWithPath: urlPath)
        let playerItem = AVPlayerItem(url: url)
        player.insert(playerItem, after: player.items().last)

        player.advanceToNextItem()
        number += 1

        if number >= clips.count {
            number = 0
            player.advanceToNextItem()
            number += 1
        }
    }
}

這是我的視圖控制器:

在此處輸入圖片說明

您始終可以在此處訪問第一個視頻:

  var number: Int = 0
  let clip = clips[number]

數字始終為零。 將其保留為類的成員,並在需要時進行更新。

這是我的問題的解決方案(感謝@giorashc):

class ViewController: NSViewController {

    var number: Int = 0                                         // class member

    .........................................
    .........................................

    @IBAction func nextVideo(_ sender: Any) {

        let clip = clips[number % 4]                            // modulus of 4   

        let urlPath = Bundle.main.path(forResource: clip, ofType: "mov")!
        let url = URL(fileURLWithPath: urlPath)
        let playerItem = AVPlayerItem(url: url)
        player.insert(playerItem, after: player.items().last)
        player.advanceToNextItem()
        number += 1
    }
}

暫無
暫無

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

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