【问题标题】:How does android deal with playing video given its memory constraints?鉴于内存限制,android 如何处理播放视频?
【发布时间】:2012-10-19 20:20:39
【问题描述】:

我很好奇是否有人可以指出(或只是描述)鉴于 Android 应用程序的播放内存空间极其有限(我认为大约 20 兆),视频播放器可以加载和播放数量级或更大的视频。应用程序是否以某种块的形式加载视频?

我问是因为我有一个嵌入了一些视频资产的应用程序,并且该应用程序已经增长到大约 80 兆,并且对于编译和调试来说简直就是一个怪物(如果没有这些资源,该应用程序将只有大约 2 兆),我在想我应该只删除资产并将它们下载到一边并放在sdcard上,而不是在apk中,但我担心在运行时加载它们并播放它们会破坏应用程序的内存分配,并希望有人能阐明我的选择。

TIA

【问题讨论】:

  • 他们以可管理的块缓冲视频,是的。即使您的视频大小为 GB,您也不会使用标准视频播放 API 撞到内存墙。不过,在 apk 之外下载视频仍然是个好主意。如果我必须为每次增量升级下载一个新的 80MB 文件,我可能会直接卸载。
  • 当你说“标准视频播放 api”时,你的意思是我可以从本地文件的路径中创建一个 URI 并将其交给我的 Activity 中的 VideoView,它会处理它就像我将指向内部 apk 资源的 URI 交给它时那样优雅吗? (这就是我希望它会起作用的方式)。
  • 是的,使用setVideoURI 或setVideoPath 可以。
  • 太棒了...您应该将其发布为答案,以便我可以选择它。

标签: android memory video sd-card


【解决方案1】:

他们以可管理的块缓冲视频,是的。即使您的视频大小为 GB,您也不会使用标准视频播放 API 撞到内存墙。您可以使用对setVideoURI 或setVideoPath 的标准调用来指向文件,它将从那里处理它。如果您不使用VideoView,则通常对MediaPlayer 也适用

不过,在 apk 之外下载视频仍然是个好主意。如果我必须为每次增量升级下载一个新的 80MB 文件,我可能会直接卸载。如果您不想自己托管它们,请查看补充 apk 选项。

【讨论】:

    【解决方案2】:

    您可以将游戏带入可以绕过此限制的原生层。看看我写的博客http://jnispot.blogspot.com/2012/10/jnindk-arrays-bitmaps-and-games-oh-my.html

    【讨论】:

    • 这并不能立即解决我的问题,但无论如何我都会 +1(ing) 它,因为它是一个非常有趣的内存边界解决方案。
    【解决方案3】:

    我不知道这是否是视频应用程序所做的,但您实际上可以通过在本机代码中使用 malloc 语句将内存增加到超出正常限制。这绕过了大约 20 MB 的正常最大值。

    我只在安卓设备上使用它来加密,在处理大型加密文件(甚至大约 10MB 文件)时,AES 加密需要相当多的内存。

    【讨论】:

    • 对不起...我不明白您所说的“本机代码”是什么意思...如何在 Java 中访问 malloc?或者你是说我应该绕过 java 并以某种方式用 C 编写我的应用程序?
    • 您可以使用 NDK 编写本机代码,甚至可以在应用程序中结合 java 和 C。视频通常会按照其他人的建议使用缓冲区,但使用 NDK 可能会增加内存限制。
    • 这个问题尤其是视频问题,但这是一个非常有趣的想法,我一定会在有时间的时候研究一下(阅读:从不):)
    猜你喜欢
    • 2011-04-29
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多