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