2014-11-21 386 views
4

我正在開發一個聊天,我們有高品質的表情符號與擴展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

回答

1

同步解碼器的數量是有限制的,如果沒有其他原因,在某些時候你會超過硬件的最大帶寬。在一些設備上,我已經看到它在配置了兩個硬件解碼器之後切換到軟件解碼。 AFAIK在這裏沒有強制行爲。

您的問題的一種可能的解決方案是擁有一個單一的多路複用視頻,您可以將所有表情符號放在一個.mp4文件中。將其播放到SurfaceTexture中,然後用作「sprite sheet」。這種方法要求所有動畫具有大致相同的幀數,因此您可能需要調整一些或僅填充序列。

更新:根據this link的「M」發行,預定增加MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances(),它提供了「爲支持的併發編解碼器實例的最大數量的暗示。」對你的問題沒有幫助,但至少會給你一個數字。希望API能夠將視頻分辨率考慮在內。

+0

謝謝,我仍然堅信使用GIF會更好。 – 2014-11-24 07:03:33