0

我的公司需要一个视频应用程序,所以我昨天开始工作。

你可以看到这个 avplayer 的代码:

// to get palying time
-(void)addProgressObserver{
    __weak typeof(self) weakSelf = self ;
    //这里设置每秒执行一次
    [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
        double current=weakSelf.player.currentItem.duration.value/weakSelf.player.currentItem.duration.timescale*1.0;
        weakSelf.playerProgressDuration = current ;
    }];
}

// to get total time
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    AVPlayerItem *playerItem=object;
    if ([keyPath isEqualToString:@"status"]) {
        AVPlayerStatus status= [[change objectForKey:@"new"] intValue];
        if(status==AVPlayerStatusReadyToPlay){
            self.playerTotalDuration = playerItem.duration.value / playerItem.duration.timescale * 1.0 ;
        }
    }
}

你可以看到这段代码。方法'addProgressObserver'可以获得播放时间:

weakSelf.playerProgressDuration = current ;

KVO 方法可以监听一个属性(属性的名称是'status'),并获取视频的总时间:

self.playerTotalDuration = playerItem.duration.value  / playerItem.duration.timescale * 1.0 ;

但是,构建此代码并运行 ipad 3 (ios 8.1),我可以找到一个问题:

视频播放完成,但self.playerProgressDuration不能等于self.playerTotalDuration!

于是我加了一条通知:AVPlayerItemDidPlayToEndTimeNotification,但是通知无法执行!

问题: 1、视频播放完毕,为什么self.playerProgressDuration不能等于self.playerTotalDuration?2、视频播放完毕,为什么不执行通知?

请帮助我,谢谢。

4

1 回答 1

0

答: 1、请使用 double 或 int_64 ;2、因为通知的对象存在错误!请将 nil 或 AVPlayerItem 设置为通知对象,不能将 AVPlayer 设置为通知对象!

于 2016-02-19T08:30:01.037 回答