如何使用URL数组在AVPlayer中播放本地视频?

时间:2017-09-18 18:01:11

标签: ios url video avplayer avplayerviewcontroller

我正在开发一个iOS应用程序,我希望能够在从表格视图中选择一行时播放本地视频文件。在选择一个单元格行之后,它会转移到应该播放视频的AVPlayerViewController,但是在执行segue并且呈现AVPlayerViewController之后,它包含的AVPlayer保持空白。所有控件都显示但播放器呈现空白。球员没有参加比赛的原因是什么?我已将我的所有视频添加到文件夹中,并将该视频文件夹添加到我的主要包中,因此我不确定为什么播放器不播放视频。任何关于如何让玩家玩和工作的建议将不胜感激。我还在故事板中触发了segue到AVPlayerViewController,并且每次点击一个单元格时都会进行segra。

加载视频的代码:

local_markets

呈现播放器的代码:

 import UIKit
 import AVKit
 import AVFoundation

  class DrillsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


var playerViewController = AVPlayerViewController()
var player = AVPlayer()
var videoURL = [URL]()
var videoUrl = [URL]()
var drillVid = URL(fileURLWithPath: String())

override func viewDidLoad() {
    super.viewDidLoad()
videoUrl = [URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallBBw:Pound.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallBtwLegwPound.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallCrosswPound.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallHiLo.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/OneBallThruHoop.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallIOw:Wiper.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallJuggle.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallInOut.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallWiper.mp4"),URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwpBallOverDribble.mp4")]


    tableView.delegate = self
    tableView.dataSource = self }

显示AVPlayerViewController的代码,它的播放器应该播放视频,但是没有播放它只是空的:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

drillVid = videoUrl[indexPath.row]

    return cell
}

1 个答案:

答案 0 :(得分:2)

[URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BHB DrillVids/TwoBallBBw:Pound.mp4")

不是你如何在你的包中获得文件..

它是let path = Bundle.main.path(forResource: "Pound", ofType: "mp4")

示例:添加"视频"使用.mp4格式的项目。选择视频,然后在右侧面板中,将目标设为您的应用。这会将视频添加到您的Main-Bundle。

在故事板中,添加一个按钮。添加AVPlayerController。控制+单击该按钮并将其拖动到AVPlayerController。

enter image description here

在View Controller代码中,覆盖函数prepareForSegue。获取目的地并设置player以通过抓住视频路径来播放视频..

enter image description here enter image description here enter image description here

代码如下:

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destination = segue.destination as! AVPlayerViewController

        let url = URL(fileURLWithPath: Bundle.main.path(forResource: "Video", ofType: "mp4")!)
        destination.player = AVPlayer(playerItem: AVPlayerItem(url: url))
        destination.player?.play()
    }

}

当您运行代码并按下按钮时,它将播放视频。我自己在iPhone 6S,iOS 11上进行了测试。