無限にループするビデオクリップを再生しようとしています。私はこれをAppleが推奨する方法で行っています。AVPlayerItemDidPlayToEndTimeNotificationによってトリガーされる通知を設定することによって:
@property(nonatomic) AVPlayer *videoPlayer;
@property(nonatomic) AVPlayerItem *videoPlayerItem;
-(void)loadVideo
{
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:extension];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
NSString *tracksKey = @"tracks";
[asset loadValuesAsynchronouslyForKeys:@[tracksKey] completionHandler:
^{
dispatch_async(dispatch_get_main_queue(),
^{
NSError *error;
AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];
if (status == AVKeyValueStatusLoaded)
{
[self setVideoPlayerItem:[AVPlayerItem playerItemWithAsset:asset]];
[videoPlayerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (videoPlayerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:videoPlayerItem];
[self setVideoPlayer:[AVPlayer playerWithPlayerItem:videoPlayerItem]];
[scenePlayerView setVideoPlayer:videoPlayer];
}
});
}];
}
トリガーされると、これは私のメソッドを呼び出して、クリップを効果的に巻き戻して再度再生します。
-(void)videoPlayerItemDidReachEnd:(NSNotification *)notification
{
[videoPlayerItem seekToTime:kCMTimeZero];
[videoPlayer play];
}
問題は、このメソッドにヒットして最初にループバックするたびに、ビデオ再生に短いが目に見える一時停止があることです。
ビデオクリップはH.264であり、コンテンツに目に見える「スキップ」がないことを確認するために他のプレーヤーでテストされています。これはすべて、シミュレーターとiPad2およびiPad3の両方のiOS6で発生しています。
私は何が間違っているのですか?