在iOS開發(fā)中遇到使用視頻播放器的案例柔纵,使用的是別人封裝好的 WMPlayer 這么一個視頻播放器缔杉,他使用的是AVPlayer這個底層的視頻框架來搭建的視頻界面,在開發(fā)時會遇到適配適配內(nèi)容比例的需求搁料,一開始沒注意到視頻被拉伸過或详,后來遇到一個用豎屏錄制的視頻時才發(fā)現(xiàn)視頻被拉伸了,于是來查找相關(guān)的設(shè)置屬性郭计。
最后查找到使用其中一個叫** videoGravity** 的屬性鸭叙,默認(rèn)設(shè)置了AVLayerVideoGravityResize,查看該屬性以及相關(guān)的其他屬性值發(fā)現(xiàn)有3種值可以設(shè)置拣宏,
AVLayerVideoGravityResizeAspect
AVLayerVideoGravityResizeAspectFill
AVLayerVideoGravityResize
逐一試用后發(fā)現(xiàn)了其中的一些不同沈贝,在這里分享一下,可能我說的不太標(biāo)準(zhǔn)勋乾,只是個人的一些理解宋下。
開始把描述放到百度翻譯上去翻譯了一下,
1.Preserve aspect ratio; fit within layer bounds2.Preserve aspect ratio; fill layer bounds3.Stretch to fill layer bounds
解釋是
1.保持縱橫比辑莫;適合層范圍內(nèi)2.保持縱橫比学歧;填充層邊界3.拉伸填充層邊界
再看我分別設(shè)置了 WMPlayer這個播放器中的3種不同屬性值得結(jié)果圖,
1. wmPlayer.playerLayer.videoGravity =AVLayerVideoGravityResizeAspect
2. wmPlayer.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
3. wmPlayer.playerLayer.videoGravity = AVLayerVideoGravityResize
可以看出
第1種模式AVLayerVideoGravityResizeAspect是按原視頻比例顯示各吨,是豎屏的就顯示出豎屏的枝笨,兩邊留黑;
第2種AVLayerVideoGravityResizeAspectFill是以原比例拉伸視頻,直到兩邊屏幕都占滿横浑,但視頻內(nèi)容有部分就被切割了剔桨;
第3種AVLayerVideoGravityResize是拉伸視頻內(nèi)容達(dá)到邊框占滿,但不按原比例拉伸徙融,這里明顯可以看出寬度被拉伸了并鸵。
有點(diǎn)像UIImageView的ContentMode設(shè)置娩梨,這里是個人對這個屬性值得一些理解,有不足還請包涵覆醇。