Проблема с получением пути к подпапке в основном комплекте в AVPlayer - PullRequest
0 голосов
/ 07 ноября 2018

Я улучшаю код, который у меня есть для моего проекта.

Я застрял в процессе вызова видео по подпапкам, потому что код читает все файлы mp4, которые он находит.

Применение различных кодов, которые я нашел в интернете, но в итоге я безуспешно нарушаю весь код. Буду признателен за помощь или совет в этом отношении.

Прикрепленное изображение, на котором показано расположение папок с разными видео, которые я хотел бы разделить для просмотра основных и промежуточных папок. импорт UIKit импорт AVKit импорт AVFoundation

class BasicLevel: UIViewController, UITableViewDataSource, UITableViewDelegate, AVPlayerViewControllerDelegate{

    var videoArray = [String]()

    @IBOutlet weak var videoView: UIView!
    @IBOutlet weak var videoTableView: UITableView!

    var videoVC = AVPlayerViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        videoTableView.delegate = self
        videoTableView.dataSource = self

        videoView.addSubview(videoVC.view)
        videoVC.view.frame = videoView.frame
        videoVC.showsPlaybackControls = false

        let filemanager = FileManager.default
        let path = Bundle.main.resourcePath!

        let allItems = try? filemanager.contentsOfDirectory(atPath: path)

        for singleItem in allItems! {
            if singleItem.hasSuffix("mp4") {
                videoArray.append(singleItem)
            }
        }

        if videoArray.count > 0 {
            playTopVideo(value: 0)
        }
    }

    func playTopVideo(value: Int) {
        let nameComponent = videoArray[value].components(separatedBy: ".")
        let name = nameComponent[0]

        let path = Bundle.main.path(forResource: name, ofType: "mp4")
        let url = URL(fileURLWithPath: path!)


        videoVC.player = AVPlayer(url: url)

        videoVC.player?.play()
    }
}

1 Ответ

0 голосов
/ 07 ноября 2018

Прежде всего вы несете ответственность за создание структуры каталогов пакета, поэтому не путайте ее.

Во-вторых, используйте API, связанный с URL.

Например, поместите все файлы mp4 в подкаталог с именем videos. Крайне важно создать настоящую папку синяя , а не групповую (желтую) папку.

Это уменьшит ваш код до

var videoArray = [URL]()

override func viewDidLoad() {
    super.viewDidLoad()

    videoTableView.delegate = self
    videoTableView.dataSource = self

    videoView.addSubview(videoVC.view)
    videoVC.view.frame = videoView.frame
    videoVC.showsPlaybackControls = false

    videoArray = Bundle.main.urls(forResourcesWithExtension: "mp4", subdirectory: "videos")!
    playTopVideo(value: 0)
}

func playTopVideo(value: Int) {
    let videoURL = videoArray[value]
    videoVC.player = AVPlayer(url: videoURL)
    videoVC.player?.play()
}
...