在多媒体开发过程中,难免会使用到video这一类型。但一直有部分开发者或产品人员总提出 “视频画面没有充满”其给定的窗口,其原因在于对视频不了解,想当然的去认为要“充满”。被问到此问题只能苦笑一声,哭笑不得。
先看下几个效果:
- 左右空白 显示窗口320*240 ,视频分辨率720*576
- 上下空白 显示窗口320*240 ,视频分辨率1280*720
- 上下左右空白 显示窗口320*240,视频分辨率240*180 ,这种很少见或没见过吧。
看了上面3个图,是否想到了什么?没想到继续看下面:
第1、2都是正常的显示样子,由于窗口和画面长宽比例比一致,留空白是为了保持画面比例,“适应窗口”显示,如何适应,一句话:总有一边充满就对了。此时和原有的画面比例是一直的。此时如要完全充满,那就是拉伸的,后果就是变宽(1)或变长(2); 举个例子,如果视频显示的是一个人,第一种全部充满后脸会变胖 (宽),第二种全部充满后脸会变长(竖直方向)。至于第三种窗口和画面长宽比刚好相等,都是4:3,因此刚好能填充窗口而不变形,但由于放大到窗口大小,实际效果可能会变模糊,但一般都会充满,这也是很少或没有见过第三种显示方式的原因。
此外,由于平台的不同以及产品设计不同,不论是适应宽还是高,渲染的时候都有不同程度的缩放,可能是放大,也可能是缩小,看起来画面比例是一样的就是正确的。当然,有的产品设计不计较变形问题,就要充满窗口,这就需要渲染有模式可选。
Gensee Android sdk的GSVideoView 根据用户的不同需求,提供了如下接口:setRenderMode(RenderMode renderMode)
public enum RenderMode {RM_FILL_XY, //填充窗口(画面比失调)RM_ADPT_XY, //适应窗口(窗口可能会有边缘空白)RM_CENTER,RM_FILL_CENTER_CROP //以小边放大或缩小 并裁剪后充满窗口(一般用于手机全屏直播)}