2016-08-22 4 views
1

私は2つのビデオをユーザーに頻繁に表示する必要がある簡単なゲームを構築しています。私はちょうど私のviewcontrollerでそのビデオを再生したい。そのために私のコードは次のとおりです。AVPlayerはいくつかのアイテムを再生した後に再生できません

私は12〜15回までの問題に直面しておりませんように私はそれがこのように表示再生することができない多くのAVPlayerを果たし続けるときAVPlayerは時々のためにビデオを果たしている
let playerItem = AVPlayerItem(URL: NSURL.fileURLWithPath("\(vdoPath)")) //vdoPath will be random of that two local video files from bundle 
let player = AVPlayer(playerItem: playerItem) 
let playerViewController = AVPlayerViewController() 
playerViewController.player = player 
playerViewController.view.backgroundColor = UIColor.clearColor() 
playerViewController.showsPlaybackControls = false 
playerViewController.view.frame = self.playerView.bounds 
self.playerView.addSubview(playerViewController.view) 
self.addChildViewController(playerViewController) 
player.play() 

: なしあり私が言ったように私は12-15回再生することができますので、私のファイルとパスを発行してください。私に適切な解決策と理由を教えてください。

enter image description here

答えて

2

は、あなたはまだ、いつでも私に尋ねる動作していない場合は二回 を呼び出すのではなく、player.replacePlayerItem(item)を使用する必要があります。最初にAVPlayerに最初のビデオを再生させ、コントローラが完了するまで待ってから別のビデオを開始します。

+0

は、ビデオを再生するcompletation後、親コントローラからplayerViewControllerを削除するが必要があるのですか? –

+0

いいえ削除する必要はありません。 – JAck

+0

プレイヤーアイテムを変更するだけで、 – JAck

2

将来的にこの問題に直面している人々のために、@ JAckの解決策が機能しない場合は、ここで私のために働いた解決策があります。ところで、私の画面はちょうど黒でした。しかし、とにかく、私の根底にある問題は、AVPlayerとAVPlayerLayerのインスタンスが多すぎるということでした(Appleは明らかにこの数を上限にしています)。ビューコントローラーを解除するときにレイヤーを削除してプレイヤーを一時停止していましたが、プレーヤーはまだ保持されていました(私は推測しています)。だから、私の修正は、プレーヤインスタンスとプレーヤレイヤーインスタンスの両方をなくすことでした。ここに私のコードがあります:私のビューコントローラを却下する前に

var player: AVPlayer? 
var layer: AVPlayerLayer? 

右、私はこのスニペットを追加します。

DispatchQueue.main.async { 
     self.player?.pause() 
     self.player = nil 
     self.layer?.removeFromSuperlayer() 
     self.layer = nil 
} 
+0

埋め込みや削除されていないプレーヤやレイヤのインスタンスを見つける方法はありますか? – Baki

関連する問題