【问题标题】:Load video from iPhone library, modify frame and play it in real-time从 iPhone 库中加载视频,修改帧并实时播放
【发布时间】:2012-08-16 05:14:06
【问题描述】:

我正在寻找一个技巧来开发一个 iPhone/iPad 应用程序,该应用程序能够处理视频(为简单起见,我们只考虑存储在设备上的本地文件)并实时播放视频。例如,您可以选择任何电影并选择“旧电影”过滤器,并希望它像在旧灯电视上一样。

为了实现这个想法,我需要实现两个关键功能:

1) 从电影文件中抓取帧和音频流并访问单独的帧(我对 BGRA 中的原始像素缓冲区或至少 YUV 颜色空间感兴趣)。

2) 以某种方式显示处理过的帧。我知道可以将处理后的帧渲染为 OpenGL 纹理,但我希望拥有更强大的播放控件组件。是否有任何类别的媒体播放器支持播放自定义图像和音频缓冲区?

处理功能完成并且速度很快(少于一帧的持续时间)。

我不是要求现成的解决方案,但欢迎提供任何提示!

回答

帧抓取。 似乎获取视频和音频帧的唯一方法是使用 AVAssetReader 类。尽管不建议将其用于实时抓取,但它确实可以完成工作。在我对 iPad2 的测试中,抓取单帧大约需要 7-8 毫秒。在视频中寻找是一个棘手的问题。也许有人可以指出更有效的解决方案?

视频播放。我已经使用自定义视图和 GLES 来渲染一个矩形纹理,其中包含一个视频帧。据我所知,这是绘制位图最快的方法。

问题

  • 需要手动播放声音样本
  • AVAssetReader 抓取应与电影帧速率同步。否则电影会过快或过慢。
  • AVAssetReader 只允许连续帧访问。你不能向前和向后寻找。唯一建议的解决方案是删除旧阅读器并创建一个具有修剪时间范围的新阅读器。

【问题讨论】:

    标签: ios xcode opencv avfoundation core-video


    【解决方案1】:

    【讨论】:

    • 感谢这些提示。我已经看过它们,并且作为 iOS 的 OpenCV 教程的作者,我很熟悉它们。但是你让我确定除了 AVAssetReader 之外没有其他选择可以解决我的问题。
    • 啊,我希望我能得到更多帮助:(如果我以后遇到任何事情,我会记住你的。
    • @BloodAxe 我遇到了这个,让我知道它是否有帮助。似乎很有用developer.apple.com/library/ios/#qa/qa1702/_index.html
    • 感谢您的尝试,但我正在寻找从视频文件中读取的帧,而不是相机设备。访问相机很容易。此时我使用 AVAssetReader 类实现了从视频文件中捕获帧。但是,它不适合实时使用。它无法为 1280x720 的视频提供流畅的 fps。所以我正在寻找更快的方式来访问视频文件。
    【解决方案2】:

    您可以使用 AVPlayer+ AVPlayerItem,它为您提供了在显示图像上应用过滤器的机会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多