为 KVO
添加 AVPlayer
何时播放视频,因为 queuePlayer
是 AVPlayer
[self.queuePlayer addObserver:self forKeyPath:@"status" options:0 context:NULL];
observer
method
:-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"status"]) {
if (self.queuePlayer.status == AVPlayerStatusReadyToPlay) {
NSInteger step = (NSInteger)(startTimeForVideo/0.04);
[self.queuePlayer.currentItem stepByCount:step];
//CMTime seekTime = CMTimeMake(startTimeForVideo*timeScale,timeScale);
//if (CMTIME_IS_VALID(seekTime))
// [self.queuePlayer seekToTime:seekTime toleranceBefore:kCMTimePositiveInfinity toleranceAfter:kCMTimePositiveInfinity];
//else
// NSLog(@"In valid time");
[self.queuePlayer play];
} else if (self.queuePlayer.status == AVPlayerStatusFailed) {
/* An error was encountered */
}
}
这里
startTimeForVideo
初始 playBack time
for video
seekToTime
也不起作用 stepByCount
编辑 :
Values
中使用的 object
的 methods
是 correct
,即使 no luck
最佳答案
KVO
方法的变化,因为 queuePlayer
是 AVPlayer
:
if (self.queuePlayer.status == AVPlayerStatusReadyToPlay)
{
//firstly make cmtime as here startTimeForVideo is Float64 value in seconds
//get video's time scale as CMTime has it.
int32_t timeScale = self.queuePlayer.currentItem.asset.duration.timescale
CMTime seektime=CMTimeMakeWithSeconds(startTimeForVideo, timeScale);
//use this cmtime for seekToTime.
[self.queuePlayer seekToTime:seektime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
}
............
编辑 :这里是
kCMTimeZero
中的 tolerance field
for exact location
方法中的 seekToTime: toleranceBefore: toleranceAfter:
关于iphone - AVPlayer 设置初始播放时间 iOS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16118374/