带有 AVPlayerLayer 的 AVPlayer 不播放视频

AVPlayer with AVPlayerLayer not playing video

我有一个名为 Intro.m4v 的视频文件,它在我的应用程序目标上有一个目标成员资格(视频本身直接来自 iPhone,所以我很确定它是 iPhone-支持)。

我正在尝试按如下方式播放视频(self.videoContainer 是我的视图控制器中的全屏视图,仔细检查,它不是 nil。另外,播放器和播放器层是我的视图控制器中的强引用实例变量 class):

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    player = [AVPlayer playerWithURL:[NSURL fileURLWithPath:@"Intro.m4v"]];
    playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
    playerLayer.frame = self.videoContainer.layer.frame;
    [self.videoContainer.layer addSublayer:playerLayer];

}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [player play];
}

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    playerLayer.frame = self.videoContainer.layer.frame;
}

但是,没有播放任何内容。我所看到的只是我的视频容器视图的背景颜色(以及它前面的所有视图,以这种方式)。我做错了什么?

试试这个

func playVideo(urlString: String, location : Int) {        
        let videoURL = URL(string: urlString)
        let player = AVPlayer(url: videoURL!)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }

    }

糟糕,我自己发现了问题。我使用的是 [NSURL fileURLWithPath:@"Intro.m4v"] 而我不得不使用 [NSBundle mainBundle] URLForResource:@"Intro" withExtension:@"m4v"].

修复 URL 解决了问题。

如果您的视频是捆绑包,您的 URL 应该是这样的:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Intro" ofType:@"m4v"];
NSURL *yourVideoUrl = [NSURL fileURLWithPath:path];