視頻播放必然涉及到畫面渲染,比如我們的視頻流媒體播放器,不管是什麼版本,都需要對畫面進行渲染才能正常播放。
在博客EasyPlayer-RTMP-iOS使用YUV渲染畫面的方法裏,我們介紹了視頻流媒體播放器渲染的方式,是解碼後獲取的視頻幀,需要分解成Y、U、V的值,再送到OpenGLES去渲染。
但我們也遇到了一個問題:EasyPlayer-RTSP-Android 使用硬解碼得到的視頻幀數據,渲染出來的畫面是黑白的,如何解決?
我們在調出硬解碼數據檢查之後,發現硬解碼得到的YUV數據的格式沒有確定,導致JNIUtil轉碼數據出錯,OpenGLES渲染出來的畫面,都是黑白色。
1、硬解碼,指定解碼後的幀格式:
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, COLOR_FormatYUV420Flexible);
2、解碼得到的YUV需要經過JNIUtil.yuvConvert轉換,再渲染,視頻播放畫面就會恢復正常。