2015-04-24 46 views
2

我想在我的活動視圖背景中播放6秒高分辨率視頻動畫。在我的設備多數民衆贊成1080x1080。視頻必須具有透明背景。我做了一些關於AnimationDrawable的研究,人們說它在a中很痛苦...(OutOfMemory Exceptions,...)在Android中播放高分辨率幀動畫的最佳方法

我希望能夠循環視頻並改變速度。幀率應至少爲20fps。

你會怎麼做?

+0

不確定Android是否支持帶alpha通道的視頻格式。我猜想一些使用OpenGL ES 2.0的技巧可能會做到這一點,但我想質量和幀速率可能會受到影響,因爲您必須解碼視頻並將其傳輸到紋理內存中(所有大小和速度都受到限制)。或者它是一系列PNG圖像......但是它們在RAM中解碼6秒鐘......這很多。 1位圖將在您的情況下爲4MB。而Android應用的堆稀缺。您可以縮小圖像和/或縮短持續時間。 – tiguchi

回答

2

我會將視頻編碼爲.mp4(AVC),並用MediaCodec將其解碼到SurfaceTexture,然後使用OpenGL ES渲染紋理。您呈現的內容取決於您的應用正在做什麼;要麼是SurfaceView要麼是TextureView

你說視頻是在背景中,但也必須有一個透明的背景,這表明它有點在前臺。不太確定你想要達到的目標。視頻不會有alpha通道,但是您可以使用片段着色器設置alpha(全局或根據視頻像素值)。

您可以在Grafika(帶循環和速度控制)中找到視頻播放的示例。 「來自相機的紋理」活動可能也是相關的,因爲它說明了通過SurfaceTexture進行渲染(儘管它使用來自相機的實時視頻而不是記錄文件)。相機過濾器演示顯示一些simple fragment shaders

相關問題