本文主要是介绍视频流媒体播放器EasyPlayer-RTSP硬解码后如何设置YUV渲染格式?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
YUV主要用于优化彩色视频信号的传输。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。因此我们在编译视频流媒体播放器EasyPlayer-RTSP时,使用的大多是YUV渲染方式。
前文我们说过EasyPlayer-RTSP是怎样渲染画面的,本文讲一下在流媒体播放器EasyPlayer-RTSP硬解码后获得的YUV格式应该如何设置。
不同的Android设备,MediaCodec解码得到的YUV格式不相同,且由于各种格式繁杂,很难写出高效的格式转换方法。统计发现市面上Android设备MediaCodec解码得到的不同YUV格式所占的比例,表格中显示出格式之繁多,且以
COLOR_QCOM_FormatYUV420SemiPlanar32m,
OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka和
COLOR_FormatYUV420SemiPlanar占据绝大多数。
MediaCodec不仅在编码,而且在解码是也能够指定帧格式。能够指定的原因是,解码得到的帧的格式,并不是由如H.264编码的视频文件提前确定的,而是由解码器确定的,解码器支持哪些帧格式,就可以解码出哪些格式的帧。
得益于API 21加入的COLOR_FormatYUV420Flexible格式,MediaCodec的所有硬件解码都支持这种格式。但这样解码后得到的YUV420的具体格式又会因设备而异,如YUV420Planar,YUV420SemiPlanar,YUV420PackedSemiPlanar等。
YUV420Flexible并不是一种确定的YUV420格式,而是包含COLOR_FormatYUV411Planar, COLOR_FormatYUV411PackedPlanar,
COLOR_FormatYUV420Planar, COLOR_FormatYUV420PackedPlanar,
COLOR_FormatYUV420SemiPlanar和COLOR_FormatYUV420PackedSemiPlanar。在API 21引入YUV420Flexible的同时,它所包含的这些格式都deprecated掉了。
只要解码器支持YUV420Flexible中的任意一种格式,就会被认为支持YUV420Flexible格式。也就是说,几乎所有的解码器都支持YUV420Flexible代表的格式中的一种或几种。
硬解码时指定解码后的帧格式:
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, COLOR_FormatYUV420Flexible)。
这篇关于视频流媒体播放器EasyPlayer-RTSP硬解码后如何设置YUV渲染格式?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!