前些時(shí)間孤钦,我在知識星球上創(chuàng)建了一個(gè)音視頻技術(shù)社群:關(guān)鍵幀的音視頻開發(fā)圈诡必,在這里群友們會一起做一些打卡任務(wù)。比如:周期性地整理音視頻相關(guān)的面試題,匯集一份音視頻面試題集錦闰挡,你可以看看這個(gè)合集:音視頻面試題集錦。再比如:循序漸進(jìn)地歸納總結(jié)音視頻技術(shù)知識词顾,繪制一幅音視頻知識圖譜蠕趁,你可以看看這個(gè)合集:音視頻知識圖譜。
下面是 2022.11 月知識圖譜新增的內(nèi)容節(jié)選:
1)圖譜路徑:渲染/AspectRatios
- PAR(Pixel Aspect Ratio)迁霎,單個(gè)像素的寬高比吱抚。大多數(shù)情況像素寬高比為 1:1,是一正方形像素考廉。如果不是 1:1秘豹,則為長方形像素。常用的 PAR 有:1:1昌粤、10:11既绕、40:33啄刹、16:11、12:11凄贩。
- SAR(Sample Aspect Ratio)誓军,采樣縱橫比。表示橫向的像素點(diǎn)數(shù)和縱向的像素點(diǎn)數(shù)的比值疲扎,即我們通常提到的分辨率的寬高比昵时。比如 VGA 圖像 SAR 是 640/480=4:3,D-1 PAL 圖像 720/576=5:4 等评肆。
- DAR(Display Aspect Ratio)债查,顯示寬高比。即最終播放出來的畫面的寬高比瓜挽。比如常見的 16:9盹廷、4:3 等【贸龋縮放視頻也要按這個(gè)比例來俄占,否則會使圖像看起來被拉伸了。
- 關(guān)系:PAR x SAR = DAR 或 PAR = DAR / SAR
- 播放器處理:播放器標(biāo)準(zhǔn)的播放流程淆衷,應(yīng)該是先找視頻容器格式也就是 container 中的 DAR缸榄,按這個(gè)比例來顯示視頻,進(jìn)行播放祝拯;如果沒有 DAR 的話甚带,則使用 SAR 進(jìn)行視頻顯示。
- 視頻制式:視頻制式按照錄制設(shè)備可以分為計(jì)算機(jī)制式和電視制式佳头。計(jì)算機(jī)制式的 PAR 常為 1:1鹰贵,而電視制式的 PAR 通常不是 1:1,電視制式又分為 NTSC 或 PAL 制式康嘉,它們的 PAR 又可能不同碉输。
2)圖譜路徑:渲染/圖像渲染技術(shù)/OpenGL
- OpenGL:一套跨語言、跨平臺亭珍,支持 2D敷钾、3D 圖形渲染接口。這套接口由一系列的函數(shù)組成肄梨,定義了如何對簡單及復(fù)雜的圖形進(jìn)行繪制阻荒。這套接口涉及到對設(shè)備的圖像硬件進(jìn)行調(diào)用,因此在不同的平臺基于這套統(tǒng)一接口做了對應(yīng)的實(shí)現(xiàn)众羡。
- OpenGL ES:OpenGL 的子集财松,是針對手機(jī)和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì),去除了許多不必要和性能較低的 API 接口纱控。
- OpenGL 在程序中角色:OpenGL 位于 GPU 驅(qū)動和平臺圖形繪制 API 之間辆毡;也可以直接使用用于圖形繪制。驅(qū)動 GPU 芯??效圖形渲染甜害。
- OpenGL 的渲染架構(gòu):OpenGL 的渲染架構(gòu)是 Client/Server 模式舶掖。我們開發(fā)的過程就是不斷用 Client 通過 OpenGL 提供的通道去向 Server 端傳輸渲染指令,來間接的操作 GPU 芯片尔店。Client 向 Server 傳遞參數(shù)和渲染信息的通道:
- Attribute(屬性通道):通常用來傳遞經(jīng)痴H粒可變參數(shù)。
- Uniform(統(tǒng)一變量通道):通常用來傳遞不變的參數(shù)嚣州。
- Texture Data(紋理通道):專門用來傳遞紋理數(shù)據(jù)的通道鲫售。
- OpenGL 狀態(tài)機(jī):一系列的變量描述 OpenGL 此刻應(yīng)當(dāng)如何運(yùn)行。OpenGL 的狀態(tài)通常被稱為 OpenGL 上下文(Context)该肴。我們通常使用如下途徑去更改 OpenGL 狀態(tài):設(shè)置選項(xiàng)情竹,操作緩沖。最后匀哄,我們使用當(dāng)前 OpenGL 上下文來渲染秦效。
- OpenGL 圖形渲染管線:頂點(diǎn)著色器 → 圖元裝配 → 幾何著色器 → 光柵化 → 片段著色器 → 測試與混合
- EGL:OpenGL ES 渲染 API 和本地窗口系統(tǒng)之間的一個(gè)中間接口層,它主要由系統(tǒng)制造商實(shí)現(xiàn)涎嚼。
- OpenGL ES 系統(tǒng)與本地窗口(UIKit)系統(tǒng)的橋接由 EAGL 上下文系統(tǒng)實(shí)現(xiàn)阱州。
- 與 Android EGL 不同的是,iOS EAGL 不會讓應(yīng)用直接向 BackFrameBuffer 和 FrontFrameBuffer 進(jìn)行繪制法梯,也不會讓應(yīng)用直接控制雙緩沖區(qū)的交換(swap)苔货,系統(tǒng)自己保留了這些操作權(quán),以便可以隨時(shí)使用 Core Animation 合成器來控制顯示的最終外觀立哑。
- Display 是對實(shí)際顯示設(shè)備的抽象夜惭。在 Android 上的實(shí)現(xiàn)類是 EGLDisplay。
- Surface 是對用來存儲圖像的內(nèi)存區(qū)域 FrameBuffer 的抽象刁憋,包括 Color Buffer滥嘴、Stencil Buffer、Depth Buffer至耻。在 Android 上的實(shí)現(xiàn)類是 EGLSurface若皱。
- Context 存儲 OpenGL ES 繪圖的一些狀態(tài)信息。在 Android 上的實(shí)現(xiàn)類是 EGLContext尘颓。
- 與設(shè)備的原生窗口系統(tǒng)通信走触;
- 查詢繪圖圖層的可用類型和配置;
- 創(chuàng)建繪圖圖層疤苹;
- 在 OpenGL ES 和其他圖形渲染 API 之間同步渲染互广;
- 管理紋理貼圖等渲染資源。
- Android EGL
- iOS EGL = EAGL(Embedded Apple Graphics Library)
- VBO、EBO 和 VAO
- VBO(Vertex Buffer Objects)頂點(diǎn)緩沖區(qū)對象惫皱,指的是在 GPU 顯存里面存儲的頂點(diǎn)數(shù)據(jù)(位置像樊、顏色)。
- EBO/IBO(Element/Index Buffer Object)索引緩沖區(qū)對象旅敷,存儲索引來達(dá)到減少重復(fù)數(shù)據(jù)生棍。
- VAO(Vertex Array Object)頂點(diǎn)數(shù)組對象。
- VBO 和 EBO 的作用是在 GPU 顯存中開辟一塊存儲空間來緩存頂點(diǎn)數(shù)據(jù)或者圖元索引數(shù)據(jù)媳谁,避免每次繪制時(shí) CPU 內(nèi)存到 GPU 顯存的數(shù)據(jù)拷貝涂滴,從而提升渲染性能。
- VAO 的作用是管理 VBO 或 EBO晴音,減少 glBindBuffer柔纵、glEnableVertexAttribArray、glVertexAttribPointer 這些調(diào)用操作锤躁,高效地實(shí)現(xiàn)在頂點(diǎn)數(shù)組配置之間切換搁料。
- FBO:幀緩沖區(qū)對象 FBO(Frame Buffer Object)
- 默認(rèn)的幀緩沖區(qū)(Default Frame Buffer):在建立了 OpenGL 的渲染環(huán)境后,我們相當(dāng)于有了一只畫筆和一塊默認(rèn)的畫布进苍,這塊畫布就是我們的屏幕加缘,是一塊默認(rèn)的幀緩沖區(qū)(Default Frame Buffer)。
- 離屏渲染:我們可以認(rèn)為 OpenGL 的 FBO 就相當(dāng)于是模擬了默認(rèn)幀緩沖區(qū)的功能和結(jié)構(gòu)創(chuàng)建了一種可以作為『畫布』使用的 Object觉啊。從而支持離屏渲染拣宏。
- 附著與附件:FBO 并不是一個(gè)真正的緩沖區(qū),因?yàn)?OpenGL 并沒有為它分配存儲空間去存儲渲染所需的幾何杠人、像素?cái)?shù)據(jù)勋乾,它是一個(gè)指針的集合,這些指針指向了顏色緩沖區(qū)嗡善、深度緩沖區(qū)辑莫、模板緩沖區(qū)、累積緩沖區(qū)等這些真正的緩沖區(qū)對象罩引,我們把這里的指向關(guān)系叫做『附著』各吨。附著點(diǎn)類型有:顏色附著、深度附著和模板附著袁铐。這些附著點(diǎn)指向的緩沖區(qū)通常包含在某些對象里揭蜒,我們把這些對象叫做『附件』。附件的類型有:紋理(Texture)或渲染緩沖區(qū)對象(Render Buffer Object剔桨,RBO)屉更。
3)圖譜路徑:渲染/伽馬校正
伽馬校正的歷史:
- 顯示伽馬(Display Gamma)
- 人們在使用 CRT 時(shí)發(fā)現(xiàn)它有一個(gè)問題:調(diào)節(jié)電壓為原來的 n 倍,對應(yīng)的屏幕發(fā)光亮度并沒有提高 n 倍洒缀,而是一個(gè)類似冪律曲線的關(guān)系瑰谜。典型的 CRT 顯示器產(chǎn)生的亮度約為輸入電壓的 2.2 次冪欺冀,這個(gè)就是『顯示伽馬』。
- 伽馬校正(Gamma Correction)
- 由于顯示伽馬問題的存在萨脑,為了使最終顯示出來的圖像亮度與捕捉到的真實(shí)場景的亮度是成線性比例關(guān)系隐轩,就需要在將圖像輸入到顯示器之前對信號進(jìn)行一個(gè)修正,這個(gè)修正過程就叫做『伽馬校正』砚哗。
- 編碼伽馬(Encoding Gamma)
- 修正顯示伽馬過程增加的伽馬則叫做『編碼伽馬』龙助。
- 增加編碼伽馬通常是在圖像采集設(shè)備的電路中完成的。
- 端到端伽馬(End-to-End Gamma)
- 編碼伽馬和顯示伽馬的乘積就是整個(gè)圖像系統(tǒng)的『端到端伽馬』蛛芥。
- 如果端到端伽馬乘積為 1,那么顯示出來的圖像亮度與捕捉到的真實(shí)場景的亮度就是成線性比例的军援。
- 額外收益
- 伽馬校正的所做非線性轉(zhuǎn)換過程除了解決顯示伽馬的問題外仅淑,還帶來了一個(gè)額外收益:傳輸期間增加的噪聲(模擬信號時(shí)代),在噪聲比較明顯的較暗信號區(qū)域(在接收器做了伽馬校正后)會被減少胸哥。因?yàn)槲覀兊囊曈X系統(tǒng)對相對亮度差別是敏感的涯竟,經(jīng)過伽馬校正后的非線性梯度明顯對人眼感知來說更均勻。
伽馬校正技術(shù)的延伸:
- sRGB 顏色空間
- 2.2 是大多數(shù) CRT 顯示器的平均 Gamma 值空厌÷基于這個(gè)原因,1996 年嘲更,惠普與微軟選擇 Gamma 校準(zhǔn)系數(shù)為 2.2 的顏色空間作為一種標(biāo)準(zhǔn)推出作為生成在因特網(wǎng)上瀏覽的圖像的通用顏色空間筐钟,這就是 sRGB(Standard RGB)顏色空間,這是一個(gè)非線性的顏色空間赋朦。
- sRGB 顏色空間得到了眾多廠商支持篓冲,這樣一來,遵循 sRGB 標(biāo)準(zhǔn)的圖像處理都在這個(gè)非線性顏色空間中處理即可宠哄。
- LCD 顯示器向前兼容顯示伽馬
- LCD 顯示器本身確實(shí)沒有 CRT 顯示器的伽馬效應(yīng)壹将,但是為了兼容性,LCD 以及其他非 CRT 顯示設(shè)備都模擬了這個(gè)伽馬效應(yīng)以實(shí)現(xiàn)先前兼容毛嫉,甚至可以支持動態(tài)調(diào)節(jié)伽馬參數(shù)诽俯。
- 光電轉(zhuǎn)換函數(shù)設(shè)計(jì)目標(biāo)面向人眼的特性而非顯示伽馬
- 因?yàn)槿搜蹖α炼雀兄欠蔷€性的特點(diǎn),我們可以用更多的碼率來編碼人眼敏感的中等亮度或暗部細(xì)節(jié)承粤,從而使得編碼在討好人眼上有更好的 ROI暴区。這樣一來,我們在采集電路中采集到光信號向電信號轉(zhuǎn)換時(shí)密任,通常會將其轉(zhuǎn)換為非線性信號颜启,以利于我們做編碼,因此在傳感數(shù)據(jù)上做伽馬校正仍然是有用的浪讳。只是我們的伽馬曲線參數(shù)要做調(diào)整了缰盏,曲線參數(shù)的目標(biāo)不再是面向之前的 CRT 顯示伽馬,而是面向人眼的特性。這就有了后續(xù)的光電轉(zhuǎn)換函數(shù)(Optical-Electro Transfer Function)和電光轉(zhuǎn)換函數(shù)(Electro-Optical Transfer Function)口猜。
- PQ(Perceptual Quantizer负溪,感知量化)曲線的設(shè)計(jì)更接近人眼的特點(diǎn),亮度表達(dá)更準(zhǔn)確济炎。
- HLG(Hybrid Log Gamma川抡,混合對數(shù)伽馬)曲線在低亮度區(qū)域基本與 Gamma 曲線重合,所以提供了與 SDR 顯示設(shè)備很好的兼容性须尚。
- 線性顏色空間仍有使用場景
- 計(jì)算機(jī)視覺的一些圖像處理場景崖堤,還是需要圖像的亮度信息在線性顏色空間中才能進(jìn)行處理,這時(shí)候則需要撤銷伽馬校正后再進(jìn)行處理耐床。在處理完成后密幔,將圖像輸入顯示器之前再重新做伽馬校正。
4)圖譜路徑:渲染/HDR
- HDR 與 SDR 的區(qū)別:
- SDR 支持的亮度范圍在 0.1nit 到 100nit 之間撩轰,使用 Rec.709/sRGB 色域胯甩,并使用 Gamma 曲線來作為它的電光轉(zhuǎn)換函數(shù)
- HDR 支持更大的亮度范圍(0.0005-10000nit)、更寬廣的色域(BT.2020)堪嫂、更高精度的量化(10bit 或 12bit)偎箫,轉(zhuǎn)換函數(shù)使用 PQ 或 HLG。
- HDR 視頻畫面可以展現(xiàn)出更多的亮部和暗部細(xì)節(jié)皆串,畫面擁有豐富的色彩和生動自然的細(xì)節(jié)表現(xiàn)淹办,因此畫面更接近人眼所見。
- SDR 和 HDR 的轉(zhuǎn)換函數(shù):
- BT.709 Gamma(SDR)
- HLG(HDR):HLG(Hybrid Log Gamma愚战,混合對數(shù)伽馬)曲線是另外一個(gè)重要的 HDR 轉(zhuǎn)換函數(shù)曲線娇唯,由 BBC 和 NHK 公司開發(fā)。這個(gè)曲線與 PQ 曲線不同寂玲,HLG 規(guī)定的是 OETF 曲線塔插,因?yàn)樵诘土炼葏^(qū)域基本與 Gamma 曲線重合,所以提供了與 SDR 顯示設(shè)備很好的兼容性拓哟,在廣播電視系統(tǒng)里有著廣泛的應(yīng)用想许。HLG 曲線最早在 ARIB STD-B67 中進(jìn)行了標(biāo)準(zhǔn)化,后面也進(jìn)入了 ITU-R BT.2100断序。
- PQ-SMPTE ST2084(HDR):PQ(Perceptual Quantizer流纹,感知量化)曲線的設(shè)計(jì)更接近人眼的特點(diǎn),亮度表達(dá)更準(zhǔn)確违诗∈基于人眼的對比敏感度函數(shù)(Contrast Sensitivity Function,CSF)诸迟,在 SMPTE ST 2084 標(biāo)準(zhǔn)中規(guī)定了 EOTF 曲線茸炒。亮度范圍可從最暗 0.00005nit 到最亮 10000nit愕乎。PQ 曲線最早是由 Dolby 公司開發(fā)的,并且在 ST 2084 中進(jìn)行了標(biāo)準(zhǔn)化壁公。
- HDR 視頻轉(zhuǎn) SDR 視頻:
- 1感论、HDR 非線性電信號轉(zhuǎn)為 HDR 線性光信號(EOTF)
- 2、HDR 線性光信號做顏色空間轉(zhuǎn)換(Color Space Converting)紊册,通常是從 BT.2020 轉(zhuǎn)換到 BT.709
- 3比肄、HDR 線性光信號色調(diào)映射為 SDR 線性光信號(Tone Mapping)
- 4、SDR 線性光信號轉(zhuǎn) SDR 非線性電信號(OETF)
下面是 2022.11 月的知識圖譜新增內(nèi)容快照:
圖片
2022.11 知識圖譜新增內(nèi)容