gpt4 book ai didi

ios - AVPlayer seekToTime 导致播放器停止播放

转载 作者:行者123 更新时间:2023-11-29 10:29:22 25 4
gpt4 key购买 nike

我有一个播放广播电台的 AVPlayer,并有一个我制作的快退按钮。当您倒带时,该方法被调用并且在大约 80% 的时间内工作,成功地将 AVPLayer 的当前时间设置为 X 秒。然而,另外 20% 的时间,AVPlayer 停止播放音频并且不会再次播放,直到应用程序被终止并重新打开。方法如下:

- (IBAction)rewind:(id)sender
{
CMTime cmTime = CMTimeMake(CMTimeGetSeconds(self.player.currentTime) - 1.0, 1);
CMTime almostZero = CMTimeMake(1, 2);
if (CMTimeGetSeconds(cmTime) > CMTimeGetSeconds(almostZero)) {
[self.player.currentItem seekToTime:cmTime];
}
}

就上下文而言,它是直播。

这是我的 15 秒倒带方法:

 if((self.currentPlaybackTime - 15.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 15.0f), self.player.currentTime.timescale)];
[self.player play];
} else if((self.currentPlaybackTime - 10.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 10.0f), self.player.currentTime.timescale)];
[self.player play];
} else if((self.currentPlaybackTime - 5.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 5.0f), self.player.currentTime.timescale)];
[self.player play];

} else if((self.currentPlaybackTime - 3.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 3.0f), self.player.currentTime.timescale)];
[self.player play];
} else if((self.currentPlaybackTime - 2.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 2.0f), self.player.currentTime.timescale)];
[self.player play];
} else if((self.currentPlaybackTime - 1.0f) > CMTimeGetSeconds(kCMTimeZero)) {
[self.player pause];
[self.player seekToTime:CMTimeMakeWithSeconds((self.currentPlaybackTime - 1.0f), self.player.currentTime.timescale)];
[self.player play];
}

- (NSTimeInterval)currentPlaybackTime
{
return CMTimeGetSeconds(self.player.currentTime);
}

当我记录方法和秒数时,您可以看到在第三次倒回时(音频总是停止并且不会重新开始),播放器实际上并没有倒退 15 秒,尽管 seekToTime 似乎到当前时间减去 15 秒有效。

2015-05-28 09:34:57.383 Lancers[78554:11732524] sec: 45
2015-05-28 09:34:58.382 Lancers[78554:11732524] sec: 46
2015-05-28 09:34:59.383 Lancers[78554:11732524] sec: 47
2015-05-28 09:35:00.383 Lancers[78554:11732524] sec: 48
2015-05-28 09:35:01.382 Lancers[78554:11732524] sec: 49
2015-05-28 09:35:02.237 Lancers[78554:11732524] CURRENT PLAYING TIME: 49.855237
2015-05-28 09:35:02.237 Lancers[78554:11732524] REWIND 15 SECONDS!
2015-05-28 09:35:02.293 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:02.293 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:02.305 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:02.305 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:02.305 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:02.472 Lancers[78554:11732524] sec: 35
2015-05-28 09:35:03.472 Lancers[78554:11732524] sec: 36
2015-05-28 09:35:04.473 Lancers[78554:11732524] sec: 37
2015-05-28 09:35:05.473 Lancers[78554:11732524] sec: 38
2015-05-28 09:35:06.473 Lancers[78554:11732524] sec: 39
2015-05-28 09:35:07.472 Lancers[78554:11732524] sec: 40
2015-05-28 09:35:08.473 Lancers[78554:11732524] sec: 41
2015-05-28 09:35:09.473 Lancers[78554:11732524] sec: 42
2015-05-28 09:35:10.473 Lancers[78554:11732524] sec: 43
2015-05-28 09:35:11.472 Lancers[78554:11732524] sec: 44
2015-05-28 09:35:12.472 Lancers[78554:11732524] sec: 45
2015-05-28 09:35:13.472 Lancers[78554:11732524] sec: 46
2015-05-28 09:35:13.771 Lancers[78554:11732524] CURRENT PLAYING TIME: 46.299634
2015-05-28 09:35:13.771 Lancers[78554:11732524] REWIND 15 SECONDS!
2015-05-28 09:35:13.821 Lancers[78554:11732524] sec: 31
2015-05-28 09:35:13.821 Lancers[78554:11732524] sec: 31
2015-05-28 09:35:13.833 Lancers[78554:11732524] sec: 31
2015-05-28 09:35:13.833 Lancers[78554:11732524] sec: 31
2015-05-28 09:35:13.833 Lancers[78554:11732524] sec: 31
2015-05-28 09:35:14.557 Lancers[78554:11732524] sec: 32
2015-05-28 09:35:15.557 Lancers[78554:11732524] sec: 33
2015-05-28 09:35:16.556 Lancers[78554:11732524] sec: 34
2015-05-28 09:35:16.870 Lancers[78554:11732524] CURRENT PLAYING TIME: 34.314164
2015-05-28 09:35:16.870 Lancers[78554:11732524] REWIND 15 SECONDS!
2015-05-28 09:35:16.898 Lancers[78554:11732524] sec: 34
2015-05-28 09:35:16.899 Lancers[78554:11732524] sec: 34

最佳答案

我正在猜测您的应用程序,但我认为问题可能出在流式音频的缓冲中。我在本地媒体上多次使用 AVPlayer,并且从未遇到过任何关于 seekToTime 的问题。

跳到无效时间会使您陷入困境,但从我在您的代码中看到的情况来看,您应该没问题。您的倒带代码试图向后移动 1 秒(不是 15 秒?),除非您在开始的 1/2 秒内,在这种情况下您不会寻找并继续玩。

我会在 rewind 方法中检查 AVPlayer 对象的状态(player.status、player.error),并查看调用 seekToTime 时发生了什么。还要使用调试器或 NSLog 检查 cmTime 变量的值和状态标志,以确保你在那里也很好。

关于ios - AVPlayer seekToTime 导致播放器停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com