21

我想启动、暂停和停止(与重新启动相同)我的 mp3 文件,我正在使用 AVPlayer。我从服务器获取文件。

要开始我做的这首歌:

[self.player start];

暂停我做:

[self.player pause];

但是当我想停止歌曲并重新加载它,以便用户下次单击“开始按钮”时歌曲从头开始,我不知道该怎么做。

我试过这样的事情:

[self.player pause];
self.player = nil;

但是随后播放器当然为零,如果没有新的初始化,我将无法再次重新启动文件。任何想法如何阻止它?

4

6 回答 6

44

使用停止视频[player pause]

然后在开始视频时使用此代码。

[player seekToTime:kCMTimeZero];
[player play];

我比解决 OP it b/c 的评论更喜欢它,它消除了警告并使用了常量。

于 2016-04-12T23:05:01.753 回答
15

在 Swift < 4 中执行此操作的最佳解决方案:

player.seek(to: kCMTimeZero)
player.play()

斯威夫特 >= 4:

player.seek(to: .zero)
player.play()
于 2017-12-15T00:37:02.497 回答
2

seek#to 有一个完成处理程序。

p?.seek(to: .zero)
p?.rate = 1

是不正确的。你可以得到音频抖动

p?.seek(to: .zero) { [weak self] _ in
    self?.p?.rate = 1
}

可能是你想要的。

如果它已经在播放,而您只进行搜索而不做其他任何事情,那么您可能会再次感到不安。

你可能最好

p?.rate = 0
p?.seek(to: .zero) { [weak self] _ in
    self?.p?.rate = 1
}

如果它是一个非常重要的应用程序,您还必须考虑查找完成中的错误情况。

于 2020-02-17T16:11:12.807 回答
2
  • 在 Xamarin.ios

player.Seek(CoreMedia.CMTime.Zero);

播放器.Play();

于 2018-05-01T19:14:34.647 回答
1

在斯威夫特 4 中:self.player.seek(to: CMTime.zero)

于 2018-12-25T05:14:50.640 回答
-1
// If conti. play Video or audio apply this code



 [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd
                                                 :)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[avPlayer currentItem]];
[avPlayer play];




 - (void)playerItemDidReachEnd:(NSNotification *)notification
{

NSLog(@"Replay video in method");
AVPlayerItem *p = [notification object];
[p seekToTime:kCMTimeZero];
  }
于 2018-07-20T08:59:05.603 回答