音視頻開發(fā)進(jìn)階:分辨率與幀率
發(fā)布日期:2023/1/29 11:31:19 瀏覽量:
轉(zhuǎn)自博客園 原文鏈接 https://brands.cnblogs.com/zego/p/15908 如有侵權(quán)請(qǐng)聯(lián)系我們刪除
在視頻系列的前幾篇推文中,我們已經(jīng)接觸了視頻相關(guān)的不少概念,它們都是圍繞著幾個(gè)核心角色 :色彩、像素、圖像和視頻來展開的。這幾個(gè)核心角色之間的關(guān)系,大家應(yīng)該都有了基本的了解,我們?cè)賮砗?jiǎn)單回顧一下。
從顏色空間到色彩: 通過特定的顏色空間 “ YUV “ 或 ” RGB ”,對(duì)色彩進(jìn)行定義;
從色彩到像素: 將定義、量化后的色彩信息記錄到像素中;
從像素到圖像: 一定數(shù)量、記錄了不同色彩信息的像素組合,得到一幀完整的圖像;
從圖像到視頻: 一幀幀圖像按 一定頻率 連續(xù)播放,得到了視頻。
以上,就是由像素點(diǎn)及圖像、由圖像及視頻的關(guān)系概述。你可能有關(guān)注到,在該概述中有兩個(gè)比較模糊的描述:一定數(shù)量 的像素,以及按 一定頻率 播放的圖像。那么問題來了,所謂 “數(shù)量” 和 “頻率”,究竟是如何定義的、具體取值是多少呢 ?它們對(duì)于視頻圖像會(huì)有哪些具體的影響?
何謂“一定數(shù)量”的像素?
“一定數(shù)量的、記錄了不同色彩信息的像素組合在一起,得到一幀完整的圖像”。
關(guān)于 “一定數(shù)量” 是如何定義的,在系列的上一篇推文中,我們就給出了標(biāo)準(zhǔn)答案:分辨率。分辨率的定義大家已初步了解,下面先回顧一下。
-
分辨率: 視頻圖像在水平方向、垂直方向上,每行、每列的像素?cái)?shù)量。比如:分辨率 1280 x 720(寬 x 高),即表示水平方向上每行有 1280 個(gè)像素,垂直方向上每列有 720 個(gè)像素;
-
分辨率寬、高相乘得到的數(shù)值,即為每幀圖像所含像素的總數(shù)。 比如:分辨率 1280 x 720(寬 x 高),即說明每幀圖像共包含 1280 x 720 = 921600 個(gè)像素
上述定義中,使用了一種常見的分辨率表示方式:“ 寬 x 高 ” ,實(shí)際應(yīng)用中還有其他表示方法,有的只關(guān)注 “高” 的屬性、有的只關(guān)注 “寬” 的屬性,常見的有:
-
1080P: 表示分辨率 1920 x 1080。P(Progressive)表示逐行掃描,1080P 表示垂直方向有 1080 行像素(“高” 的屬性)。類似的還有:360P(640x360)、540P(960x540)、720P(1280x720)等;
-
4K:表示分辨率 4096 x 2160 或 3840 x 2160。K 表示 "1000" 或 “千”,4K 表示水平方向有約 4000 列像素(“寬” 的屬性)。類似的還有 2K(2560 x 1440)、8K(7680 x 4320) 等等。
分辨率的定義,回答了關(guān)于 “一定數(shù)量” 的問題,但也僅僅是解釋了 “數(shù)量” 的定義,并沒有描述 “數(shù)量” 的影響。至于不同分辨率、不同數(shù)量的像素,究竟會(huì)給圖片帶來哪些影響,我們需要進(jìn)一步做討論。
分辨率的影響
所謂眼見為實(shí),對(duì)于視頻圖像而言,沒有比直接觀察更直觀的理解方式了。下面的幾幅圖,分別是同一個(gè)圖像畫面在 1 x 1、12 x 7、128 x 72、1280 x 720 等分辨率下的表現(xiàn),我們逐一觀察對(duì)比。
(注:在同一顯示設(shè)備上,單個(gè)像素的大小一般是相同的,像素越多、畫面面積越大。因?yàn)楫嫹@示限制,也為方便大家觀察,下述各圖像的尺寸有做一定縮放,不一定符合比例關(guān)系,但分辨率的大小關(guān)系不變。)
1 x 1 分辨率: 這是一個(gè)極端的例子,此時(shí)整張圖像只有一個(gè)像素(單像素的面積非常小,肉眼很難識(shí)別到,示例圖是放大之后的),只能表示一種顏色,看起來是一個(gè)純色的矩形塊,基本不包含有效的圖像信息。
12 x 7 分辨率: 我們有 84 個(gè)像素,相對(duì)于 1 個(gè)像素時(shí)可以表示更多的顏色。有了顏色區(qū)分后,我們可以看到畫面有了一些輪廓,但是整體還是糊成一團(tuán),但很難辨識(shí)到主體的特征。
128 x 72 分辨率 : 像素?cái)?shù)量增加到較可觀的 9216 個(gè),我們將有更多的像素來記錄畫面信息,畫面中的天空、企鵝等主體開始變得明朗、可分辨,但整體還是有些“朦朧”,缺少細(xì)節(jié),就像蒙著一層薄紗。
1280 x 720 分辨率: 像素?cái)?shù)量已接近十萬,我們將擁有足夠的像素來記錄畫面細(xì)節(jié),可以看到,企鵝的毛發(fā)、神情、姿態(tài),天空的云彩層次都變得 清晰,整個(gè)畫面愈發(fā)的 真實(shí)、細(xì)膩。
從完全不可辨識(shí),到模糊朦朧,再到清晰細(xì)膩,這就是分辨率由低到高所帶來的、最直觀的改變。
簡(jiǎn)單總結(jié),一般來說分辨率越高,像素越多,則圖像的 “可分辨度” 越高,畫面越清晰、細(xì)膩,細(xì)節(jié)也越充足生動(dòng)。 但注意,這里強(qiáng)調(diào)了“ 一般來說”,因?yàn)?nbsp;“分辨率”和“清晰度” 若要滿足 “正相關(guān)” 的關(guān)系,還需要考慮一些前提條件,如果忽略這些條件,你可能會(huì)遇到“分辨率越高,畫面卻越模糊”的問題。具體是哪些條件呢?我們待會(huì)要討論的內(nèi)容就會(huì)涉及這塊兒,在討論中揭曉答案。
音視頻處理路徑上的不同分辨率
在本課程的系列推文中,我們?cè)岬揭粢曨l數(shù)據(jù)的的主要處理路徑,主要包括采集/渲染、前/后處理、編碼/解碼、網(wǎng)絡(luò)傳輸收/發(fā)等環(huán)節(jié)。每一個(gè)環(huán)節(jié),都可能會(huì)修改音視頻數(shù)據(jù),而分辨率作為視頻圖像的基礎(chǔ)屬性,不可避免地會(huì)受到影響。
我們將常見的、分辨率可能變動(dòng)的位置標(biāo)識(shí)出來,可以得到下方的路徑圖:
上圖中有多種類型的“分辨率”,我們來逐一梳理。
1、采集分辨率
和音頻一樣,視頻圖像數(shù)據(jù)的處理一般從采集開始,首先要介紹的,便是 “采集分辨率” 。采集分辨率是從攝像頭等采集源獲取的、最原始圖像的分辨率。 物理攝像頭所支持的采集分辨率可以通過系統(tǒng) API 獲取,一般是個(gè)有限的集合。如果你要求攝像頭提供該集合之外的配置,它可能會(huì)返回集合內(nèi)的其他臨近值。
在采集之后,圖像數(shù)據(jù)會(huì)來到前處理階段,執(zhí)行諸如背景虛化、美顏、濾鏡等操作,前處理過后的視頻圖像分辨率,我們不妨稱之為 “前處理分辨率”。采集分辨率和前處理分辨率,均表示當(dāng)前處理環(huán)節(jié)上,一幀圖像所包含的原始像素?cái)?shù)量,而接下來的 “顯示分辨率” 有所不同。
2、顯示分辨率
當(dāng)我們需要渲染視頻圖像時(shí),比如在本地實(shí)現(xiàn)攝像頭的預(yù)覽,就會(huì)接觸到顯示分辨率。顯示分辨率指的是整個(gè)顯示器面板、或者某個(gè)指定的顯示區(qū)域上可用于圖像渲染的像素?cái)?shù)量,而不是原始圖像的分辨率。
“指定的顯示區(qū)域” 可以是某個(gè) View 布局組件、某個(gè)播放器窗口等等,該局部區(qū)域上的分辨率,是更靈活意義上的 “顯示分辨率”。如下圖所示,顯示分辨率指的是紅框內(nèi)的像素寬高。
顯示分辨率一般是固定的(尤其指的是整個(gè)顯示屏面板時(shí)),也可以使用寬、高方向的像素?cái)?shù)量來定義。比如 4K 屏、2K 屏,就是指顯示屏面板在水平方向上最多可容納 約 4000 列、2000 列像素。需要注意的是,顯示分辨率與顯示屏尺寸是不同的概念,后者使用長(zhǎng)度單位(英寸),一般取顯示面板的對(duì)角線長(zhǎng)度作為度量,比如常說的 27 寸、24 寸 屏。也正因度量標(biāo)準(zhǔn)不同,相同尺寸的顯示區(qū)域,可以有不同的分辨率。比如 27 英寸的顯示屏可能是 2K 的分辨率、也可能是 4K 的分辨率。
顯示尺寸相同時(shí),若顯示分辨率越高,則說明顯示器的像素越密集,意味著它可以更高密度地呈現(xiàn)畫面細(xì)節(jié),顯示效果越細(xì)膩,畫面擬真度越高。
3、編碼分辨率
除了用于本地預(yù)覽,前處理后的視頻圖像數(shù)據(jù)還要繼續(xù)走到編碼環(huán)節(jié),進(jìn)一步做壓縮處理后才能用于網(wǎng)絡(luò)傳輸。而在視頻編碼前,為了滿足特定的業(yè)務(wù)需求、或帶寬流量的控制需求,仍可能要修改分辨率,最終以 “編碼分辨率” 的配置輸出。
編碼后,視頻圖像數(shù)據(jù)從發(fā)送端啟程,經(jīng)過漫漫網(wǎng)絡(luò)傳輸鏈路,來到接收端。一般來說,若云端服務(wù)沒有對(duì)數(shù)據(jù)做特殊處理,解碼階段的解碼分辨率將和前序的編碼分辨率一致。解碼后的視頻數(shù)據(jù),會(huì)再經(jīng)由后處理環(huán)節(jié),最后渲染到顯示器上,相應(yīng)的也會(huì)有后處理分辨率和顯示分辨率。
假如,整個(gè)處理鏈路上所有的分辨率均相等,那么所有像素將一一對(duì)應(yīng)、“相安無事”。但如果某個(gè)環(huán)節(jié)設(shè)定的分辨率有變動(dòng),比如采集分辨率設(shè)置為 1280 x 720,顯示分辨率設(shè)置為 960 x 540,編碼分辨率設(shè)置為 1920 * 1080,我們應(yīng)該如何處理呢?
此時(shí),就需要引出一個(gè)基礎(chǔ)、卻又常用到的視頻圖像處理技術(shù):縮放。
分辨率的縮放
視頻圖像的縮放指的是分辨率的縮放,也就是放大或縮小分辨率。很多應(yīng)用場(chǎng)景都會(huì)涉及到分辨率的縮放。比如從 1080P 的采集分辨率縮小至 720P 的編碼分辨率,以減少傳輸帶寬占用;將分辨率為 720P 的圖像,縮小到 360P 的窗口上預(yù)覽,或者放大到 1080P 的顯示器上全屏播放等等。
圖像在縮放時(shí),像素?cái)?shù)量會(huì)隨分辨率的變化而增減。但要注意的是,像素的減少并非通過隨機(jī)地 “刪除” 來完成,像素的增加也不是通過憑空 “捏造” 來實(shí)現(xiàn)的。兩種操作都需要在原有像素的基礎(chǔ)上,使用縮放算法計(jì)算得到新的像素,然后重建出新的圖片。
1、分辨率縮放的基本原理
首先,對(duì)于分辨率為 W x H 的圖像,我們可以將其映射到一個(gè)二維坐標(biāo)系上,每個(gè)像素對(duì)應(yīng)一個(gè)坐標(biāo)點(diǎn),假設(shè)左下角像素的坐標(biāo)為(0,0),則右上角像素的坐標(biāo)為 (W,H)。由于像素的分布是離散、有限的,它們的坐標(biāo)也都是整數(shù)組合,比如(0,0)、(0,1)、(1,1)、…… 、(W,H)。
現(xiàn)在,假設(shè)需要將分辨率為 W0 x H0 的原始圖像,縮放至分辨率 W1 x H1 的目標(biāo)圖像。我們先對(duì)兩個(gè)圖像分別建立坐標(biāo)系,則二者的像素坐標(biāo)可分別表示為 P0 ( x0, y0 )、 P1 ( x1 , y1 ) 。縮放的過程,就是已知原圖上的像素,求取目標(biāo)圖像的像素 P1 的值過程。
那么,我們?nèi)绾斡?jì)算像素 P1 的值呢?
首先,我們注意到縮放雖然改變了圖像的像素尺寸,但仍會(huì)保留圖像的內(nèi)容、色彩,也即變化前后的像素值是相同或相似的。最理想的情況,就是能在原始圖像上取實(shí)際存在的 P0 ,將其像素值直接賦給 P1。假設(shè),縮放前后的分辨率未發(fā)生改變( W0 = W1,H0 = H1),那么目標(biāo)圖像的 P1 ( 0 , 0 ) 在原始圖像中的映射即為 P0 ( 0, 0 ),P1 ( 1 , 1 ) 的映射為 P0 ( 1, 1 ),P1 ( 2, 2 ) 的映射為 P0 ( 2, 2 ) ……,整型坐標(biāo)的 P0 都是原始圖像中已知的像素,可以直接取值和賦值給對(duì)應(yīng)的 P1。
如果非理想的情況,縮放前后的分辨率發(fā)生了改變,該怎么處理?該如何確定 P1 ( x1 , y1 ) 在原始圖像上的映射點(diǎn)?
其實(shí),由于圖像的縮放是在二維尺度上,對(duì) “高度”、“寬度” 的伸縮變換,作為圖像的最小單位,像素坐標(biāo)的縮放也可以一視同仁。
從分辨率 W0 x H0 ,變化到分辨率 W1 x H1 ,寬高上的縮放尺度為:
- W_scale = W1/W0 = x1/x0
- H_scale = H1/H0 = y1/y0
所以,縮放前后,對(duì)應(yīng)像素的坐標(biāo)基本映射關(guān)系為:
- x0 = x1 * (W0 / W1)
- y0 = y1 * (H0 / H1)
也即,目標(biāo)圖像的點(diǎn) P1 ( x1 , y1 ),在原始圖像上的映射為 P0 ( x1 * (W0 / W1),y1 * (H0 / H1) )。
顯然,在分辨率不變的理想情況下,W0 / W1 = H0 / H1 = 1,P1 ( x1 , y1 ) 在原始圖像上的映射為 P0 ( x1 ,y1 ),符合我們的推演。而在分辨率變動(dòng)的情況下, P0 ( x1 * (W0 / W1),y1 * (H0 / H1) ) 可能會(huì)得到非整數(shù)的坐標(biāo),非整數(shù)坐標(biāo)的像素在原圖上是不存在的。
舉個(gè)例子:原始圖像分辨率 W0 x H0 = 100 x 100,目標(biāo)圖像分辨率 W1 x H1 = 1000 x 1000,此時(shí)目標(biāo)圖像 P1 ( x1 , y1 ) 在原始圖像上的映射為 P0 ( x1 * 0.1 ,y1 * 0.1),有如下映射關(guān)系:
對(duì)于實(shí)際存在于原圖的映射點(diǎn),可以將原圖中該像素的值直接賦給 P1。對(duì)于實(shí)際不存在于原圖的映射點(diǎn),就要通過 特定算法 “估算” 其像素值,再賦值給 P1。特定算法 一般基于插值算法實(shí)現(xiàn),常見的插值算法又包括 最鄰近插值法、雙線性插值法、雙三次插值法等。這幾種插值算法的基本原理,如下方表格所示,大家做簡(jiǎn)單了解即可。對(duì)于具體的算法解析,在本系列中不做延伸,感興趣的同學(xué)可以查閱資料進(jìn)一步學(xué)習(xí)。
以上的“鄰近像素”,指的是在原始圖像中實(shí)際存在的像素,像素坐標(biāo)為整型。比如,P0(0.1,0.1) 在原圖中不存在,取其周圍 4 個(gè)實(shí)際存在的鄰近像素,即為 P(0,0),P(0,1),P(1,0),P(1,1)。
基于上面描述的 “找映射點(diǎn)”、“求映射值” 兩個(gè)步驟,完成目標(biāo)圖像上的所有像素值的計(jì)算,最后進(jìn)行圖片的重建,這就是圖像縮放的基本原理。我們發(fā)現(xiàn),基于映射、插值、計(jì)算、重建的過程,縮放后的圖像會(huì)包含很多 “創(chuàng)造” 出來的像素。即使是分辨率放大、像素?cái)?shù)量增多時(shí),也并沒有得到比原始圖像更多的內(nèi)容細(xì)節(jié)。圖像的縮放往往會(huì)導(dǎo)致圖像細(xì)節(jié)的丟失,出現(xiàn)鋸齒和模糊等問題,分辨率變化越大、畫質(zhì)劣化可能越嚴(yán)重,我們不能再單純地認(rèn)為:分辨率越高、畫面越清晰細(xì)膩。
當(dāng)然,實(shí)際應(yīng)用中,可能存在這樣的需求:從原始低分辨率的圖像、重建出高分辨圖像,并且期望畫質(zhì)不降低、甚至畫質(zhì)更高。比如,考慮網(wǎng)絡(luò)帶寬或編碼端設(shè)備性能的限制,無法滿足高分辨率的采集、編碼和傳輸需求,需要實(shí)現(xiàn)推流 “低清” 編碼、“低碼”傳輸、拉流 “高清” 渲染,在不增加傳輸帶寬壓力和成本的前提下提升畫質(zhì)。此時(shí),常規(guī)的縮放算法將無法滿足需求,可以通過 “ 超分辨率 ”(Super Resolution,SR,超分)方式來實(shí)現(xiàn)高清重建。
隨著深度學(xué)習(xí)技術(shù)的發(fā)展和設(shè)備算力的提升,基于AI算法的超分技術(shù)開始在RTC領(lǐng)域嶄露頭角,ZEGO也有自研的AI超分技術(shù),目前已應(yīng)用落地,支持在本地實(shí)現(xiàn)分辨率兩倍放大、并提升清晰度和紋理細(xì)節(jié)。關(guān)于ZEGO超分技術(shù)的具體實(shí)踐,感興趣可點(diǎn)擊閱讀:“即構(gòu)移動(dòng)端超分技術(shù)解析”。
2、分辨率縮放的相關(guān)問題
在了解縮放的基本原理后,我們來看看在實(shí)際的音視頻應(yīng)用開發(fā)過程中,關(guān)于分辨率縮放的常見問題。
問題一:畫面模糊問題
編碼分辨率越高、或顯示分辨率越高,畫面越模糊。若僅考慮分辨率這塊,結(jié)合音視頻數(shù)據(jù)處理路徑以及縮放的原理,可能有如下原因:
-
設(shè)定的采集分辨率低于編碼分辨率。比如設(shè)置采集 180P,卻使用了 720P 的編碼;
-
圖像原始分辨率低于顯示分辨率。比如原始圖像為 180P,卻期望在 720P、 1080P 甚至 2K 的屏幕上做全屏顯示。
以上場(chǎng)景必然涉及到分辨率的放大,若使用常規(guī)的縮放算法,原始圖像的細(xì)節(jié)太少,縮放后 “估算” 的像素太多,往往會(huì)導(dǎo)致畫面變模糊。為避免此類問題,我們一般建議開發(fā)者盡可能使用相同的采集分辨率、編碼分辨率和顯示分辨率。一方面可以避免常規(guī)縮放(尤其是分辨率放大)導(dǎo)致的畫質(zhì)劣化,一方面也能減小由縮放引入的性能開銷。如果在實(shí)際需求場(chǎng)景中無法滿足各分辨率一致,也至少要保證采集分辨率大于編碼分辨率或顯示分辨率。
問題二:關(guān)于黑邊、畫面被裁剪、畫面拉伸問題
圖像渲染時(shí),出現(xiàn)畫面有黑邊、畫面被裁剪(視角變窄)、畫面被拉伸等情況。
一般來說,當(dāng)圖像分辨率與顯示分辨率不一致,需要將圖像進(jìn)行適當(dāng)縮放后再顯示時(shí),我們都期望圖像縮放后畫面比例不變,且和顯示區(qū)域應(yīng)完全契合。這就要求圖像分辨率與顯示分辨率的寬高比例相同。
比如圖像分辨率為 1280 x 720(寬 x 高,16:9) ,顯示分辨率為 1920 x 1080(寬x高,16:9),則縮放時(shí)寬和高都等比放大 1.5 倍,畫面比例不變。如果兩種分辨率的寬高比例不相同,比如圖像分辨率為 1280 x 720(寬x高,16:9) ,顯示分辨率為 1080 x 1920(寬 x 高,9:16),無論選取寬、還是高作為基準(zhǔn),都無法在保證原圖比例的前提下進(jìn)行等比縮放,自然也無法保證圖像在變化后完美契合顯示區(qū)域。此時(shí),我們需要參考一些常見的渲染策略,進(jìn)行取舍。
-
策略一:等比縮放并自適應(yīng)(Aspect Fit)
縮放時(shí),保持圖片的原寬高比例,渲染時(shí)優(yōu)先顯示全圖,顯示區(qū)域可能會(huì)有黑邊。
該策略下,我們選擇寬高變化較小的尺度,對(duì)原圖寬高做等比例縮放。比如 1280 x 720(寬 x 高,16:9) 縮放至 1080 x 1920(寬 x 高,9:16),寬的變化比例為 1080/1280 ≈ 84.375%,高的變化比例為 1920/720 ≈ 266.667%。我們?nèi)∑渲械妮^小尺度,將寬、高均縮小至 84.37%??s放后的圖像分辨率為 1080 x 608,該分辨率的寬與顯示分辨率的寬契合,但該分辨率的高小于顯示分辨率的高,所以顯示區(qū)域的高度方向無法完全渲染(一般用黑色填充,并將畫面居中),如下圖:
注:紅框部分為顯示分辨率區(qū)域
- 策略二:等比縮放并填充(Aspect Fill)
縮放時(shí),保持圖片的原寬高比例,渲染時(shí)優(yōu)先填滿全屏,畫面可能會(huì)被裁減。
該策略下,我們選擇寬高變化較大的尺度,對(duì)原圖寬高做等比例縮放。同樣取 1280x720(寬 x高,16:9) 縮放至 1080 x 1920(寬 x 高,9:16)的案例,我們?nèi)∑渲械膶捀咦兓妮^大尺度,將寬、高均放大至 266.667%,縮放后的圖像分辨率為 3413 x 1920,該分辨率高等于顯示分辨率高,但分辨率寬遠(yuǎn)大于顯示分辨率寬,顯示區(qū)域的寬度方向無法完全容納圖片的水平像素,超出的部分畫面被裁剪,如下圖:
注:該策略下,縮放后圖片分辨率大于顯示分辨率,只能顯示圖片局部。但具體顯示哪一部分、裁減掉哪一部分,仍需要確認(rèn)。上圖默認(rèn)為基于圖像最左側(cè)來顯示,將最右側(cè)超出顯示區(qū)域的部分裁減掉。
-
策略三:自由縮放并填充(Scale Fill)
縮放時(shí),可以改變圖片的寬高比例,渲染時(shí)顯示全圖并填滿全屏,畫面可能會(huì)被拉伸。
該策略下,我們將圖像分辨率的寬、高分別縮放至顯示分辨率的寬、高。同樣取 1280x720(寬x高,16:9) 縮放至 1080x1920(寬x高,9:16)的案例,我們將圖像分辨率寬縮小至 84.37%,但是高放大至 266.667%,縮放后圖像分辨率寬、高等于顯示分辨率寬、高,實(shí)現(xiàn)了全屏顯示,沒有黑邊。但因圖像比例變化,導(dǎo)致畫面出現(xiàn)拉伸。如下圖,縮放顯示后,企鵝變 “高” 變 “瘦” 了。
以上常見的渲染策略告訴我們:同一原始分辨率的圖片,可以渲染到不同顯示分辨率的屏幕上。但實(shí)際顯示效果將取決于兩種分辨率的關(guān)系(大小、比例)。
一般來說,要保證圖像顯示優(yōu)先且接受黑邊時(shí),我們選用等比縮放并自適應(yīng)(Aspect Fit);要保證界面美觀而要求全屏顯示、并不改變畫面比例時(shí),我們選用等比縮放并填充(Aspect Fill),此時(shí),寬高縮放的差異不能太大,否則會(huì)導(dǎo)致畫面被過渡裁剪。一般很少會(huì)選擇自由縮放并填充(Scale Fill),除非是對(duì)于畫面比例沒有保真要求的場(chǎng)景,比如純色圖片的全屏顯示。
另外,正如前面提到的,在實(shí)際應(yīng)用中,我們往往需要在某個(gè)指定的顯示區(qū)域 上渲染圖片,那么該 “指定區(qū)域” 上的局部分辨率,也是更靈活意義上的 “顯示分辨率”,大家需要對(duì)渲染結(jié)果有正確的預(yù)期,并靈活選擇符合需求的策略。
分辨率的選擇
綜合前面討論的諸多影響因素,在沒有縮放處理的前提下我們可以說:提高圖像的原始分辨率,可以帶來更清晰細(xì)膩的畫面。高畫質(zhì)當(dāng)然是我們的合理追求,但這是否意味著,我們要始終追求一個(gè)極高的分辨率呢?答案當(dāng)然是否定的。
系列推文中,類似問題我們已討論多次。實(shí)際應(yīng)用場(chǎng)景中基于種種制約,我們往往都是“戴著鐐銬”在舞蹈。比如音頻相關(guān)的參數(shù),音頻采樣率、位深、碼率等等,都是綜合考慮需求&限制,選取了一個(gè)“折中”值。視頻分辨率自然也是如此,高分辨率往往意味著機(jī)器性能的消耗越高、視頻圖像的數(shù)據(jù)量越大、傳輸帶寬的占用越多、成本越高,這勢(shì)必會(huì)影響弱網(wǎng)環(huán)境下或低配機(jī)器上的使用體驗(yàn),我們也需要根據(jù)場(chǎng)景選擇合適的分辨率。
一般RTC 場(chǎng)景下常用的、合適的分辨率有:
一般來說,RTC 場(chǎng)景下很少使用 1080P 以上的分辨率,尤其是在移動(dòng)端,更高配置的顯示效果較難拉開差距,反而會(huì)極大提高傳輸帶寬、設(shè)備性能的壓力,收益不高。另外,表格中所列并非相應(yīng)場(chǎng)景的固定選擇,更非有限選擇,實(shí)際場(chǎng)景使用哪種分辨率更合適,仍需基于業(yè)務(wù)、產(chǎn)品的需求,實(shí)際測(cè)試和體驗(yàn)后才能做定奪。
總結(jié)
至此,關(guān)于何謂 “ 一定數(shù)量 ” 的討論,就告一段落了,希望大家通過本篇推文能夠?qū)τ?“ 分辨率 ” 有進(jìn)一步地認(rèn)識(shí)。我們下一篇推文,會(huì)繼續(xù)就另一個(gè)話題: “一定頻率” 的定義和影響,做相關(guān)討論。最后我們通過一個(gè)思維導(dǎo)圖,總結(jié)一下本文的主要內(nèi)容。
問
本期思考題
關(guān)于本文中的舉例,圖像分辨率為 1280x720(寬x高,16:9),顯示分辨率為 1080x1920(寬x高,9:16),有什么辦法,可以實(shí)現(xiàn)全屏顯示、不拉伸且不裁剪圖像畫面嗎?
(??下期揭秘)
上期思考題揭秘 ??
Q:參考推文中的舉例,假設(shè)原圖的 Width x Height = 6 x 8,存儲(chǔ)時(shí)將 Stride 對(duì)齊為 8。當(dāng)使用 Stride = 8,Width = 4,進(jìn)行讀取和渲染,會(huì)出現(xiàn)什么問題?
A:若使用正確的配置, Stride = 8 進(jìn)行讀取,Width = 6 進(jìn)行渲染,則僅會(huì)顯示出彩色部分, 黑色部分的 Padding 在渲染時(shí)會(huì)被忽略。
若使用正確的 Stride = 8,錯(cuò)誤的 Width = 4,會(huì)出現(xiàn)如下問題:數(shù)據(jù)讀取邏輯正常,但是計(jì)算機(jī)會(huì)以 Width = 4 進(jìn)行渲染,實(shí)際只渲染了部分圖像,其余部分(圖中紫色和黃色部分)都被當(dāng)做 Padding 處理。顯示出來的畫面是被裁減的。
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗(yàn)積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生