首頁(yè)>>>技術(shù)>>>視像通信  視像通信產(chǎn)品

視頻通信中的視頻壓縮介紹

2008/05/30

關(guān)于色彩

  彩色圖像通常用幾個(gè)“色彩層”來(lái)呈現。例如,RGB彩色圖像包含紅色層、綠色層和藍色層。每一個(gè)層包含單一色彩(紅色、綠色或藍色)的整個(gè)圖像。當這三層重疊或混合后,將組成全彩圖。為將彩色圖像進(jìn)行壓縮,本文描述的靜態(tài)圖像壓縮方法將依次應用到每個(gè)色彩層。

  視頻壓縮應用通常使用一種色彩層不對應特定色彩的色彩方案。通常是,一個(gè)色彩層包含亮度信息(彩色圖像中每個(gè)像素的總亮度),兩個(gè)層包含色彩(色度)信息,色度信息與亮度信息結合起來(lái)可以得到每個(gè)圖像像素特定紅、綠和藍色彩。

  這樣的色彩方案非常方便,因為人眼對亮度比對色度更敏感,因此色度層的編碼和存儲圖像分辨率都比亮度信息更低。特別是視頻壓縮算法通常對色度層的垂直和水平編碼的分辨率都僅為亮度層的一半。因此,在亮度層中的每個(gè)16 x16像素區域內,每個(gè)色度層包含一個(gè)8x8像素的塊。在典型的視頻壓縮算法中,“宏塊”為視頻幀中的一個(gè)16x16像素的區域,該宏塊包含4個(gè)8x8亮度塊,以及兩個(gè)對應的8x8色度塊。宏塊允許采用后面介紹的運動(dòng)估計和補償,這兩個(gè)技術(shù)將與上面介紹的色度層次采樣結合使用。

增加運動(dòng)因素

  使用上面介紹的方法,像JPEG這樣的靜態(tài)圖像壓縮算法可以在壓縮率為10:1的條件下獲得很好的圖像質(zhì)量。最先進(jìn)的靜態(tài)圖像編碼器在壓縮率高達30:1下也能獲得很好的圖像質(zhì)量。視頻壓縮算法采用運動(dòng)估計和補償可以利用連續視頻幀之間的相似性。這樣可以使視頻壓縮算法在壓縮率達200:1的情況下獲得很好的視頻質(zhì)量。

  在某些視頻場(chǎng)景下,例如新聞節目中運動(dòng)圖像很少。在這種情況下,每個(gè)視頻幀中的8x8像素的塊大部分與前一幀是相同的,或者接近相同。壓縮算法通過(guò)運算兩個(gè)幀之間的差異性可以利用這一事實(shí),利用上面介紹的靜態(tài)圖像壓縮方法來(lái)對這種差異性進(jìn)行編碼。對于大部分圖像塊來(lái)說(shuō),這種差異性很小,與單獨對每個(gè)幀進(jìn)行編碼相比,這種方法需要的編碼數據位非常少。然而,如果攝像機是進(jìn)行搖攝的或者場(chǎng)景中某個(gè)大的物體在移動(dòng),那么每個(gè)塊將不再與前一幀中對應塊相同。相反,與前一幀中8x8像素區域相似的塊位置發(fā)生了偏移,產(chǎn)生了與運動(dòng)方向對應的一個(gè)距離。值得注意的是,每個(gè)視頻幀通常由兩個(gè)色度層和一個(gè)亮度層組成,如上面所述。很顯然,每個(gè)層的運動(dòng)情況是相同的。盡管亮度和色度層的分辨率不同,為利用這種事實(shí),以宏塊而不是以三個(gè)層中單獨的8x8像素塊進(jìn)行運動(dòng)研究。

運動(dòng)估計和補償

  運動(dòng)估計是嘗試發(fā)現在前一編碼幀(稱(chēng)為“基準幀”)中的一個(gè)與當前幀中每個(gè)宏塊緊密匹配的區域。對于每一個(gè)宏塊來(lái)說(shuō),運動(dòng)估計產(chǎn)生一個(gè)“運動(dòng)矢量”。運動(dòng)矢量是由當前幀中宏塊相對于所選擇的16x16像素區域的基準幀中位置的水平和垂直偏移組成。視頻編碼器通常使用VLC來(lái)對視頻碼流中的運動(dòng)矢量進(jìn)行編碼。所選擇的16x16像素區域被用于當前宏模塊中像素的預測,使用上面介紹的靜態(tài)圖像壓縮方法來(lái)進(jìn)行宏塊之間的差異以及所選擇區域(預測誤差)的運算和編碼。絕大多數的視頻壓縮標準允許在編碼器不能發(fā)現宏塊的足夠好的匹配時(shí),忽略這種預測。這時(shí),對宏塊本身進(jìn)行編碼,而不是對預測誤差進(jìn)行編碼。

  值得注意的是,基準幀并不總是連續視頻幀中的前一個(gè)顯示幀。視頻壓縮算法通常對幀的編碼順序與他們顯示的順序是不相同。編碼器可能向前跳過(guò)幾個(gè)幀,對未來(lái)的幀進(jìn)行編碼,然后跳回來(lái),對顯示序列中的下一個(gè)幀編碼。之所以這樣做,是因為可以利用編碼的未來(lái)幀作為基準幀向后及時(shí)地實(shí)現運動(dòng)估計。視頻壓縮算法還可以使用兩個(gè)基準幀—一個(gè)是前面已顯示的幀,一個(gè)是前面已編碼的未來(lái)幀。這樣允許編碼器從任意一個(gè)基準幀中選擇一個(gè)16X16像素的區域,或者在前面顯示幀的16X16像素區域和未來(lái)幀的16X16像素區域之間通過(guò)插值方法預測一個(gè)宏塊。

  依賴(lài)前一個(gè)編碼幀來(lái)對每一個(gè)新幀解碼進(jìn)行修正的一個(gè)缺點(diǎn)是,一個(gè)幀的傳遞錯誤會(huì )使每個(gè)緊隨而來(lái)的幀不能重建。為緩解這個(gè)問(wèn)題,視頻壓縮標準偶爾只使用靜態(tài)圖像編碼方法對一個(gè)視頻幀進(jìn)行編碼,而不需依賴(lài)于前一個(gè)編碼幀。這些幀就成為“內幀”(或I frame,即I幀)。如果壓縮碼流中的一個(gè)幀因為錯誤而被破壞,視頻解碼器必須等到下一個(gè)I幀,這種方法就不需要基準幀來(lái)進(jìn)行視頻重構。

  僅僅使用前一個(gè)顯示的基準幀來(lái)編碼的幀被稱(chēng)為“P幀”,同時(shí)使用前一個(gè)顯示幀和未來(lái)幀作為基準幀進(jìn)行編碼的幀稱(chēng)為“B幀”。在通常的場(chǎng)景中,編解碼器編碼一個(gè)I幀,然后向前跳過(guò)幾個(gè)幀,用編碼I幀作為基準幀對一個(gè)未來(lái)P幀進(jìn)行編碼,然后跳回到I幀之后的下一個(gè)幀。編碼的I幀和P幀之間的幀被編碼為B幀。之后,編碼器會(huì )再次跳過(guò)幾個(gè)幀,使用第一個(gè)P幀作為基準幀編碼另外一個(gè)P幀,然后再次跳回,用B幀填充顯示序列中的空隙。這個(gè)過(guò)程不斷繼續,每12到15個(gè)P幀和B幀內插入一個(gè)新的I幀。例如,圖1種給出了一個(gè)典型的視頻幀序列。

圖1:典型的I、P和B幀序列。

  視頻壓縮標準某些時(shí)候限制運動(dòng)矢量的水平和垂直分量,這樣在運動(dòng)估計時(shí)每個(gè)宏塊和所選擇的16x16像素區域之間最大可能的距離會(huì )遠小于幀的寬度或高度。這種限制輕微地減少了對運動(dòng)矢量進(jìn)行編碼所需要的數據位數,也減少了執行運動(dòng)估計所需要的運算量。包含在允許的運動(dòng)矢量中的所有可能的16x16像素區域的基準幀部分被稱(chēng)為“搜尋區域”。

  此外,先進(jìn)的視頻壓縮標準允許運動(dòng)矢量具有非整數的值。即,編碼器可能估計針對某個(gè)指定宏塊當前幀與基準幀之間的運動(dòng)距離不是整數個(gè)像素。運動(dòng)矢量的分辨率為半個(gè)或四分之一個(gè)像素很常見(jiàn)。因此,為預測當前宏塊中的像素,必須對基準幀中的對應區域進(jìn)行插值處理來(lái)估算出在非整數像素位置的像素值。按上面介紹的方法對預測與實(shí)際像素值之間的差值進(jìn)行計算并編碼。

  運動(dòng)估計是圖像壓縮應用中運算量非常大的任務(wù),需要視頻編碼器80%的處理能力。最簡(jiǎn)單徹底的運動(dòng)估計方法是在搜尋區域中評估每一個(gè)可能的16x16像素區域,選擇最匹配的。通常,利用“絕對差異值之和”(SAD)或“平方差異值之和”(SSD)運算來(lái)確定一個(gè)16x16像素區域與一個(gè)宏塊到底有多匹配。通常只對亮度層進(jìn)行SAD和SSD運算,但是也可以包括色度層。例如,一個(gè)48x24像素的相對較小搜尋區域可能包括分辨率為像素的1024個(gè)16x16區域。僅對這樣一個(gè)區域的亮度層進(jìn)行SAD運算需要做256次減法、256次絕對值運算以及255次加法運算。因此,還不包括非整數運動(dòng)矢量所要求的插值處理,要進(jìn)行最佳的匹配,這樣的搜尋區域進(jìn)行徹底的掃描所需要的運算單個(gè)宏塊需要785,408次算術(shù)運算,這相當于在CIF分辨率(352x288像素),幀率為每秒15幀下,每秒4.6億次算術(shù)運算。

  由于這種高運算量,運動(dòng)估計的實(shí)際實(shí)現并不適用徹底搜尋。相反,運動(dòng)估計算法使用各種方法來(lái)選擇有限數量的備選運動(dòng)矢量(大多數情況下大約10到100個(gè)矢量),只對與這些備選矢量對應的16x16像素區域進(jìn)行評估。一種方法是在幾個(gè)階段來(lái)選擇備選運動(dòng)矢量。例如,可能選擇5個(gè)初始備選矢量,并進(jìn)行評估。結果用來(lái)清除搜尋區域中不可能的部分,對搜尋區域中最有可能的部分進(jìn)行處理。選擇5個(gè)新的矢量,并重復這種處理。通過(guò)幾次這樣的過(guò)程,就可以得到最佳的運動(dòng)矢量。

  在視頻序列中的當前幀和前一幀中針對周邊宏塊所選擇的運動(dòng)矢量的另一種分析方法是試圖預測當前宏塊中的運動(dòng)。根據這種分析來(lái)選擇一些備選的運動(dòng)矢量,并只對這些矢量進(jìn)行評估。

  通過(guò)選擇一個(gè)較少的被選矢量而不是對搜尋區域的徹底掃描,運動(dòng)估計的運算需求可以大大地減少,某些時(shí)候超過(guò)兩個(gè)數量級。值得注意的是,在圖像質(zhì)量/壓縮率和運算量之間具有一種折衷關(guān)系:使用更多的運動(dòng)矢量允許編碼器在基準幀內找到一個(gè)16x16像素的區域,這些區域能更好地匹配每一個(gè)宏塊,這樣減少預測誤差。因此,增加被選矢量允許預測誤差以更少的數據位或者更高的精度進(jìn)行編碼,而代價(jià)就是執行更多地SAD(或者)SSD運算。

  除了上面描述的兩種方法外,還有很多其他選擇適當備選運動(dòng)矢量的方法,包括各種的專(zhuān)有解決方案。大多數視頻壓縮標準僅僅規定了壓縮視頻碼流的格式以及解碼步驟,而對編碼過(guò)程無(wú)定義,因此編碼器可以采用各種方法來(lái)進(jìn)行運動(dòng)估計。

  運動(dòng)估計方法是那些符合相同標準的視頻編碼器實(shí)現之間的最大差異。運動(dòng)估計方法的選擇大大地影響了運算要求和視頻質(zhì)量,因此市場(chǎng)上提供的編碼器內的運動(dòng)估計方法細節常常是嚴格保守的商業(yè)秘密。

  很多針對多媒體應用的處理器都提供了加速SAD運算的專(zhuān)門(mén)指令,或者專(zhuān)用的SAD協(xié)處理器來(lái)從CPU轉移這種需要大量運算的任務(wù)。

  值得注意的是,為了執行這種運動(dòng)估計,除了當前幀以外,編碼器必須在存儲器中保留一個(gè)或兩個(gè)基準幀。所需要的幀緩存通常都比片上可提供的存儲器大很多,在很多應用中都需要額外的存儲器芯片。將基準幀存儲在片外存儲器中導致要求編碼器非常高的外部存儲器帶寬,盡管大的片上緩存有助于大大減少所要求的帶寬。

  某些視頻壓縮標準允許每個(gè)宏塊被分割成兩個(gè)或四個(gè)部分,每個(gè)部分有一個(gè)獨立的運動(dòng)矢量。與一個(gè)運動(dòng)矢量相比,這種選擇需要更多的數據位來(lái)對兩個(gè)或四個(gè)部分進(jìn)行編碼。然而,如果增加的運動(dòng)矢量能更好地預測宏塊像素,則對每個(gè)預測進(jìn)行編碼所需要的數據位更少,這又是很有益的。

運動(dòng)補償

  在視頻編碼器中,運動(dòng)補償利用在視頻碼流中被編碼的運動(dòng)矢量來(lái)預測每個(gè)宏塊中的像素。如果運動(dòng)矢量的水平和垂直分量都是整數值的話(huà),預測的宏塊就僅僅是基準幀中16x16像素區域的一個(gè)拷貝。如果運動(dòng)矢量的任意個(gè)分量具有非整數值,則需要用到插值來(lái)估計非整數像素位置的圖像。然后,對預測誤差進(jìn)行編碼,并加入到預測宏塊中以重構實(shí)際的宏塊像素。

  與運動(dòng)估計相比,運動(dòng)補償的運算需求小很多。盡管運動(dòng)估計必須對每個(gè)宏塊的若干16x16像素區域執行SAD或SSD運算,運動(dòng)補償僅對這樣的區域進(jìn)行拷貝或插值處理。由于這樣的重要差別,視頻解碼的運算量比視頻編碼少很多。而且,在視頻解碼器中,運動(dòng)補償可以依然占用達40%的處理器性能,盡管這個(gè)數字對于不同的視頻序列、視頻壓縮標準和解碼器的實(shí)現來(lái)說(shuō)會(huì )有很大的差別。例如,對于很少使用插值的幀的運動(dòng)補償工作載荷可能只占解碼器的處理性能的5%。

  與運動(dòng)估計相似,運動(dòng)補償需要視頻解碼器在存儲器中保存一個(gè)或兩個(gè)基準幀,通常需要外部存儲器芯片來(lái)實(shí)現這個(gè)目的。然而,運動(dòng)補償比運動(dòng)估計更少地訪(fǎng)問(wèn)基準幀緩存。因此,存儲器帶寬要求沒(méi)有運動(dòng)估計那么嚴格,盡管為了在運動(dòng)補償功能中獲得更佳的處理器性能,依然希望有高的存儲器帶寬。

減少視頻瑕疵

馬賽克與環(huán)狀瑕疵

  理想情況是,有損耗的圖像和視頻壓縮算法僅僅丟棄那些視覺(jué)并不重要的信息,因此人眼重構的圖像和視頻序列和原來(lái)未壓縮的圖像或視頻是相同的。然而實(shí)際上,依然可能出現某些視覺(jué)上可見(jiàn)的瑕疵。由于編碼器的設計并不完美而出現這種問(wèn)題,視頻內容的編碼尤其具有挑戰性,或者針對視頻序列分辨率和幀率所選擇碼率太低。后面的這種情況尤其常見(jiàn),因此很多應用必須權衡視頻質(zhì)量與減少存儲和帶寬要求之間的矛盾。

  視頻壓縮中“馬賽克”和“環(huán)狀”瑕疵最為常見(jiàn)。馬賽克是由于壓縮算法將每個(gè)幀分割成8像素x8像素的塊造成。每個(gè)塊在重構時(shí)都在鄰近邊緣有一些誤差,使得塊邊緣可見(jiàn)。環(huán)狀瑕疵是由于編碼器在量化高頻DCT系數時(shí)丟棄太多的信息所致。環(huán)狀瑕疵的表現為在圖像特征的邊緣出現失真。

解決馬賽克和環(huán)狀瑕疵的圖像濾波器

  視頻壓縮應用通常在解壓縮之后采用濾波器來(lái)減少上述的瑕疵。這些濾波步驟被稱(chēng)為去馬賽克和去環(huán)處理。它們都利用了低通FIR(有限脈沖響應)濾波器來(lái)隱藏這些可見(jiàn)的瑕疵。去馬賽克濾波器應用到圖像塊的邊緣,將每個(gè)塊的邊緣與其相鄰的塊的邊緣進(jìn)行混合,以此來(lái)隱藏這些馬賽克瑕疵。去環(huán)處理通常使用一個(gè)自適應濾波器,該濾波器首先檢測到圖像特征的邊緣。然后對鄰近檢測邊緣的區域進(jìn)行低通濾波,從而消除環(huán)狀瑕疵,但是邊緣像素本身并沒(méi)有被濾除,或者很少地被濾除,以避免出現模糊。

  這兩種濾波器都需要很大的運算量。這些濾波器結合使用會(huì )比視頻解碼器本身占用更多的處理器處理性能。例如,針對ARM9E通用處理器內核進(jìn)行過(guò)優(yōu)化的一個(gè)MPEG-4簡(jiǎn)單規格、第一級(176x144像素,15fps)解碼器在對一個(gè)中等復雜度的視頻流進(jìn)行解碼時(shí),需要處理器的指令周期運行速率為14MHz。如果增加去馬賽克處理,處理器必須運行在33MHz。如果同時(shí)要求兩種處理,則處理器必須運行在39MHz條件下—幾乎是單獨視頻解壓縮算法的時(shí)鐘速率要求的三倍。

后處理與在線(xiàn)實(shí)現的比較

  這兩種濾波器可以作為一個(gè)獨立于視頻解壓縮的單獨后續處理步驟用在視頻幀上。這種方法為系統設計者提供了針對他們的應用選擇最佳的去馬賽克和/或去環(huán)濾波器的靈活性,或者完全放棄這兩種濾波器以降低運算需求。在這種方法中,視頻解碼器利用每個(gè)未濾波的重構幀作為對未來(lái)的視頻幀進(jìn)行解碼的基準幀,最后的濾波視頻輸出還需要一個(gè)額外的幀緩存。

  另外一種方法是將去馬賽克和/或去環(huán)狀瑕疵功能整合到視頻解壓縮算法中。這種方法某些時(shí)候稱(chēng)為“環(huán)形濾波”,利用濾波后的重構幀作為基準幀來(lái)解碼未來(lái)的視頻幀。這種方法要求視頻解碼器像編碼器那樣執行相同的去馬賽克和/或去環(huán)狀瑕疵濾波,以使每個(gè)用于編碼的基準幀與用于解碼的一樣。需要在編碼器中進(jìn)行濾波處理增加了對處理器的性能要求,但是可以提高圖像質(zhì)量,特別是當碼率很低的時(shí)候。此外,當去馬賽克和/或去環(huán)狀瑕疵功能作為一個(gè)獨立的后續處理步驟實(shí)現時(shí)需要的額外幀緩存,而整合到壓縮算法中則不需要。

色彩空間轉換

  正如前面所述,視頻壓縮算法通常利用亮度和色度層來(lái)展現彩色圖像。不同的是,攝像機和顯示器通常將紅色、藍色和綠色光混合來(lái)展現不同的顏色。因此,攝像機捕捉到的紅、綠、藍像素必須轉換成亮度和色度值以進(jìn)行視頻編碼,視頻編碼器的亮度和色度像素輸出必須轉換成特定的紅、綠、藍電平進(jìn)行顯示。這種轉換方程每個(gè)圖像像素需要12個(gè)算術(shù)運算,還不包括用于補償在視頻壓縮算法的輸入和輸出中色度層比亮度層具有更低的分辨率所需要插值運算。對于每秒15幀CIF(352x288 像素)的圖像分辨率來(lái)說(shuō),轉換(沒(méi)有任何插值運算)需要每秒1,800萬(wàn)次運算。這種運算量相當大;如果用軟件來(lái)實(shí)現,色彩轉換大約需要視頻解碼器所需要的處理器周期的三分之一或三分之二。

趨勢與結論

  視頻壓縮算法采用了多種技術(shù),例如運動(dòng)估計、轉換和可變長(cháng)度編碼。盡管大多數當前的視頻壓縮算法共享這些的基本任務(wù),在算法和實(shí)現方法上存在大量的變化。例如,在不同的編碼器中,甚至即使符合相同的壓縮標準,執行運動(dòng)估計的算術(shù)方法和實(shí)現方法都可能不同。此外,對于某個(gè)信號處理任務(wù)來(lái)說(shuō),最有效的實(shí)現方法對于不同的處理器來(lái)說(shuō)也可能有很大的差別,即使每個(gè)處理器使用一種相似的算法。最后,某些任務(wù)的運算量,如運動(dòng)補償,根據不同的視頻節目?jì)热葑兓艽蟆R虼耍谀硞(gè)特定的處理器上,視頻編碼器或解碼器的運算負擔很難以預測。

盡管有這些可變性,依然可以很容易地發(fā)現幾個(gè)趨勢:

  運動(dòng)估計是視頻壓縮處理中運算需求最大的任務(wù),通常使編碼器的運算負擔為解碼器的幾倍。

  解碼器的運算負擔通常決定于可變長(cháng)解碼、逆轉換和運動(dòng)補償功能。

  運動(dòng)估計、運動(dòng)補償、轉換和量化/去量化任務(wù)的運算負擔通常與每個(gè)幀的像素數量和幀率成正比。不同的是,可變長(cháng)解碼功能的運算量與壓縮視頻碼流的碼率成正比。

  在解碼后的視頻流中應用的后處理步驟,即去馬賽克、去環(huán)狀瑕疵以及色彩空間轉換都大大地增加了視頻解碼應用的運算負擔。這些功能的運算負擔會(huì )很容易地超過(guò)視頻壓縮步驟,與每個(gè)幀的像素數量以及幀率成正比。

  相比于運算量的預測,視頻壓縮應用的存儲器要求的預測容易得多:在視頻壓縮應用中,存儲器主要取決于用于存儲當前和基準幀的大容量緩存。如果壓縮方案支持I-和P-幀,只需要兩個(gè)幀緩存;如果還支持B-幀的話(huà),則需要三個(gè)緩存。像去馬賽克、去環(huán)狀瑕疵、色彩空間轉換的后處理步驟可能需要另外的輸出緩存。這些緩存的大小與每個(gè)幀的像素數量成正比。

  與像程序存儲器、查找表以及中間數據等因素相結合,組成通常視頻應用的存儲器需求的重要部分,盡管這個(gè)部分通常只有幀緩存存儲器的幾分之一。

  實(shí)現高度優(yōu)化的視頻編碼和解碼軟件需要徹底地理解本文介紹的目標處理器的信號處理概念。大多數的視頻壓縮標準不會(huì )規定運動(dòng)估計的方法。盡管基準編碼器適合于大多數的標準,深入了解視頻壓縮算法通常允許設計師利用更多成熟的運動(dòng)估計方法,并獲得更好的結果。此外,全面理解信號處理原理,實(shí)現信號處理功能,以及了解目標處理器的細節知識對于有效地將視頻壓縮算法中的各種任務(wù)對應到處理器的結構資源來(lái)說(shuō)是非常重要的。

Berkeley設計技術(shù)公司



相關(guān)鏈接:
迪威汪倫:品牌并非國內視頻廠(chǎng)商不可逾越的障礙 2008-05-30
揭密顯示屏幕背后的高清晰電視技術(shù) 2008-05-30
四招打造SMB視頻會(huì )議方案 2008-05-28
讓視頻會(huì )議多一些人工智能 2008-05-28
視頻會(huì )議系統應用方案的比較 2008-05-28

分類(lèi)信息:        
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 临湘市| 金山区| 宜兰市| 陵川县| 额尔古纳市| 安顺市| 五寨县| 九寨沟县| 简阳市| 大姚县| 天津市| 民勤县| 桃园县| 贵南县| 井冈山市| 望城县| 巴中市| 乌拉特后旗| 梧州市| 郧西县| 漳州市| 西青区| 京山县| 东台市| 曲靖市| 昌江| 无棣县| 石景山区| 合肥市| 蓝田县| 密云县| 嘉兴市| 佛山市| 马关县| 麟游县| 自治县| 巴马| 基隆市| 长白| 澜沧| 惠州市| http://444 http://444 http://444 http://444 http://444 http://444