【问题标题】:iOS video playbackiOS 视频播放
【发布时间】:2012-08-06 15:19:22
【问题描述】:

在我的应用程序中,我应该以不寻常的方式播放视频。 诸如用于特殊用途的交互式播放器之类的东西。

这里的主要问题:

  • 视频分辨率可以从 200*200px 到 1024*1024 px
  • 我应该能够将速度从 -60 FPS 更改为 60 PFS(在这种情况下,视频的播放速度应根据所选速度变慢或加快,负数表示视频应向后播放)
  • 我应该在视频上绘制线条和对象,并用图像对其进行缩放。
  • 我应该能够缩放图像并在其内容超过屏幕大小时对其进行平移
  • 我应该能够更改此视频的亮度、对比度和反转颜色

现在我正在做下一件事:

  • 我将视频拆分为 JPG 帧
  • 为每秒 N 次创建计时器(播放速度控制)
  • 每个计时器都在使用 OpenGL 绘制新纹理(下一个 JPG 帧)
  • 使用 OpenGL ES 转换(平移、缩放)进行缩放和平移播放

在我使用 320*240 像素之前,一切看起来都很好,但如果我使用 512*512 像素,我的播放率就会下降。也许是计时器行为问题,也许是 OpenGL。有时,如果我试图以高播放率(超过 10-15 FPS)打开大纹理,应用程序会因内存警告而崩溃。

解决此问题的最佳做法是什么?我应该挖什么方向?也许 cocos2d 或其他游戏引擎对我有帮助? Mb JPG 不是纹理的最佳解决方案,我应该使用 PNG 或 PVR 还是其他?

【问题讨论】:

  • 为什么要转换成任何类型的图像?为什么不将原始帧作为纹理上传?将帧压缩为 JPG 或 PNG 图像对于视频来说会非常昂贵。
  • 我在播放视频之前准备好这些 JPG 帧。我的意思是,我只是使用从文件中创建的 JPG。或者你说,我可以为我的纹理使用另一种(最有效的)格式?

标签: ios performance ipad video opengl-es


【解决方案1】:

将视频数据保留为视频,并使用AVAssetReader 获取原始帧。使用kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange作为色彩空间,在GLES中做YUV->RGB色彩空间转换。这意味着在内存中保留更少的数据,并使您的大部分图像处理更加简单(因为您将使用亮度和色度数据而不是 RGB 值)。

您无需为此烦恼 Cocos 2d 或任何游戏引擎。我强烈建议对 OpenGL ES 2.0 和着色器进行一些试验。将 OpenGL 用于视频非常简单明了,添加游戏引擎是不必要的开销和抽象。

当您将图像数据上传到纹理时,不要每帧都创建一个新纹理。相反,创建两个纹理:一个用于亮度数据,一个用于色度数据,并简单地在每一帧重复使用这些纹理。我怀疑您的内存问题是由于每帧使用许多图像和新纹理而可能没有删除旧纹理。

【讨论】:

    【解决方案2】:

    JPEG 帧的解压缩成本非常高。第一步:使用 PNG。

    但是等等!还有更多。

    Cocos2D 可以通过great support for sprite sheets 帮助您。

    不过,最大的帮助可能来自打包纹理,例如 TexturePacker。使用 PVR.CCZ 压缩可以大大加快速度,足以让您在更大的视频尺寸下获得更好的帧速率。

    【讨论】:

      【解决方案3】:

      Vlad,简短的回答是,您可能永远无法同时使用列出的所有这些功能。以 60 FPS 播放 1024 x 1024 视频真的会很费力,我非常怀疑 iOS 硬件是否能够跟上 60 FPS 的这种数据传输速率。即使是设备上的 h.264 硬件,在 1080p 下也只能做到 30FPS。这可能是可能的,但是在视频上分层图形渲染并期望能够同时编辑亮度/对比度,这实在是太多的事情了。

      您应该专注于实际可行的事情,而不是尝试完成所有功能。如果您想查看将 iPad 硬件推向极限的示例 Xcode 应用程序,请查看我的 Fireworks 示例项目。此代码同时在屏幕上显示多个已解码的 h.264 视频。该实现是围绕 CoreGraphics API 构建的,但关键是由于零复制优化,Apple 将纹理上传到 OpenGL 的 impl 非常快。使用这种方法,可以将大量视频流式传输到设备。

      【讨论】:

      • 链接断开,@MoDJ 我在哪里可以找到你的示例项目?
      • 更新了链接和说明,请立即尝试。
      猜你喜欢
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多