HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – iOS视频:可以同时使用4个以上的AVAssetReader吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在多个视图上同时渲染多个H264 mp4视频.目标是阅读大约8个短视频,每个视频大小为100×100像素,并让它们同时在屏幕上的多个位置显示内容. @H_419_7@

@H_419_7@想象一下屏幕上的24个方块,每个方块显示8个视频池中的一个视频.

@H_419_7@moviePlayer不起作用,因为它只显示一个全屏视频.具有多个AVPlayerLayers的AVPlayer是有限的,因为只有最近创建的图层才会在屏幕上显示它的内容(根据文档和我的测试).

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

@H_419_7@

- (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];
  }

  [...]
}
@H_419_7@实际上这很好用,但只适用于4个视频.第五个从未出现过.首先我想到了内存问题,但我在以下设备上进行了测试:

@H_419_7@> iPhone 3GS
> iPhone 4
> iPad
> iPad 2

@H_419_7@我在每台设备上都有相同的行为:4个视频以流畅的循环播放,没有差异.

@H_419_7@如果它本来一个内存问题,我希望至少iPad 2能够显示5或6个视频(由于它是更好的硬件),或者3GS只能显示1或者某个地方出现崩溃.

@H_419_7@然而,模拟器显示所有视频.

@H_419_7@在设备上调试显示,那

@H_419_7@

BOOL status = [mReader startReading];
@H_419_7@视频5,6,7和8返回false.

@H_419_7@那么,是否有某种硬件设置(或限制)不允许超过4个同时AVAssetReaders?因为,我无法真正解释这种行为.我不认为所有设备都具有完全相同的视频内存量.

解决方法

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

大佬总结

以上是大佬教程为你收集整理的iphone – iOS视频:可以同时使用4个以上的AVAssetReader吗?全部内容,希望文章能够帮你解决iphone – iOS视频:可以同时使用4个以上的AVAssetReader吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。