【发布时间】:2014-02-19 23:33:52
【问题描述】:
快速说明 - 如果您的 Unity/Android 代码将在 Unity 端以 30+ FPS 播放 视频流 h264,而不是完整视频,并且可以分享一下,这样可以救我!
说明: 我有 Unity Pro 4.3。第一种简单的方法是创建一个 Color32 [1080*1920] 数组,并将元素分配给通过数学函数创建的值。 主要目标是创建一个 Texture2D 并使用像素颜色数组,并能够以 30+ FPS 逐帧更新它们。以下是我目前的结果:
Texture2D Unity Side Only:
- 纹理的分配不是问题。
- Apply() 的使用是个大问题。这是实际更新纹理所必需的。
- 使用 1080 x 1920 纹理以 0.5 FPS 运行。当然太慢了。
Unity和Android端之间的Texture2D:
- 我已经看到并尝试使用 Android Java OpenGL ES 示例。
- 如果我能够找到解决方法,这听起来和听起来仍然是最好的方法。
- 我通过桥将 Texture2D 的“指针/ID”传递给 Java 端。
- 尝试使用“指针/ID”更新 Java 端的 Texture2D,方法是:
glBindTexture(GL_TEXTURE_2D, texturePtr);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, s_resolutionWidth, s_resolutionHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer); - 使用这个“指针/ID”,我可以进行大量调用,在 GL 调用之前和之后,在 Java 端这一切都应该是合法的。
- 这声称它是答案,但这在我在 Unity 端使用 Apply() 之前没有任何影响,这当然会破坏它。
- 我的假设是 Java 代码已经改变,我需要弄清楚什么可以解决我的问题。
渲染纹理:
- 这也是我认为的潜在答案。
- 它声称通过纹理更改可以更快地更新,但它似乎只能通过相机设置纹理。
- 我想用数学计算的至少 30 FPS 的简单 1080 帧更新 RenderTextures。
- 我发现这样做的唯一方法是不幸地使用 Texture2D,当然需要 Apply()!
- 所以到目前为止,这似乎接近可用,但总的来说不可用。
我真的需要知道在 Unity 中以 30 FPS 更新纹理的最佳方法。一旦我知道如何做到这一点,即使是最简单的形式,我也能取得进步。
【问题讨论】:
-
您可能不得不硬着头皮购买 Unity Pro 才能使用 movie textures 免费的 Unity 社区视频脚本并不多,而且 30FPS 要求很高。您可以首先确保您的纹理是 2 的幂,这会稍微提升性能。
-
我有 Unity Pro。正如描述所言,我不得不处理一部电影的所有单独流。一部电影可以有大量的视频、声音和其他流,所有这些流都是一致创建和运行的。因此,我需要能够更改流并显示我们在自己的数据流中创建的数据。我有这个专门在机器人上工作,我只需要找到一种方法将数据缓冲区从流移动到 Unity 并更新主纹理。
标签: java android opengl-es unity3d