gpt4 book ai didi

ios - AVPlayerLayer 没有出现几秒钟,但声音完美

转载 作者:行者123 更新时间:2023-11-29 11:36:31 24 4
gpt4 key购买 nike

我正在开发一个应用程序,其中提要中有循环播放的视频(在表格 View 单元格内)。可以同时存在多个视频,但可能只有一个正在播放。我在后台创建 AVPlayer,并将它们的 playerLayer 作为 subview 放入我的 View 层中,并在用户停止滚动时在屏幕上播放最多区域的视频提要。

但是,最近我注意到当用户停止滚动时视频不会显示在提要中。声音立即开始,但不显示视频。我检查了播放器层的边界是否完全正常。我看过AVPlayerLayer shows black screen but sound is working但该问题仅适用于旧版本的 iOS。我也看过 AVPlayer Video Blank but Hear Sound但是当 OP 意识到该层的边界是零矩形时,这个问题就解决了。我添加了一个计时器来重复打印我的视频播放器的边界,即使不显示视频,边界也是正确的。

在纯声音播放几秒钟后,视频开始完美播放。我已经仔细检查过“启动”与视频回溯到 0:00 不一致。它只是在视频的随机部分开始。我还迭代了所有的超层,直到到达 UIWindow 的层。图层层次结构正确地到达窗口的图层,并且中间图层都没有零矩形。此外,当视频随机播放时,上述数据(超层、它们的矩形)都没有发生任何变化。可以肯定的是,我添加了以下代码并且没有遇到任何断言失败(我已经在其中包含了 NSLog,所以是的,它被称为):

timer = [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:YES block:^(NSTimer * _Nonnull timer) {
NSAssert(_playerLayer.bounds.size.width, @"bounds");
NSAssert(_playerLayer.bounds.size.height, @"bounds");
NSAssert(!_playerLayer.hidden, @"hidden");
BOOL inWindow = NO;
CALayer *layer = _playerLayer.superlayer;
while(layer){
layer = layer.superlayer;
NSAssert(layer.bounds.size.width, @"bounds");
NSAssert(layer.bounds.size.height, @"bounds");
NSAssert(!layer.hidden, @"hidden");
if(layer == [UIApplication sharedApplication].keyWindow.layer){
inWindow = YES;
break;
}
}
NSAssert(inWindow, @"not in window");
}];

一些观察和总结:

  • 视频总是在第一次尝试时正确播放。当我播放另一个视频然后再回来时,问题就出现了。
  • 所有层/ View 都没有零矩形,它一直延伸到窗口层。我每秒用计时器循环检查 10 次,一切看起来都很完美。
  • 声音立即开始,没有延迟,即使在随后的“有问题”的播放中也是如此。简而言之:声音完全没有问题。
  • 视频通过网络流式传输(来 self 们自己的 S3 存储桶),但已经加载,因为它们可以播放到最后并在问题开始之前循环播放,因为问题不会在第一次播放时出现。
  • 我正在使用 AVPlayer/AVPlayerLayer 组合,我不会再次为同一视频创建新的播放器或层,我有一个 URL 到播放器/层映射的字典,我再次使用它们。
  • 我在 iOS 11.2.5 和 iPhone X 上,虽然我也尝试过模拟器并且问题存在,所以我认为它与设备无关。

可能是什么问题?

最佳答案

好吧,我忽略了必须在主队列上调用设置玩家边界这一事实。我在后台队列上调用它以从主队列中卸载一些工作(显然失败了),这导致了未定义的行为。我已将它分派(dispatch)到主队列并开始正常工作。

关于ios - AVPlayerLayer 没有出现几秒钟,但声音完美,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967617/

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