最初在做EasyPusher手機直播的時候遇到過一個問題:手機豎屏推送直播畫面到EasyDarwin然後通過播放器播放視頻畫面就會逆時針旋轉90度,如圖:
手機橫屏的時候不會旋轉,這個問題思路其實很簡單,在推送給服務器之前把圖片數據旋轉90度之後就可以了,然後就做了一次順時針旋轉的,結果畫面變成如下樣子:
很明顯圖片順時針旋轉了90度,但是還不如不旋轉!我就想當然的以爲旋轉的算法出錯了,然後開始尋求谷歌度娘,然並卵,然後就自己開始瞭解學習YUV420SP、YUV420P,並且自己寫旋轉算法,結果還是這樣。其實着就有個結論了,旋轉算法沒問題!那是哪兒除了問題了呢?一次聊天提到寬和高是不是有問題,一語點醒夢中人。我在編碼的時候使用MediaCodec,編碼的時候設置寬爲640高480:
mediaFormat = MediaFormat.createVideoFormat("video/avc", width,height);11
而旋轉90度之後寬和高就顛倒了啊,再這樣編碼肯定有問題,於是在將編碼器的寬和高顛倒:
mediaFormat = MediaFormat.createVideoFormat("video/avc", height, width);11
這次果然出現奇蹟了,畫面終於正常了:
其實就是簡單的顛倒一下width和height的位置,這個問題困擾了好幾天,終於解決了