gpt4 book ai didi

iphone - AVPlayer 缓冲、暂停通知和海报帧

转载 作者:IT王子 更新时间:2023-10-29 08:18:08 25 4
gpt4 key购买 nike

我有一些与 AVPlayer 相关的问题:

  1. 当我们通过 [player pause] 暂停 AVPlayer 时,AVPlayer 是继续缓冲来自网络的视频还是它停下来?我无法在苹果的文档中获得与此相关的任何信息。另外,是否可以强制 AVPlayer 在暂停时保持缓冲,这样如果我们暂停的视频正在等待第一个视频结束,那么我们就不会在视频之间发现任何间隙?

  2. 在暂停 AVPlayer 时,我们可以在 [player pause] 上有任何事件。

  3. 我们可以在 AVPlayer 上显示静止图像几秒钟吗?

谢谢

最佳答案

1) AVPlayer 会在几种情况下缓冲视频,没有明确记录。我会说您可以在初始化视频和替换当前项目时进行缓冲。您可以观察 currentItem.loadedTimeRanges 以了解发生了什么。该属性会告诉您加载了哪些视频时间范围。

此外,还有一些其他的 currentItem 属性可以帮助您:playbackLikelyToKeepUpplaybackBufferFullplaybackBufferEmpty .

实现完美的无缝播放并不容易。

/* player is an instance of AVPlayer */
[player addObserver:self
forKeyPath:@"currentItem.loadedTimeRanges"
options:NSKeyValueObservingOptionNew
context:kTimeRangesKVO];

observeValueForKeyPath:ofObject:change:context: 中:

if (kTimeRangesKVO == context) {
NSArray *timeRanges = (NSArray *)[change objectForKey:NSKeyValueChangeNewKey];
if (timeRanges && [timeRanges count]) {
CMTimeRange timerange = [[timeRanges objectAtIndex:0] CMTimeRangeValue];
NSLog(@" . . . %.5f -> %.5f", CMTimeGetSeconds(timerange.start), CMTimeGetSeconds(CMTimeAdd(timerange.start, timerange.duration)));
}
}

2) 只需关注 player.rate

[player addObserver:self 
forKeyPath:@"rate"
options:NSKeyValueObservingOptionNew
context:kRateDidChangeKVO];

然后在您的 observeValueForKeyPath:ofObject:change:context: 中:

    if (kRateDidChangeKVO == context) {
NSLog(@"Player playback rate changed: %.5f", player.rate);
if (player.rate == 0.0) {
NSLog(@" . . . PAUSED (or just started)");
}
}

3) 你可以build a movie of a given length using a still image但在播放器顶部使用常规 UIImageView 更容易。在需要时隐藏/显示它。

示例项目:随意使用 the code I wrote to support my answer .

关于iphone - AVPlayer 缓冲、暂停通知和海报帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648963/

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