Android:同时播放许多视频

问题描述:

我正在开发一个聊天,我们有高品质的表情符号与扩展mp4(文件大小约300kb)。由于质量差和颜色有限(256),不使用GIF格式。
我需要将ListView中的文件显示为循环视频。 现在我正在尝试使用TextureView和MediaCodec类来做到这一点。 来源可在https://github.com/google/grafika找到。
问题是,当您尝试同时播放超过4个视频时,发生错误 IllegalStateException在android.media.MediaCodec.dequeueOutputBuffer。 我认为这是因为在我的设备(HTC ONE M7)上播放4个视频时,内存消耗大, ,处理器加载超过60%!
我该如何解决这个问题?也许我需要使用第三方编解码器?
或者使用视频来显示笑脸的想法是不好的,我需要放弃并使用像GIF的东西?Android:同时播放许多视频

+0

您无法在android上的线程中启动线程。你必须为它创建一个单独的线程任务,并让android的工作线程处理它们,然后谁又将信息反馈给你的UI线程。 Asynctask适合加载小视频,但对于长期应用程序,您将需要一个服务。 – 2014-11-21 08:23:25

+0

那么,据我所知,只有4名工友,我猜他们最多只有4个视频。 – 2014-11-21 09:10:05

+0

所有视频已经在不同的线程中播放。 – 2014-11-21 09:10:40

同步解码器的数量是有限制的,如果没有其他原因,在某些时候你会超过硬件的最大带宽。在一些设备上,我已经看到它在配置了两个硬件解码器之后切换到软件解码。 AFAIK在这里没有强制行为。

您的问题的一种可能的解决方案是拥有一个单一的多路复用视频,您可以将所有表情符号放在一个.mp4文件中。将其播放到SurfaceTexture中,然后用作“sprite sheet”。这种方法要求所有动画具有大致相同的帧数,因此您可能需要调整一些或仅填充序列。

更新:根据this link的“M”发行,预定增加MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances(),它提供了“为支持的并发编解码器实例的最大数量的暗示。”对你的问题没有帮助,但至少会给你一个数字。希望API能够将视频分辨率考虑在内。

+0

谢谢,我仍然坚信使用GIF会更好。 – 2014-11-24 07:03:33