Swift AVPlayer中主捆绑包中的子文件夹的获取路径存在问题

Swift AVPlayer中主捆绑包中的子文件夹的获取路径存在问题,swift,avplayer,Swift,Avplayer,我正在改进我的项目代码 我坚持按子文件夹调用视频,因为代码读取所有mp4文件 应用我在互联网上找到的不同代码,但我最终破坏了所有代码,但没有成功。我将非常感谢您在这方面的帮助或建议 附加的图像显示了文件夹的位置,其中包含不同的视频,我想将我的视图基本文件夹和中间文件夹分开 导入UIKit 进口AVKit 进口AVF基金会 class BasicLevel: UIViewController, UITableViewDataSource, UITableViewDelegate, AVPlayer

我正在改进我的项目代码

我坚持按子文件夹调用视频,因为代码读取所有mp4文件

应用我在互联网上找到的不同代码,但我最终破坏了所有代码,但没有成功。我将非常感谢您在这方面的帮助或建议

附加的图像显示了文件夹的位置,其中包含不同的视频,我想将我的视图基本文件夹和中间文件夹分开 导入UIKit 进口AVKit 进口AVF基金会

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()
    }
}

首先,您负责创建捆绑包的目录结构,所以不要把它搞砸

其次,使用与URL相关的API

例如,将所有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()
}

在tableview中显示时,我留下了一个错误,它显示了扩展名;。func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{let cell=tableView.dequeueReusableCell(标识符为:“videocell”,for:indexPath)let videoName=videoArray[indexPath.row]let nameComponent=videoName.components(分隔为“-”)cell.textlab?.text=nameComponent[0]要仅显示URL的名称,请使用
let videoName=videoArray[indexPath.row].deletingPathExtension().lastPathComponent