2017-05-19 81 views
1

我有一個名爲Intro.m4v的視頻文件,這對我的應用程序目標的目標成員(以及影片本身從iPhone是直的,所以我敢肯定這是iPhone支持)。AVPlayer與AVPlayerLayer不玩視頻

我想播放視頻如下(self.videoContainer是我的視圖控制器中的全屏視圖,並且雙重檢查,它不是nil。此外,播放器和播放器層是我的視圖控制器類中強烈引用的實例變量):

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

但是,沒有什麼比賽。我所看到的全部是我的視頻容器視圖的背景顏色(以及它前面的所有視圖,以此方式)。我究竟做錯了什麼?

+1

是在應用程序捆綁您的視頻?一旦嘗試將'didload'的代碼放在'willAppear'或'didAppear'中! – Lion

+0

也許,問題是''AVPlayerLayer的規模仍然是零,當你執行'[遊戲玩家]'?如果你在'viewDidAppear:'開始播放,怎麼辦? –

+0

@Lion是的,我只是回答我的問題,當你寫的評論:)它被捆綁和網址,看到我的回答如下有關。 –

回答

2

你的URL應該是這樣的,如果你的視頻是在一個包:

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

嘗試這個

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

    } 
+0

我不使用播放器視圖控制器,我試圖在我的自定義視圖控制器中顯示視頻作爲背景。 –

1

哎呀發現自己的問題。我用[NSURL fileURLWithPath:@"Intro.m4v"]而我不得不使用[NSBundle mainBundle] URLForResource:@"Intro" withExtension:@"m4v"]

固定的URL解決了這個問題。

+1

我甚至不認爲這部分:) –

+0

@ArtemStepanenko燁的,但您的評論也有利於在許多情況下,作爲層/視圖大小爲零是一個非常普遍的問題:) –