AVPlayer.playが描画されないことがあります
やりたいことは
iOSで
AVPlayerで動画を再生し
最後まで再生されたら
リピートフラグの変数を見て
必要があれば再度頭から再生する
というだけです。
ですが、数百回に1回くらいのかなりまれな確率で
画面的には最後まで再生された所で止まり
しかし動画の尺の秒数後にまた動き出す
ということが起きます。
それは動画の秒数きっかりです。
何故動画の秒数きっかりと判断したか、という点ですが
複数台のipadを横において同じ動画を再生する同じコードを走らせており
ぴったり同時に再生開始し
iPad1では例えば3秒の動画の再生を繰り返しており
iPad2でも同様に揃って動いているが、その問題が起きた時は
iPad2だけ3秒間動画の最後のフレームで止まり、次のループの時にはiPad1とピッタリ同時にまた頭から再生しはじめたため
止まっていた時間は動画の尺の分であると判断できます。
動画ファイルはネット上のものではなく、カメラロールに入っているものです。
これは確率は低いものの何度か現象を見ており再現はしています。
コードの一部は以下です。特別なことはしていない認識です・・・。
// 再生時にViewControllerから動画URLを渡して呼んでいる
- (void)setPlayerWithURL:(NSURL *)url
{
self.player = [[AVPlayer alloc]initWithURL:url];
[(AVPlayerLayer*)self.playerView.layer setPlayer:self.player];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[self.player currentItem]];
}
// 再生完了時
- (void)playerItemDidReachEnd:(NSNotification *)notification
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"notification recieve");
if (self.isRepeat)
{
NSLog(@"notification replay");
[self.player seekToTime:kCMTimeZero];
[self.player play];
}
});
}
見た目上は1回分再生が止まっているものの、次のループには動き出すので、描画が止まっているだけで内部的には動いていると思っていますが
色々調べたものの、そのような現象や対策を発見できませんでした。
環境としては
iPad Air 2 Wi-Fiモデル 16GB MGLW2J/A
OS8.4
です。
ただし過去にもOSのバージョンが古い時にも起きておりこのバージョンのみの現象でないです。
そして端末もiPad限定ではなくiPhoneでも起きています。
対策などご存知の方おられましたらご教授いただけますとありがたいです。