iOS - AVPlayer seekToTime重新启动currentItem的播放 [英] iOS - AVPlayer seekToTime restarts playback of currentItem

查看:1440
本文介绍了iOS - AVPlayer seekToTime重新启动currentItem的播放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做一个使用AVPlayer的应用程序。在我的一个视图中,我有一个UISlider,用户应该能够向前和向后擦洗。我有一些麻烦获得 seekToTime 按我想要的工作。当我尝试改变时间播放从0开始,我不知道如何解决这个问题。我当前的实现是这样的:

  [self.progressSlider addTarget:self action:@selector(sliderValueChanged)forControlEvents:UIControlEventValueChanged]; 

[self.progressSlider addTarget:self action:@selector(sliderReleased)forControlEvents:UIControlEventTouchUpInside];


- (void)sliderValueChanged {

[...]
[播放器暂停];

}

- (void)sliderReleased {

float timeInSecond = self.progressSlider.value;

timeInSecond * = 1000;

//我有trie硬编码这个值,但我得到相同的结果。
CMTime cmTime = CMTimeMake(timeInSecond,NSEC_PER_SEC);

[player.currentItem seekToTime:cmTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished){

if(finished){
[player play] ;
}
}];
}

对我做错了什么想法?



可以提到我使用AVPlayer的<:code> playerItemWithURL 流式传输音频。

NSEC_PER_SEC 是1,000,000,000,因此 CMTimeMake(timeInSecond,NSEC_PER_SEC)将是一个非常小的数字(除非 timeInSecond 是可笑的巨大) - 事实上,它会随机接近零,这正是你的体验。



只要清楚: CMTimeMake 定义一个有理数。你给分子和分母。如果你的分母是巨大的,理性数将是微小的。


I'm making an app that uses AVPlayer. In one of my views I have a UISlider with which the user should be able to scrub forward and backward. I'm having some trouble getting seekToTime to work as I want. When I try to change time the playback starts from 0, and I'm not sure how to solve this. My current implementation looks like this:

[self.progressSlider  addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged];

[self.progressSlider  addTarget:self action:@selector(sliderReleased) forControlEvents:UIControlEventTouchUpInside];


- (void)sliderValueChanged {

    [...]
    [player pause];

}

- (void)sliderReleased {

    float timeInSecond = self.progressSlider.value;

    timeInSecond *= 1000;

    // I have trie to hard code this value, but I get the same result.
    CMTime cmTime = CMTimeMake(timeInSecond, NSEC_PER_SEC);

    [player.currentItem seekToTime:cmTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) {

        if (finished) {
            [player play];
        }
    }];
}

Any ideas on what I'm doing wrong?

Can mention that I stream audio using AVPlayer's: playerItemWithURL if that makes any difference.

解决方案

One problem is that NSEC_PER_SEC is 1,000,000,000, so CMTimeMake(timeInSecond, NSEC_PER_SEC) is going to be a really tiny number (unless timeInSecond is ridiculously huge) - in fact, it will be arbitrarily close to zero, which is exactly what you are experiencing.

Just to be clear: CMTimeMake defines a rational number. You are giving a numerator and a denominator. If your denominator is huge, the rational number will be tiny.

这篇关于iOS - AVPlayer seekToTime重新启动currentItem的播放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆