MediaPlayer: BufferQueue has been abandoned 解決方案


最近在做一個播放器,需要實現一個從小屏切換到全屏的效果,我用的是TextureView + MediaPlayer 的方式去實現,當需要切換成全屏時,我在 TextureView 的 onSurfaceTextureDestroyed 方法中將MediaPlayer的 setSurface 方法置成了NULL,然后打算在屏幕切換完成后,即在 onSurfaceTextureAvailable 方法中重新給MediaPlayer設置一個Surface, 但是這樣卻帶來一個問題:

每次打印完 E/BufferQueueProducer: [SurfaceTexture-0-25503-6] cancelBuffer: BufferQueue has been abandoned 后播放器都會dump掉,然后就報了一個錯誤:E/MediaPlayer: error(1, -19), 最開始我懷疑是Player在Playing狀態下不能設置setSurface為NULL,后來實際嘗試了下,是可以這么做的,百思不解的情況下求教了一下萬能的Google, 結果在這篇博客中找到了答案:

https://blog.csdn.net/YoungHong1992/article/details/84324965

結合了下自己遇到的問題,大概明白了問題所在:當我的SurfaceTexture所關聯的View從屏幕中remove掉了之后,這個SurfaceTexture也被回收掉了,所以只需要保證這個SurfaceTexture不被回收掉就行,按照這篇博客的內容,將SurfaceTexture提升為成員變量,問題解決。

一個相關聯的StackOverflow: https://stackoverflow.com/questions/23807086/surfacetexture-has-been-abandoned

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM