我正在开发聊天,我们有高质量的表情符号,扩展名为mp4(文件大小约为300kb)。由于质量差和颜色有限(256),因此不使用GIF格式。
我需要将ListView中的文件显示为循环视频。
现在我尝试使用TextureView和MediaCodec类来完成此操作。
来源可以在https://github.com/google/grafika找到。
问题是当您尝试同时播放4个以上的视频时,会发生错误
android.media.MediaCodec.dequeueOutputBuffer 中的IllegalStateException。
我认为这是因为大量内存消耗,
在我的设备(HTC ONE M7)上播放四个视频时,处理器加载超过60%!
如何解决这个问题?也许我需要使用第三方编解码器?
或者使用视频显示表情符号的想法很糟糕,我需要放弃并使用像GIF这样的东西?
答案 0 :(得分:1)
同时解码器的数量有限制,如果没有其他原因,那么在某些时候你将超过硬件的最大带宽。在某些设备上,我看到它在配置了两个硬件解码器后切换到软件解码。 AFAIK在这里没有强制行为。
您的问题的一个可能解决方案是拥有一个多路复用视频,您可以将所有表情符号放在一个.mp4文件中。将其播放到SurfaceTexture中,然后将其用作" sprite sheet"。这种方法要求所有动画的帧数大致相同,因此您可能需要调整一些或只是填充序列。
更新:根据this link,' M'发布计划添加MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()
,它提供了对所支持的并发编解码器实例的最大数量的提示。"对你的问题没有任何帮助,但至少它会给你一个号码。希望API能够考虑视频分辨率。