關(guān)鍵詞: QoS , 視頻編碼
一、前言
在過去的20年里,Internet、移動通信和多媒體通信獲得了前所未有的發(fā)展,并獲得了巨大的商業(yè)成功。移動通信和多媒體技術(shù)的融合正在加速進(jìn)行,諸如網(wǎng)絡(luò)架構(gòu)、低功耗的集成電路、功能強(qiáng)大的數(shù)字信號處理芯片、高效的壓縮算法等方面的研究成果不斷涌現(xiàn)。面向無線網(wǎng)絡(luò)和因特網(wǎng)的視頻圖像編碼與傳輸技術(shù)已成為當(dāng)今信息科學(xué)與技術(shù)的前沿課題。
2003年,ISO/IEC的運(yùn)動圖像專家組(MPEG)與ITU-T的視頻編碼專家組(VCEG)聯(lián)手制定了最新的第三代視頻編碼標(biāo)準(zhǔn)H.264/AVC。其主要目的就是為了提供更高的編碼效率和更好的網(wǎng)絡(luò)適應(yīng)性。在相同重構(gòu)圖像質(zhì)量下,與H.263+和MPEG-4 ASP標(biāo)準(zhǔn)相比,能節(jié)約50%的碼流;采用分層模式,定義了視頻編碼層(VCL)和網(wǎng)絡(luò)提取層(NAL),后者專為網(wǎng)絡(luò)傳輸設(shè)計,能適應(yīng)不同網(wǎng)絡(luò)中的視頻傳輸,進(jìn)一步提高網(wǎng)絡(luò)的“親和性”。H.264引入了面向IP包的編碼機(jī)制,有利于網(wǎng)絡(luò)中的分組傳輸,支持網(wǎng)絡(luò)中視頻的流媒體傳輸;具有較強(qiáng)的抗誤碼特性,特別適應(yīng)丟包率高、干擾嚴(yán)重的無線視頻傳輸?shù)囊蟆?nbsp;
二、視頻通信容錯算法的回顧
目前視頻編碼壓縮標(biāo)準(zhǔn)主要有MPEG-x和H.26x兩大系列,這些壓縮算法都是基于宏塊的,分別從三個方面改善編碼效率:
(1)運(yùn)動估計/運(yùn)動補(bǔ)償(MP/MC)消除視頻時間冗余;
(2)圖像差值的離散余弦變換(DCT)消除空間冗余;
(3)量化系數(shù)的可變長編碼(VLC)消除統(tǒng)計冗余。
實踐表明,通過上述方法,視頻編碼標(biāo)準(zhǔn)獲得了極高的壓縮效率。但壓縮后的碼流在Internet,特別是無線信道上的傳輸仍然存在著一些棘手的問題,其中比較突出的一點是:一方面,這些壓縮后的碼流對信道比特誤碼非常敏感;而另一方面,無線信道由于多徑反射和衰落引入了大量的隨機(jī)誤碼和突發(fā)誤碼,影響了碼流的正常傳輸。尤其是當(dāng)采用了VLC方案后,碼流更加容易受到誤碼的影響,結(jié)果在解碼端將失去與編碼端的同步,導(dǎo)致在遇到下一個同步碼字之前無法對VLC 碼字進(jìn)行正確的解碼;同時預(yù)測編碼技術(shù)會將錯誤擴(kuò)散到整個視頻序列中,極大地降低重建圖像的質(zhì)量。因此,為了實現(xiàn)良好質(zhì)量的視頻傳輸,必須結(jié)合實際應(yīng)用信道的傳輸特性,采取一定的容錯措施。
根據(jù)在視頻傳輸系統(tǒng)中位置的不同,容錯算法主要可分為基于編碼器的容錯算法,基于解碼器的容錯算法和基于反饋信道的容錯算法。其中:
(1)基于編碼器的容錯算法,通過再編碼比特流中添加冗余信息,這些冗余信息被添加在信源或信道編碼器中,降低了編碼的效率,增加了實現(xiàn)的復(fù)雜度,以換取編碼的容錯性能,大致包括:分層編碼、多描述編碼、獨立分段編碼、再同步編碼和前向糾錯編碼(FEC)等。
(2)基于解碼器的容錯算法,是指利用被損壞的宏塊與其相鄰的宏塊之間的相關(guān)性來完成恢復(fù)工作的,這部分工作包括錯誤檢測和錯誤恢復(fù)。對于錯誤的檢測,一般采用針對語法的檢錯和嵌入數(shù)據(jù)的檢錯;對于錯誤恢復(fù),可采用時域和空域的錯誤隱藏方法。
(3)基于反饋信道的容錯算法,指利用解碼器獲得誤碼信息,并通過反饋信道,傳送給編碼器進(jìn)行誤碼處理的一種方式。主要包括:誤碼跟蹤,有條件的ARQ,幀內(nèi)/幀間編碼模式選擇和參考圖像選擇模式等。
與此同時,在信源編碼器中,從視頻碼流結(jié)構(gòu)上研究其抗誤碼性能,成為近兩年來研究的一個熱點。H.264/AVC作為最新的視頻編碼標(biāo)準(zhǔn),采取了一系列切合實際的技術(shù)措施,提高了網(wǎng)絡(luò)適應(yīng)性,增強(qiáng)了數(shù)據(jù)抗誤碼的頑健性,從而保證了視頻傳輸后的壓縮視頻的QoS。與以往的視頻編碼標(biāo)準(zhǔn)不同的是,H.264/AVC標(biāo)準(zhǔn)從系統(tǒng)層面定義了視頻編碼層(VCL,Video Coding Layer)和網(wǎng)絡(luò)提取層(NAL,Network Abstraction Layer)。其中,視頻編碼層獨立于網(wǎng)絡(luò),主要包括核心壓縮引擎和塊、宏塊和片的語法句法定義。通過引入一系列新特性,不但使H.264的編碼壓縮效率提升了近1倍,而且多種錯誤恢復(fù)工具又增強(qiáng)了視頻流的頑健性。網(wǎng)絡(luò)提取層的主要功能是定義數(shù)據(jù)的封裝格式,把VCL產(chǎn)生的比特字符串適配到各種各樣的網(wǎng)絡(luò)和多元環(huán)境中。涉及片級別以上的語法定義,包括獨立片解碼所要求的數(shù)據(jù)表示,類似以往視頻壓縮標(biāo)準(zhǔn)中的圖像和頭部順序數(shù)據(jù);防止競爭的編碼;附加的增強(qiáng)信息以及編碼片的比特字符串。
H.264從框架結(jié)構(gòu)上將NAL與VCL分離,主要有兩個目的:首先,可以定義VCL視頻壓縮處理與NAL網(wǎng)絡(luò)傳輸機(jī)制的接口,這樣允許視頻編碼層VCL的設(shè)計可以在不同的處理器平臺進(jìn)行移植,而與NAL層的數(shù)據(jù)封裝格式無關(guān);其二,VCL和NAL都被設(shè)計成工作于不同的傳輸環(huán)境,異構(gòu)的網(wǎng)絡(luò)環(huán)境并不需要對VCL比特流進(jìn)行重構(gòu)和重編碼。下面分別就VCL和NAL對于視頻傳輸?shù)腝oS進(jìn)行分析。
三、H.264的視頻編碼層的錯誤恢復(fù)[1,4]
在H.261、H.263、MPEG-1、MPEG-2、MPEG-4中,許多錯誤恢復(fù)工具已經(jīng)得到了很好的應(yīng)用:圖像分割的不同形式(片、塊組),I模式宏塊,片和圖像的內(nèi)插,參考圖像選擇(帶有和不帶反饋、圖像級別、GOB/SLICE或MB級別),數(shù)據(jù)分割等。
H.264標(biāo)準(zhǔn)繼承了以前視頻編碼標(biāo)準(zhǔn)中某些優(yōu)秀的錯誤恢復(fù)工具,同時也改進(jìn)和創(chuàng)新了多種錯誤恢復(fù)工具。這里主要介紹H.264的錯誤恢復(fù)工具,包括參數(shù)集、靈活的宏塊排序和冗余片RS等。
1. 參數(shù)集
參數(shù)集是H.264標(biāo)準(zhǔn)的一個新概念,是一種通過改進(jìn)視頻碼流結(jié)構(gòu)增強(qiáng)錯誤恢復(fù)能力的方法。H.264的參數(shù)集又分為序列參數(shù)集和圖像參數(shù)集。其中,序列參數(shù)集包括一個圖像序列的所有信息,即兩個IDR圖像間的所有圖像信息。圖像參數(shù)集包括一個圖像的所有分片的所有相關(guān)信息,包括圖像類型、序列號等,解碼時某些序列號的丟失可用來檢驗信息包的丟失與否。多個不同的序列和圖像參數(shù)集存儲在解碼器中,編碼器依據(jù)每個編碼分片的頭部的存儲位置來選擇適當(dāng)?shù)膮?shù)集,圖像參數(shù)集本身也包括使用的序列參數(shù)集參考信息。
眾所周知,一些關(guān)鍵信息比特的丟失(如序列和圖像的頭信息)會造成解碼的嚴(yán)重負(fù)面效應(yīng),而H.264把這些關(guān)鍵信息分離出來,憑借參數(shù)集的設(shè)計,確保在易出錯的環(huán)境中能正確地傳輸。這種碼流結(jié)構(gòu)的設(shè)計無疑增強(qiáng)了碼流傳輸?shù)腻e誤恢復(fù)能力。
參數(shù)集具體實現(xiàn)的方法也是多樣化的:(1)通過帶外傳輸,這種方式要求參數(shù)集通過可靠的協(xié)議,在首個片編碼到達(dá)之前傳輸?shù)浇獯a器;(2)通過帶內(nèi)傳輸,這需要為參數(shù)集提供更高級別的保護(hù),例如發(fā)送復(fù)制包來保證至少有一個到達(dá)目標(biāo);(3)在編碼器和解碼器采用硬件處理參數(shù)集。
2. 片、片組和FMO
一幅圖像由若干片組成,每片包含一系列的宏塊(MB)。MB的排列可按光柵掃描順序,也可不按掃描順序。每個片獨立解碼,不同片的宏塊不能用于自身片中作預(yù)測參考。因此,片的設(shè)置不會造成誤碼擴(kuò)散。
靈活的宏塊排序FMO是H.264的一大特色,適用于H.264的基本檔次和擴(kuò)展檔次的應(yīng)用。
圖像內(nèi)部預(yù)測機(jī)制,例如幀內(nèi)預(yù)測或運(yùn)動矢量預(yù)測,僅允許用同一片組里的空間相鄰的宏塊。FMO通過宏塊分配映射技術(shù),把每個宏塊分配到不按掃描順序的片中。FMO模式劃分圖像的模式各種各樣,重要的有棋盤模式、矩形模式等。當(dāng)然FMO模式也可以使一幀中的宏塊順序分割,使得分割后的片的大小小于無線網(wǎng)絡(luò)的MTU尺寸,經(jīng)過FMO模式分割后的圖像數(shù)據(jù)分開進(jìn)行傳輸。
所有的MB被分成了片組0和片組1,相應(yīng)地分別采用黃色和白色表示。當(dāng)白片丟失時,因為其周圍的宏塊都屬于其他片的宏塊,利用鄰域相關(guān)性,黃片宏塊的某種加權(quán)可用來代替白片相應(yīng)宏塊。這種錯誤隱藏機(jī)制可以明顯提高抗誤碼性能。實驗證明,在CIF圖像的視頻會議中,在丟包率達(dá)10%時,視頻失真低到需要訓(xùn)練有素的眼睛才能識別。使用FMO的代價是稍微降低了編碼效率(因為它打破了原先非鄰居MB之間的預(yù)測),而且在高度優(yōu)化的環(huán)境中,有較高的時延。
3. 數(shù)據(jù)分割
通常情況下,一個宏塊的數(shù)據(jù)是存放在一起而組成片的,數(shù)據(jù)劃分使得一個片中的宏塊數(shù)據(jù)重新組合,把宏塊語義相關(guān)的數(shù)據(jù)組成一個劃分,由劃分來組裝片。H.264視頻編碼標(biāo)準(zhǔn)使用了三種不同類型的數(shù)據(jù)分割。
(1)A型分割
A型分割是頭信息劃分,包括宏塊類型、量化參數(shù)和運(yùn)動矢量,這個信息是最重要的。
(2)B型分割
B型分割是幀內(nèi)信息劃分,包括幀內(nèi)CBPs和幀內(nèi)系數(shù)。幀內(nèi)信息可以阻止錯誤的傳播,該型數(shù)據(jù)分割要求給定分片的A型分割有效,相對于幀間信息,幀內(nèi)信息能更好地阻止漂移效應(yīng),因此它比幀間分割更為重要。
(3)C型分割
C型分割是幀間信息劃分,包括幀間CBPs和幀間系數(shù),一般情況下它是編碼分片的最大分區(qū)。幀間分割是最不重要的,它的使用要求A型分割有效。
當(dāng)使用數(shù)據(jù)分割時,源編碼器把不同類型的分割安排在3個不同的緩沖器中,同時分片的尺寸必須進(jìn)行調(diào)整以保證小于MTU長度,因此是編碼器而不是NAL來實現(xiàn)數(shù)據(jù)分割。在解碼器上,所有分割用于信息重建。這樣,如果幀內(nèi)或幀間信息丟失了,有效的幀頭信息仍然能用來提高錯誤隱藏效率,即有效的宏塊類型和運(yùn)動矢量,保留了宏塊的基本特征,從而仍可獲得一個相當(dāng)高的信息重構(gòu)質(zhì)量,而僅僅丟失了細(xì)節(jié)信息。
4. 冗余片方法
H.264中參考圖像的選擇與以前在H.263中的一樣,在基于反饋的系統(tǒng)中,解碼器接收到丟失或被破壞的圖像信息時,選擇參考圖像序列中正確的參考宏塊,來進(jìn)行錯誤恢復(fù);而對于無反饋的系統(tǒng),H.264提出了冗余分片編碼。
冗余分片允許編碼器把在同一個碼流中添加同一MB的一個或更多冗余表示。需要注意的是這些冗余片的編碼參數(shù)與非冗余片的編碼參數(shù)不同,例如主片可用低QP(高質(zhì)量)來編碼,而冗余信息中能用一個高QP(低質(zhì)量)的方式來編碼,這樣質(zhì)量粗糙一些但碼率更低。解碼器在重構(gòu)時,首先使用主片,如果它可用就拋棄冗余片;而如主片丟失(比如因為包的丟失)冗余片也能被用于重構(gòu)。冗余片主要用于支持高誤碼的移動環(huán)境。
5. 幀內(nèi)編碼
H.264中幀內(nèi)編碼大體上類似于以往的視頻編碼標(biāo)準(zhǔn),但也進(jìn)行了重要的改進(jìn),主要體現(xiàn)在:
(1)H.264中幀內(nèi)預(yù)測宏塊的參考宏塊可以是幀間編碼宏塊,幀內(nèi)預(yù)測宏塊并不像H.263中的幀內(nèi)編碼一樣,而采用預(yù)測的幀內(nèi)編碼比非預(yù)測的幀內(nèi)編碼有更好的編碼效率,但降低了幀內(nèi)編碼的重同步性能,可以通過設(shè)置限制幀內(nèi)預(yù)測標(biāo)記來恢復(fù)這一性能。
(2)只包含幀內(nèi)宏塊的片有兩種,一種是幀內(nèi)片(I Slice),一種是立即刷新片(IDR Slice)。立即刷新片需存在于立即刷新圖像(IDR Picture)中。與短期參考圖像相比,立即刷新圖像有更強(qiáng)壯的重同步性能。
為了更適用無線IP網(wǎng)絡(luò)環(huán)境中的應(yīng)用,H.264通過采用率失真優(yōu)化編碼和設(shè)置幀內(nèi)預(yù)測標(biāo)志,來提高幀內(nèi)圖像的重同步性能。
四、H.264的網(wǎng)絡(luò)提取層的錯誤恢復(fù)
NAL支持眾多基于包的有線/無線通信網(wǎng)絡(luò),諸如H.320、MPEG-2和RTP/IP等。但目前,絕大部分的視頻應(yīng)用所采用的網(wǎng)絡(luò)協(xié)議層次是RTP/UDP/IP,因此在下面的描述中主要基于這個傳輸框架。下面首先分析NAL層的基本處理單元NALU以及它的網(wǎng)絡(luò)封裝、分割和合并的方法。
1. NAL單元
每個NAL單元是一個一定語法元素的可變長字節(jié)字符串,包括包含一個字節(jié)的頭信息(用來表示數(shù)據(jù)類型),以及若干整數(shù)字節(jié)的負(fù)荷數(shù)據(jù)。一個NAL單元可以攜帶一個編碼片、A/B/C型數(shù)據(jù)分割或一個序列或圖像參數(shù)集。
NAL單元按RTP序列號按序傳送。其中,T為負(fù)荷數(shù)據(jù)類型,占5bit;R為重要性指示位,占2個bit;最后的F為禁止位,占1bit。具體如下:
(1)NALU類型位
可以表示NALU的32種不同類型特征,類型1~12是H.264定義的,類型24~31是用于H.264以外的,RTP負(fù)荷規(guī)范使用這其中的一些值來定義包聚合和分裂,其他值為H.264保留。
(2)重要性指示位
用于在重構(gòu)過程中標(biāo)記一個NAL單元的重要性,值越大,越重要。值為0表示這個NAL單元沒有用于預(yù)測,因此可被解碼器拋棄而不會有錯誤擴(kuò)散;值高于0表示此NAL單元要用于無漂移重構(gòu),且值越高,對此NAL單元丟失的影響越大。
(3)禁止位
編碼中默認(rèn)值為0,當(dāng)網(wǎng)絡(luò)識別此單元中存在比特錯誤時,可將其設(shè)為1,以便接收方丟掉該單元,主要用于適應(yīng)不同種類的網(wǎng)絡(luò)環(huán)境(比如有線無線相結(jié)合的環(huán)境)。例如對于從無線到有線的網(wǎng)關(guān),一邊是無線的非IP環(huán)境,一邊是有線網(wǎng)絡(luò)的無比特錯誤的環(huán)境。假設(shè)一個NAL單元到達(dá)無線那邊時,校驗和檢測失敗,網(wǎng)關(guān)可以選擇從NAL流中去掉這個NAL單元,也可以把已知被破壞的NAL單元前傳給接收端。在這種情況下,智能的解碼器將嘗試重構(gòu)這個NAL單元(已知它可能包含比特錯誤)。而非智能的解碼器將簡單地拋棄這個NAL單元。NAL單元結(jié)構(gòu)規(guī)定了用于面向分組或用于流的傳輸子系統(tǒng)的通用格式。在H.320和MPEG-2系統(tǒng)中,NAL單元的流應(yīng)該在NAL單元邊界內(nèi),每個NAL單元前加一個3字節(jié)的起始前綴碼。在分組傳輸系統(tǒng)中,NAL單元由系統(tǒng)的傳輸規(guī)程確定幀界,因此不需要上述的起始前綴碼。一組NAL單元被稱為一個接入單元,定界后加上定時信息(SEI),形成基本編碼圖像。該基本編碼圖像(PCP)由一組已編碼的NAL單元組成,其后是冗余編碼圖像(RCP),它是PCP同一視頻圖像的冗余表示,用于解碼中PCP丟失情況下恢復(fù)信息。如果該編碼視頻圖像是編碼視頻序列的最后一幅圖像,應(yīng)出現(xiàn)序列NAL單元的end,表示該序列結(jié)束。一個圖像序列只有一個序列參數(shù)組,并被獨立解碼。如果該編碼圖像是整個NAL單元流的最后一幅圖像,則應(yīng)出現(xiàn)流的end?!?nbsp;
H.264采用上述嚴(yán)格的接入單元,不僅使H.264可自適應(yīng)于多種網(wǎng)絡(luò),而且進(jìn)一步提高其抗誤碼能力。序列號的設(shè)置可發(fā)現(xiàn)丟的是哪一個VCL單元,冗余編碼圖像使得即使基本編碼圖像丟失,仍可得到較“粗糙”的圖像。
2. H.264中的RTP
上面闡述了NAL單元的結(jié)構(gòu)和實現(xiàn),這里要詳細(xì)討論RTP的載荷規(guī)范和抗誤碼性能。RTP可通過發(fā)送冗余信息來減少接收端的丟包率,會增加時延,與冗余片不同的是它增加的冗余信息是個別重點信息的備份,適合于非平等保護(hù)機(jī)制。相應(yīng)的多媒體傳輸規(guī)范有:
(1)分組復(fù)制多次重發(fā),發(fā)送端對最重要的比特信息分組進(jìn)行復(fù)制重發(fā),使得保證接收端能至少正確接收到一次,同時接收端要丟棄已經(jīng)正確接收的分組的多余備份。
(2)基于分組的前向糾錯,對被保護(hù)的分組進(jìn)行異或運(yùn)算,將運(yùn)算結(jié)果作為冗余信息發(fā)送到接收方。由于時延,不用于對話型應(yīng)用,可用于流媒體。
(3)音頻冗余編碼,可保護(hù)包括視頻在內(nèi)的任何數(shù)據(jù)流。每個分組由頭標(biāo)、載荷以及前一分組的載荷組成,H.264中可與數(shù)據(jù)分割一起使用。
RTP的封裝規(guī)范總結(jié)如下:
(1)額外開銷要少,使MTU尺寸在100~64千字節(jié)范圍都可以;
(2)易于區(qū)分分組的重要性,而不必對分組內(nèi)的數(shù)據(jù)解碼;
(3)載荷規(guī)范應(yīng)當(dāng)保證不用解碼就可識別由于其他比特丟失而造成的分組不可解碼;
(4)支持將NALU分割成多個RTP分組;
(5)支持將多個NALU匯集在一個RTP分組中。
H.264采用了簡單打包的方案,即一個RTP分組里放入一個NALU,將NALU(包括同時作為載荷頭標(biāo)的NALU頭)放入RTP的載荷中,設(shè)置RTP頭標(biāo)值。理想情況下,VCL不會產(chǎn)生超過MTU尺寸的NAL單元,來避免IP層的分拆。在接收端,通過RTP序列信息識別復(fù)制包并丟棄,取出有效RTP包里的NAL單元?;緳n次和擴(kuò)展檔次允許片的無序解碼,這樣在抖動緩存中就不必對包重新排序。在使用主檔次時(不允許片的亂序),要通過RTP序列信息來對包重新排序,解碼順序號(DON)的概念現(xiàn)正在IETF的討論中。
存在如下情況,例如當(dāng)使用內(nèi)容預(yù)編碼時,編碼器不了解底層網(wǎng)絡(luò)的MTU大小,將產(chǎn)生許多大于MTU尺寸的NALU。這就需要涉及NALU的分割和合并。
(1)NALU的分割
雖然IP層的分割可以使數(shù)據(jù)塊小于64千字節(jié),但無法在應(yīng)用層實現(xiàn)保護(hù),從而降低了非平等保護(hù)方案的效果。由于UDP數(shù)據(jù)包小于64千字節(jié),而且一個片的長度對某些應(yīng)用場合來說太小,所以應(yīng)用層打包是RTP打包方案的一部分。目前的拆分方案正在IETF的討論之中,大致具有以下特點:①NALU的分塊以按RTP次序號升序傳輸;②能夠標(biāo)記第一個和最后一個NALU分塊;③可以檢測丟失的分塊。
(2)NALU的合并
一些NALU如SEI、參數(shù)集等非常小,將它們合并在一起有利于減少頭標(biāo)開銷。現(xiàn)有的兩種集合分組:①單一時間集合分組(STAP),按時間戳進(jìn)行組合,一般用于低時延環(huán)境;②多時間集合分組(MTAP),不同時間戳也可以組合,一般用于高時延環(huán)境,比如流應(yīng)用。
五、結(jié)束語
本文針對最新推出的視頻編解碼標(biāo)準(zhǔn)H.264的抗誤碼性能進(jìn)行了分析,可以看到H.264/AVC標(biāo)準(zhǔn)除了擁有高效編碼的特性,還引入了一些新工具用于提高錯誤恢復(fù)能力。特別是,參數(shù)集、NAL上的NALU的概念、靈活的宏塊排序FMO、數(shù)據(jù)分割以及幀內(nèi)編碼等都極大地提高了復(fù)雜網(wǎng)絡(luò)環(huán)境下的抗誤碼能力。同時,詳細(xì)介紹了與視頻比特流傳輸密切相關(guān)的RTP封裝規(guī)范,與H.264的NAL緊密結(jié)合,提供了對數(shù)據(jù)封裝的指導(dǎo)。通過附加了一些傳輸層的低開銷機(jī)制來用于NALU包的高效拆分和聚合。當(dāng)聯(lián)合使用這些工具時,可以達(dá)到更高的性能,在因特網(wǎng)和惡劣的無線網(wǎng)絡(luò)上進(jìn)行高質(zhì)量的視頻壓縮也將最終成為現(xiàn)實。
電子發(fā)燒友App





















評論