質問: [[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でも起きています。 対策などご存知の方おられましたらご教授いただけますとありがたいです。
回答: 再生しているのは、httpで取得したm3u8の動画でしょうか? m3u8は複数のファイルから成り立っていますので、通信状況などでどれかが取得できないとき、 AVPlayerは復帰するまでしばらく待機するはずです。 再生が停止するということですが、playerのrateは0になっていますか? 0でなければ内部的には再生できていると思います。 あとは、statusはどうなっていますか? KVO使って、rateとstatusを監視し適切にハンドリングしたほうがいいと思います。 また、エラーは出てないでしょうか? ``` NSError * error = self.player.currentItem.error; if (error == nil) { AVPlayerItemErrorLog * log = [session.player.currentItem errorLog]; AVPlayerItemErrorLogEvent *event = [log events][0]; NSLog(@"エラー %@", log); NSLog(@"エラー URI %@", [event URI]); NSLog(@"エラー errorStatusCode %ld", (long)[event errorStatusCode]); NSLog(@"エラー errorDomain %@", [event errorDomain]); NSLog(@"エラー errorComment %@", [event errorComment]); }else{ NSLog(@"エラー %@", error); } ```