<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    視頻編解碼器 2020-比賽開始!


    作者:Tamar Shoham

    翻譯:Coco Liang

    技術審校/特別感謝:李大龍(騰訊視頻移動端播放內核技術負責人)

    原文鏈接:https://blog.beamr.com/2020/05/28/video-codecs-in-2020-the-race-is-on/

    引言

    目前已有不少可應用于視頻流媒體服務的視頻編解碼器,而且今年還將發布更多。諸多的方案給視頻服務商帶來了選擇困難癥,因為他們需要為自己選擇合適的編解碼器,以確保為用戶傳送的音畫內容能具備盡可能好的質量和最低的比特率,同時還要考慮到編碼器對計算資源的要求。

    多年來,選擇視頻編解碼器一直都是很簡單的事:?從上世紀90年代末接替數字電視的MPEG-2(H. 262)開始,到千禧年早期(2000年初期)主導視頻會議的?MPEG-4 Part 2(H. 263)?,再到之后的?MPEG4 Part 10即?AVC (H. 264)?,后者在大多數視頻業務應用,包括傳輸、會議和監控等在內的市場中一直享有巨大的份額。

    與上述國際標準化組織發展編解碼器的同時代,谷歌為YouTube 作出了順應自然的選擇,即他們自己的視頻編解碼器?VP9。

    HEVC在2013年批準成為國際標準時,本應合乎邏輯地成為(接替AVC/H.264)的后浪,但版稅問題卻成了它的絆腳石。

    除此之外,較之前浪所增加的算法復雜性而帶來的技術焦慮感,以及4K——這個曾被認為是?HEVC?的主要用戶場景(卻遲遲未全面過渡普及),多方因素下讓HEVC的局面較為慘淡。

    這種情況也引發了業界創建一個獨立的、免版稅的編解碼器的強烈愿望。開發進度條快速步進的新編解碼器即將面世,這讓上述局面火上澆油,而我們發現自己有點像愛麗絲在夢游仙境:?各種現象將我們引領前往不同的方向——但我們到底應該走哪條路呢?

    我們將從介紹“在未來視頻業務應用中占有重要市場份額的編解碼器”的競爭格局開始論述:

    在這篇文章里,我們不會討論?LC-EVC (MPEG-5 Part 2)?,因為它只能算是已有/存量編解碼器的一個附加組件,而不是可以用來作為獨立選項的視頻編解碼器。如果你想了解更多,https://lcevc.com/?將是一個很好的開始。

    如果你希望我們評出唯一的獲勝者——那我們可能要讓你失望了:?很明顯,我們并不是朝著單一編碼器一統全局的方向前進的。在本文中我們的目的是提供信息,突出每個編解碼器的亮點和特性、分享見解和觀點,并以此希望能幫助各位在當下的編解碼器混戰中武裝自己。

    起源?

    第一點我們想討論的是編解碼器的起源,它們各自來自哪里,又意味著什么。迄今為止,大多數被廣泛采用的視頻編解碼器都是聯合視頻專家團隊(Joint Video Expert Team)制定的標準,該團隊牽手國際電信聯盟-電信聯盟視頻編碼專家組(ITU-T Video Coding Expert Group (VCEG))和國際標準化組織運動圖像專家組?(ISO Moving Picture Experts Group (MPEG)?)共同努力并制定聯合標準。?

    AVC和?HEVC?都是通過這樣一個步驟明確的流程孵化產生的:從 CfP (提案征集)開始,通過標準制定團隊對每個提案算法工具的壓縮效率和性能要求進行評估,直到建立一個擬議標準草案。經過幾輪的編輯和修改,最終的草稿就會被批準,成為正式標準。這個過程非常有條理,并且經過長期實踐證明可成功孵化出穩定可用的視頻編解碼器,AVC、HEVC??VVC?都是以這種方式創建的。

    EVC?編解碼器或許是一個例外,因為它僅僅來自?MPEG,而沒有 ITU-T 的參與。這可能與?ITU VCEG?歷來都不贊成將版稅問題納為標準化過程的一部分有關,而對于?EVC?來說,正如我們將看到的,這正是最值得關注的問題之一。

    視頻編解碼器的另一個來源是商業公司。一個典型的成功案例就是由谷歌開發的?VP9編解碼器,作為?VP8的繼承者,VP9編解碼器由 On2 Technologies 公司(后來被谷歌收購)開發。此外,一些公司還試圖推廣開源、免版稅、專利自主的編解碼器,比如 Mozilla 的?Daala?或 BBC Research 的?Dirac。

    編解碼器的第三個來源,是在 ISO 或 ITU 等官方國際標準機構之外、獨立運作的一個聯盟或若干公司組成的工作組。AV1就是一個完美的例子,數家公司通過組建開放媒體聯盟(AOM),協同創建了一種免版稅的開源視頻編碼格式,并且主要面向互聯網視頻業務。

    AOM 的創始成員包括谷歌(Google)(它貢獻了 VP9技術)、微軟(Microsoft)、亞馬遜(Amazon)、蘋果(Apple)、 Netflix、 FB、 Mozilla 等,還包括思科(Cisco)和三星(Samsung)這樣的傳統?“ MPEG 支持者”。??

    AV1編碼器是從“實驗”中構建出來的,每個候選的算法工具都被添加到參考軟件中,并可以通過開關進行對比實驗,從而使得算法工具進入最終標準定稿的決策過程非常具有靈活性。

    時間線

    比較不同編解碼器的一個簡單維度就是看他們的時間線。?

    AVC在2003年5月完成。10年后的2013年4月,HEVC?也終于完成。AV1碼流結構凍結是在2018年3月,同年6月通過驗證,2019年1月發布了勘誤表1。截至2020年4月的第130屆 MPEG 會議,VVC??EVC?都處于國際標準(FDIS)的最終草案階段,預計將于今年獲得批準。

    版稅

    下一個要比較的內容是令人頭疼的版稅問題。除非你與世隔絕,否則你很可能已經意識到這是一個非常關鍵的問題。

    AVC?的版稅問題得到了很好的解決,并且已經有了一個眾所周知的、廉價的版權許可模式。但是對于 HEVC 來說,情況要復雜得多。雖然 HEVC Advance聯合了許多HEVC的專利持有方,并不斷有更多的專利持有方加入,但MPEG LA 仍然代表著其他一些專利方。

    Velos Media 還整合了更多的專利持有方,但仍然有一些專利方是獨立且不屬于上述任何專利池的。盡管在過去的幾年里(在?HEVC?標準定稿后的五年多時間里)?,這些專利池終于推出了合理的許可模式,但是對于?HEVC?的版稅,很多時候整個行業仍抱有“一朝被蛇咬,十年怕井繩”的心態,擔心其他專利實體也會突然冒出來,并提出更多的知識產權要求。

    AV1是解決版稅問題的直接嘗試,它創建了一個由行業巨頭支持的免版稅解決方案,甚至組建了一個法律辯護基金,以幫助那些可能因為所貢獻技術牽涉專利糾紛而被起訴的小公司。

    與法律辯護緊密相關的,是可能存在的第三方侵權事實,雖然AOM從未承諾為此進行賠償,但大家也都默認如此——AOM既協助辯護、也負責提供賠償。

    直到3月初,Sisvel 宣布了一個由14家公司組成的專利池,這些公司擁有1000多項專利,Sisvel 聲稱這些專利對實施 AV1至關重要。大約一個月后,AOM 才發表了一份反對聲明,聲稱其致力于一個免版權費的媒體生態系統。時間、大概還有相當多的律師,將決定這場特殊的戰斗將如何結束(Sisvel宣布成立AV1專利池 1050項專利許可面臨收費)。

    VVC最初似乎走上了與 HEVC 同樣的知識產權道路:?根據 MPEG 的規定,任何將知識產權貢獻給該標準的個人或組織都必須簽署一份公平、合理和非歧視(FRAND)許可協議。但是,正如曾經的經驗所告訴我們的那樣,這并不能保證適用于用來約束專利池或者專利代理機構。

    不過,這一次業界采取了行動,成立了媒體編碼行業論壇(MC-IF)?,這是2018年成立的一個開放型行業論壇,目的是進一步推廣使用 MPEG 標準,最初側重于?VVC。他們的目標,是為了消費者和行業的利益,建立一個被廣泛接受和使用的標準。MC-IF下其中一個工作組正在定義“編碼檔子集”,這個標準子集包括無版稅的算法工具或MC-IF能夠作為所有相關知識產權許可的登記機構的算法工具。如果上述工作成功,我們可能會看到一個免版稅或版稅已知可控前提下的?VVC子集版本。

    由三星、華為和高通為主要成員的EVC工作組,則直接在標準化過程中處理版稅問題,采用兩檔方案組合實施。對于EVC-Baseline,只包含無專利版稅的編碼算法工具。這通常意味著所包含技術已經有20多年的歷史,并且有出版物可舉證。雖然這聽起來像是一個相當棘手的約束,但是一旦你考慮到 AVC 技術都已經有20多年的歷史了,而且這些年來已經積累了大量規避知識產權的方案,你就可以想的到滿足上述約束而組成的編解碼器仍然可以大大超過?AVC?的壓縮效率。

    ?EVC-Main?而言,它采用了已知專利權使用費的方法,即任何對EVC-Main所含算法工具提供知識產權的實體承諾在EVC標準草案定稿后的兩年內,即在2022年4月之前,提供價格合理的許可證模式。

    技術特點

    現在我們已經講明白了版稅這個難以忽視的問題,接下來我們將突出展示一些編解碼器特性,并看看不同的編解碼器在這方面哪些不同。

    所有這些編解碼器使用一種基于圖像塊的混合編碼方法,這意味著編碼是通過將幀分割成塊,對塊像素進行預測,并計算預測值與實際值之間的差值,對得到的殘差系數進行頻域變換后實施量化,最后將這些量化后系數與附加數據(如用于預測的運動向量)一起進行熵編碼,從而產生比特流。

    圖1顯示了這種編碼器的簡化圖。(譯者注:“混合”是指上述編碼框架中主要交替使用了預測算法與頻域變換算法

    圖1:?基于圖像塊的混合編碼框架

    編解碼器改進的基本思路是一種“越多越好”的方法:更多的圖像塊尺寸和子塊劃分選項、更多的預測可能性、更多的頻域變換核尺寸和變換類型,以及更多的附加工具,比如復雜的環路去塊效應濾波器。

    塊劃分

    我們首先介紹各類編碼器中所支持的圖像塊及其塊劃分方案。AVC?中的宏塊(MB)單元尺寸總是16x16,HEVC?EVC-Baseline中的編碼樹單元(CTU)尺寸最大可以是64x64,而?EVC-Main、?AV1和?VCC中的圖像分塊尺寸最大可支持128x128。隨著塊尺寸的增大,它們能夠以越來越高的分辨率對平滑紋理區域進行高效編碼。

    關于塊劃分,在?AVC?中我們有固定大小的宏塊(Macro-Blocks),而在?HEVC?中引入了四叉樹劃分,即允許將編碼樹單元(Coding-Tree-Unit)遞歸地劃分為四個額外的子塊。EVC-Baseline也支持同樣上述方案。如圖2中的示例分區所示:VVC在四叉樹中增加了二叉樹(2路)和三叉樹(3路)?,從而增加了劃分方案的可伸縮性。

    EVC-Main還使用組合的 QT、 BT、 TT 方法,此外還有一個拆分單元編碼順序(Split Unit Coding Order)特性,允許EVC-Main以從右到左的順序以及通常的從左到右的順序執行子塊的處理和預測。AV1使用略有不同的劃分方法,支持每個編碼塊最多10次分割。

    劃分方案的另一個技術演進方向是其形狀的靈活性。能夠不對稱地和沿對角線方式來劃分塊,可以隔離出圖像內容區域中的局部變化,以創建高效和準確的子塊劃分。這種方法有兩個重要的優點:?避免了對細粒度劃分的需要,并且可以在不引入“階梯”(“staircase”)效應的情況下正確地表示由斜線邊緣分隔的兩個對象。AV1中引入的楔形劃分和?VVC?的幾何劃分都支持兩個預測區域之間的對角劃分,從而實現了非常精確的劃分。

    圖2:?組合?QT (藍色)、?TT (綠色)和?BT (紅色)的分區示例

    預測

    優質的預測方案使得殘差能量最小化,是提高壓縮效率的一個重要手段。從?AVC?開始的所有視頻編解碼器都采用幀內預測和幀間預測,前者使用在當前圖像幀中已經被編碼和重建的像素進行預測,后者使用以前編碼和重建的圖像幀中的像素進行預測。

    AVC?支持9種幀內預測模式,也就是當前塊像素可以從位于左、上和右上方向的鄰居塊像素進行預測。EVC-Baseline只支持5種幀內預測模式,EVC-Main?支持33種,HEVC?定義了35種幀內預測模式,AV1支持56種,VVC?支持65種角度預測。

    雖然“越多越好”模式可以提高壓縮效率,但這直接影響編碼復雜度,因為這意味著編碼器在選擇最佳模式時要做出更復雜的決定。AV1和?VVC?增加了額外的精細化幀內預測算法選項,例如 AV1中使用亮度分量預測色度分量,相類似的在?VVC?中有跨分量線性模型預測。另一個有趣的幀內預測算法工具是 INTRA Block Copy,它允許從當前圖像幀內已編碼和重建的部分中復制出一個完整的圖像塊,作為當前塊的預測值。這種預測模式特別適用于具有復雜合成紋理的圖像幀,并且在AV1、EVC-MainVVC中都被支持。

    而?VVC?通過擴展幀內預測塊附近的像素數提供了一個更有限的方法。VVC還支持多參考行(Multiple Reference Lines)模式,用來擴充當前塊周圍可用于幀內預測的像素點數量。

    不同的編碼器使用的幀間預測其差別在于:所使用的參考幀數量、運動向量(MV)分辨率及與之相關的子像素插值濾波器、支持的運動劃分和預測模式。對每個編碼解碼器中的各種幀間預測工具進行徹底的回顧遠遠超出了本文比較的范圍,所以我們只會著重指出一些我們特別喜歡的新特性。

    重疊塊運動補償(OBMC)最早在H.263的Annex F和?MPEG4 Part2中就引入,但并未包含在其任何編碼檔中,而現在AV1?VVC?都支持該模式。這是一個出色的算法工具,可以在預測塊邊界兩邊的塊使用不同的運動向量時,減少因為運動特征的不連續性而帶來的預測偏差。

    圖3A: OBMC 示意圖。

    上面的圖是常規的運動補償,其中由于兩個相鄰的塊使用參考幀中不同的圖像部分進行預測,此時產生了不連續性;下面的圖中OBMC 模式使用了預測塊之間的重疊部分

    圖3B: OBMC 示意圖。

    放大到 OBMC 的中間和左邊被展示的圖像塊之間的邊界,顯示交叉部分像素的兩個預測值的平均。

    塊匹配運動預測方法的一個重要局限性是它無法表示非水平和垂直的運動,例如縮放或旋轉。上述問題在AV1中使用了變形運動補償(Warped Motion Compensation)來解決,在VVC中則更徹底地使用了6自由度的仿射運動補償(Affine Motion Compensation)方案。EVC-main 進一步使用了3種仿射運動模式:?合并,以及4自由度和6自由度仿射運動補償。

    圖4:?仿射運動預測

    圖片來源: Cordula Heithausen-Coding of Higher Order Motion Parameters for Video Compression - ISBN-13:978-3844057843

    視頻編解碼器做的另一件事是基于以前搜索匹配到的運動向量值來預測當前塊的運動向量。這減少了用于編碼MV的字節數,有利于針對高粒度運動區域顯著節省碼率。另外,對運動向量的預測也有助于提高運動估計的效率。

    五個編解碼器都定義了各自計算運動向量預測值(MVP)的算法流程;尤其是,EVC-Main?在此基礎上還參考了過往的運動向量預測值,而VVC?則進一步通過時空域信息來改進運動向量的預測。

    變換

    應用于殘差數據的頻域變換是“越多越好”方法的另一個應用領域。AVC使用4x4和8x8大小的DCT(Discrete Cosine Transform)變換,而?EVC-Baseline?增加了更多的變換核大小,范圍從2×2 到 64×64。HEVC 增加了互補的DST(Discrete Sine Transform)變換,并支持從4×4 到 32×32的多尺寸變換核。AV1、 VVC?和?EVC-Main?都使用 基于DCT 和 DST 的變換,其變換核尺寸覆蓋較大范圍,且支持非正方形變換核。

    濾波

    環路濾波器通過去除相鄰圖像塊在各自獨立處理過程中產生的偽影,對改善基于塊的編解碼器的感知質量有著重要的貢獻。AVC?使用一個相對簡單的環路自適應去塊效應(De-blocking, DB)濾波器,這也是EVC-Baseline中的做法,其來源于 H.263 Annex J定義的方案。

    HEVC增加了一個附加的采樣點自適應偏移(Sample Adaptive Offset ,SAO)濾波器,通過應用保存在比特流查找表中的像素值偏移量,可以更好地重建原始信號的幅度,從而提高圖像質量,降低條帶紋和振鈴效應。

    VVC使用類似的DB和SAO濾波器,并增加了一個自適應環路濾波器(Adaptive Loop Filter, ALF),以最小化原始樣本和解碼后樣本之間的誤差。這是使用基于Wiener的自適應濾波器實現的,其中合適的濾波器系數由編碼器來決定、并準確標識給解碼器使用。

    EVC-main?使用了高級去塊效應濾波器(ADvanced Deblocking Filter, ADDB)和ALF,并進一步引入一種哈達瑪變換域濾波器(Hadamard Transform Domain Filter, HTDF),該濾波器在圖像塊重建后使用4個相鄰樣本對解碼樣本進行濾波。

    AV1中的處理辦法是,使用了一個常規的 DB濾波器和約束定向增強濾波器(Constrained Directional Enhancement Filter, CDEF),它可以去除銳利邊緣附近的振鈴噪聲和基本噪聲,這也是方向濾波器在視頻編解碼中的首次應用。AV1還使用 環內重建(Loop Restoration)濾波器,其中濾波器系數由編碼器確定并傳遞給解碼器。

    熵編碼

    熵編碼階段在各個編解碼器之間有所不同,部分原因是上下文自適應二進制算術編碼(Context Adaptive Binary Arithmetic Coding, CABAC)有相關的版稅。AVC提供了上下文自適應變長編碼(Context Adaptive Variable Length Coding, CAVLC)和 CABAC兩種模式。

    HEVC?和?VVC?都使用 CABAC,但VVC?增加了一些改進辦法來提高效率,比如更優的初始化而無需查找表(LUT),以及增加了 系數組(Coefficient Group)大小的靈活性。AV1使用非二進制(多符號)算術編碼-這意味著熵編碼必須在兩個連續的步驟中執行,而這限制了并行化。

    EVC-Baseline?使用JPEG附錄D定義的二進制算術編碼器(Binary Arithmetic Coder)?并與游程符號相結合,而?EVC-Main?使用位平面高級系數編碼(bit-plane ADvanced Coefficient Coding, ADCC)的方法。

    為了結束對重要特性的總結,我們還想提一些對特定場景有用的算法工具。例如,EVC-main?和?VVC?支持解碼器端的運動向量細化(Decoder side MV Refinement, DMVR),這對于將部分編碼復雜度拆分給解碼器的分布式系統是有益的。

    AV1和?VVC?都有非常適合屏幕內容編碼的算法工具,例如支持調色板模式編碼,AV1還支持 PNG 圖像中使用的Paeth 預測。對膠片顆粒度合成(Film Grain Synthesis, FGS)?的支持(FGS最早在 HEVC 中引入,但不包括在任何編碼檔次中),是?AV1專業檔的強制性要求,并被認為是對有顆粒效果的影片提供高質量、低比特率壓縮的有價值的工具。

    編解碼器比較

    壓縮效率

    也許最有趣的問題是在實際視頻壓縮中編解碼器如何比較,或者每個編解碼器的壓縮效率是多少:?為了獲得給定的圖像質量,需要分配多少比特率;或者反過來,當分配給定的比特率時,能夠獲得怎樣的圖像質量。雖然這個問題相當簡單,而且定義明確,但回答這個問題絕非易事。第一個挑戰是定義測試條件——怎樣的視頻序列內容、以多少比特率、在怎樣的編碼模式下進行。?

    舉一個簡單的例子,當使用屏幕內容編碼工具時,編碼器將在由屏幕內容采集生成的視頻序列上顯示更多的優勢。不同的視頻序列選擇、有無使用碼率控制(視頻標準本身并未定義如何實現碼率控制)?,GOP 結構和其他配置參數都對編碼結果有重大影響。

    另一個明確答案的障礙是如何衡量質量。盡管PSNR與主觀感知質量的相關性很差,但可悲的是 PSNR 仍然經常用于比較。但即使是更復雜的客觀指標,如 SSIM 或 VMAF,也并不總是能準確地衡量視頻的感知質量。另一方面,開展主觀評價的代價很大,在大規模評測中并不實用,并且,當測試是不同的評測人員或者不同的地點進行,所獲得的結果可能有所差異。

    因此,你可以找到多如牛毛的對比結果,其中有的可能只是略有不同,而有的則甚至完全相反,而本文采用更保守的方法,在參考對比多方文獻后給出一個估計的結果。?

    毫無疑問,在這些編解碼器中,AVC 的壓縮效率最低,而?VVC?的壓縮效率最高。EVC-Baseline?的壓縮效率似乎比 AVC 高30%?左右,與?HEVC?所提高的40%?則相差不遠。AV1?EVC-Main?很接近,至于到底哪一個更優秀很大程度上取決于進行測評操作的人。它們的壓縮效率大約都比?VVC?低5-10%?。

    計算復雜性

    現在,我們來看看每個編碼器的性能或計算復雜性。再次強調,這種比較是相當局限的,因為實際性能表現嚴重依賴于工程代碼實現和測試條件,而非僅僅由標準定義的算法工具自身決定。編碼算法并行計算的能力、用于測試的處理器的架構、視頻內容類型(例如平緩運動或劇烈運動,或暗或亮),這些都還只是能夠嚴重影響性能分析的其中幾個因素而已。

    例如,將x264配置為完全相同的預設值,然后在相同的視頻內容上以低比特率和高比特率分別運行,其編碼運行時間可能會存在4倍的差異。

    在另一個例子中,如Beamr5 epic face offhttps://blog.beamr.com/2017/09/08/x265-beamr-5-epic-face-off/的博客文章顯示,使用相同的測試序列,在編碼圖像質量相似的條件下,Beamr?HEVC?編碼器平均比?x265快1.6倍,而這兩個編碼器在整個測試序列文件內的編碼幀率波動范圍約為1.5倍。

    如上所述,本文只是試圖對幾個編解碼器之間的相對計算復雜度給出一個粗略估計。在這些編碼器中,AVC?的復雜度絕對是最低的,EVC-Baseline?只是稍微增加一點。HEVC對編碼器和解碼器都有較高的性能要求。VVC 已經成功地將解碼器復雜度與?HEVC保持幾乎相同,但是編碼復雜度明顯更高,可能是所有5個編碼器中最高的。

    AV1也以其復雜性高而聞名,它的早期版本甚至引入了“每分鐘幀數”(Frame Per Minute, FPM)來標記編碼性能,而不是常用的“每秒幀數”(Frames Per Second, FPS)。盡管最近的版本做了很多改進,但是可以肯定地說,它的復雜度仍然明顯高于?HEVC,而且可能仍然高于??EVC-Main。

    總結

    在下面的表格中,我們匯總了以上概述的一些編碼器的特性。

    結語

    那么,結論是什么呢?不幸的是,生活變得越來越復雜,由1~2個主導的編解碼器幾乎覆蓋所有行業的情況將不會再有。只有時間才能告訴我們哪一個會在未來5年內擁有最高的市場份額,但一個簡單的預估是,由于?AVC?目前的市場份額在70%?左右,所以AVC短時間內不會被取代。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ?AV1發展的勢頭強勁,在行業巨頭扶持下,我們將看到它在網絡流媒體中的不少應用。至于其他方面,可以有把握地認為,VVC?和?EVC-Main?對壓縮性能的改進、EVC-Baseline?誘人的版稅免費,以及越來越多的設備在硬件模塊中支持HEVC,這些都意味著將面臨的新常態是:不得不在很多視頻流媒體應用中支持多個編碼器標準。

    ??2020 CSDN 皮膚主題: 技術黑板 設計師:CSDN官方博客 返回首頁
    多乐彩