gpt4 book ai didi

iphone - iOS 视频 : More than 4 simultaneous AVAssetReaders possible?

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:44 25 4
gpt4 key购买 nike

我想同时在多个 View 上渲染多个 H264 mp4 视频。目标是阅读大约 8 个短视频,每个大小为 100x100 像素,并让它们同时在屏幕上的多个位置显示其内容。

想象屏幕上有 24 个方 block ,每个方 block 显示 8 个视频池中的一个视频。

MoviePlayer 不工作,因为它只显示一个全屏视频。具有多个 AVPlayerLayer 的 AVPlayer 是有限的,因为只有最近创建的 Layer 会在屏幕上显示它的内容(根据文档和我的测试)。

因此,我编写了一个简短的视频类并为包中的每个 .mp4 文件创建了一个实例,使用 AVAssetReader 读取其内容。更新时,每个视频帧都会根据视频的帧率被检索并转换为 UIImage 并显示。此外,这些图像被缓存以便在循环时快速访问。

- (id) initWithAsset:(AVURLAsset*)asset withTrack:(AVAssetTrack*)track
{
self = [super init];
if (self)
{
NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA], (NSString*)kCVPixelBufferPixelFormatTypeKey, nil];

mOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:track outputSettings:settings];
mReader = [[AVAssetReader alloc] initWithAsset:asset error:nil];

[mReader addOutput:mOutput];

BOOL status = [mReader startReading];
}

return self;
}


- (void) update:(double)elapsed
{
CMSampleBufferRef buffer = [mOutput copyNextSampleBuffer];

if (buffer)
{
UIImage* image = [self imageFromSampleBuffer:sampleBuffer];
}

[...]
}

实际上这很有效,但只适用于 4 个视频。第五个永远不会出现。首先我想到了内存问题,但我在以下设备上进行了测试:

  • iPhone 3GS
  • iPhone 4
  • 平板电脑
  • iPad 2

我在每台设备上都有相同的行为:平滑循环播放 4 个视频,没有差异。

如果这是内存问题,我希望至少 iPad 2 可以显示 5 或 6 个视频(因为它有更好的硬件)或者 3GS 只显示 1 个或某处崩溃。

不过,模拟器会显示所有视频。

在设备上调试显示,

BOOL status = [mReader startReading]; 

对于视频 5、6、7 和 8 返回 false。

那么,是否存在某种硬件设置(或限制)不允许超过 4 个同时运行的 AVAssetReader?因为,我无法真正解释这种行为。我不认为所有设备都具有完全相同数量的显存。

最佳答案

是的,iOS 对一次可以解码的视频数量有上限。虽然你的方法很好,但我不知道有什么方法可以解决这个上限,只要同时激活那么多 h.264 解码器。如果你有兴趣,请看看我对这个问题的解决方案,这是一个名为 Fireworks 的 xcode 项目。 .基本上,这个演示展示了将一堆 alpha channel 视频解码到磁盘,然后通过将视频文件的一部分映射到内存来播放每个视频。这种方法可以同时解码 4 部以上的电影,而不会用完所有系统内存,也不会遇到 h.264 解码器对象数量的硬性限制。

关于iphone - iOS 视频 : More than 4 simultaneous AVAssetReaders possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060565/

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