EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题

本文转自EasyDarwin开源团队开发Holo的博客:http://blog.csdn.net/holo_easydarwin

最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏推送直播画面到EasyDarwin然后通过播放器播放视频画面就会逆时针旋转90度,如图:

EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题

手机横屏的时候不会旋转,这个问题思路其实很简单,在推送给服务器之前把图片数据旋转90度之后就可以了,然后就做了一次顺时针旋转的,结果画面变成如下样子:

EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题

很明显图片顺时针旋转了90度,但是还不如不旋转!我就想当然的以为旋转的算法出错了,然后开始寻求谷歌度娘,然并卵,然后就自己开始了解学习YUV420SP、YUV420P,并且自己写旋转算法,结果还是这样。其实着就有个结论了,旋转算法没问题!那是哪儿除了问题了呢?一次聊天提到宽和高是不是有问题,一语点醒梦中人。我在编码的时候使用MediaCodec,编码的时候设置宽为640高480:

mediaFormat = MediaFormat.createVideoFormat("video/avc", width,height);
  • 1
  • 1

而旋转90度之后宽和高就颠倒了啊,再这样编码肯定有问题,于是在将编码器的宽和高颠倒:

mediaFormat = MediaFormat.createVideoFormat("video/avc", height, width);
  • 1
  • 1

这次果然出现奇迹了,画面终于正常了:

EasyPusher手机直播编码推送之图像旋转90度后画面重复的问题

其实就是简单的颠倒一下width和height的位置,这个问题困扰了好几天,终于解决了

关于代码可见:https://github.com/EasyDarwin/EasyPusher

上一篇:C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码


下一篇:移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)