我有MediaPlayer
渲染視頻到TextureView
。這是行得通的。MediaPlayer無法渲染到圖像渲染後的TextureView
現在,我想在此TextureView
上顯示靜態圖像一段時間,然後獲取MediaPlayer
將視頻渲染到相同的TextureView
。
這裏是我的代碼來呈現位圖:
Canvas canvas = mTextureView.lockCanvas();
canvas.drawBitmap(sourceBitmap, matrix, new Paint());
mTextureView.unlockCanvasAndPost(canvas);
在此之後,任何嘗試播放視頻導致ERROR_INVALID_OPERATION
(1-38)被從視頻播放器觸發。
我試着評論打電話給drawBitmap
,並且錯誤仍然發生。看起來簡單的調用lockCanvas
後跟unlockCanvasAndPost
的行爲導致TextureView
不適合MediaPlayer
使用。
是否有某種方法可以將TextureView
重置爲允許MediaPlayer
使用它的狀態?
我正在使用Android 4.2.2。
如果我有一個MediaPlayer作爲緩衝區製作者,那麼將我的表面清除爲黑色最簡單的方法是什麼? – Gilbert
@Gilbert:你應該把它當作一個新問題發佈。解決這個問題的方法通常有三種形式:(1)讓MediaPlayer去做,也許是通過播放單幀黑色視頻; (2)斷開MediaPlayer,用GLES清除它,重新連接MediaPlayer; (3)在它前面放置一個不透明的黑色視圖,其尺寸相同。第三個是TextureView相當簡單,因爲與SurfaceView不同,它與其他視圖很好。 – fadden
@fadden我們可以使用兩種方法在SurfaceView上繪製位圖,只需使用Canvas.drawBitmap()API並使用opengl手動繪製即可。兩者都是硬件加速,但速度更快? 我覺得用opengl手動繪圖需要內存複製,我們首先應該使用texImage2D API將位圖上傳到紋理。 – dragonfly