gpt4 book ai didi

ios - 使用 AirPlay 时限制 AVPlayerDemo 中的 UISlider 擦洗

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:57 26 4
gpt4 key购买 nike

在 Apple 的 AVPlayerDemoPlaybackViewController 中将 mPlayer.usesExternalPlaybackWhileExternalScreenIsActive 设置为 YESAVPlayerDemo示例项目,您如何限制擦洗以使其在 AppleTV 上不落后?

我的意思是,当您真正快速地来回移动 slider 时,AppleTV 会执行每一个 seekToTime 操作,但执行此操作的时间会比用户滑动的时间长。

该演示的一个问题是它同时使用了“Touch Drag Inside”和“Value Changed”事件,这导致它发送相同的值两次。如果您删除“Value Changed”,它会有所改善,但仍然滞后。

我试过四舍五入到整秒,然后只在秒发生变化时发送 seekToTime,但这似乎没有太大帮助。我真正需要做的是,用户移动 slider 越快,发送的命令越少,但当用户移动得越慢时发送的命令越多。

关于如何实现这一点有什么想法吗?

最佳答案

UISlider 已经在某种程度上限制了自己。移动得越快,从 A 点到 B 点获得的值就越少。这不足以阻止搜索操作在 AirPlay 上叠加。

但是,您可以使用 seekToTime:completionHandler: 来防止这样的堆栈:

if(seeking) {
return;
}

seeking = YES;
[player seekToTime:CMTimeMakeWithSeconds(time, NSEC_PER_SEC) completionHandler:^(BOOL finished) {
seeking = NO;
}];

这会丢弃任何新的搜索,直到正在进行的搜索结束。这似乎运作良好。您只需要确保在用户停止擦洗后发送最后一个搜索操作。

虽然 NSTimer 可以做同样的事情,但它不太准确,而且结果会因连接延迟而异。以这种方式使用的 completionHandler 可确保无论延迟时间如何,搜索都不会堆积。

我还发现 UISlider 的“Value Changed” Action 可以在任何触摸开始 Action 之前发生。因此,最好改用触摸拖动内部/外部操作,这保证在触摸开始后发生。

关于ios - 使用 AirPlay 时限制 AVPlayerDemo 中的 UISlider 擦洗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928844/

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