日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解析视频编码原理——从孙艺珍的电影说起(一)

發布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析视频编码原理——从孙艺珍的电影说起(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更多博文,請看音視頻系統學習的浪漫馬車之總目錄

視頻理論基礎:
視頻基礎知識掃盲
音視頻開發基礎知識之YUV顏色編碼
解析視頻編碼原理——從孫藝珍的電影說起(一)
解析視頻編碼原理——從孫藝珍的電影說起(二)

當天邊那顆星出現
你可知我又開始想念
有多少愛戀只能遙遙相望
就像月光灑向海面

每次聽到李健老師這首歌出神入化的歌聲,我就馬上浮起《電影假如愛有天意》的畫面,而現在的電影絕大部分都是由經過編碼壓縮的,所以視頻編碼就成為了視頻開發非常關鍵的一環節。

上一篇 音視頻入門之YUV顏色編碼,介紹了視頻的基本顏色編碼方式,有了顏色編碼的鋪墊,那么就可以很自然地進入視頻開發的主題地帶了~

從今天開始講下視頻編碼技術,計劃用兩篇博文講解,第一篇講解編碼基本原理,第二篇講解具體的碼流結構,博文內容很多在網上其他博客不一定能夠搜索到,并且盡量用工具和圖像提供可視化的呈現以幫助大家更好理解。這兩篇博文可以說將是 音視頻系統學習的浪漫馬車之總目錄
系列非常重要的2篇博文,它們是視頻理論知識最重要的部分,為后面視頻的開發奠定最重要的基礎。只有對編碼原理和碼流理解得足夠徹底,才能做好開發工作,因為視頻的開發不再是簡單地調用api的開發,如果理解不透徹,遇到問題根本無從下手,甚至連api都不知道要怎么使用

這里的編碼可以理解為壓縮,今天只打算將視頻編碼技術的基本原理講一下,不涉及具體數學知識,從一個宏觀角度去看整個視頻編碼流程。

上一篇音視頻開發基礎知識之YUV顏色編碼 我們已經知道在視頻中的像素是如何表示的,那么我們假設有一個電影視頻,分辨率是 1080P,幀率是 25fps,并且時長是 2 小時,如果是yuv420的格式的話,一個像素為1.5字節,那么如果不做視頻壓縮的話,它的大小是 1920 x 1080 x 1.5 x 25 x 2 x 3600 = 521.4G,一臺電腦能存放幾部電影呢?如果在網絡傳輸,那么對流量和帶寬的消耗可是非常大的(你要知道,在同個時間點,你們小區在看片的人就已經很多了),所以,為了滿足廣大群眾的需求,對視頻進行壓縮就顯示非常有必要,于是視頻壓縮技術就應運而生。

H.264簡介

說的視頻編碼技術,就不得不提到大名鼎鼎的H.264編碼。目前市面常見的編碼標準有H264、H265、VP8、VP9 和 AV1,而其中用的最普遍的視頻編碼就是H.264。

H264和H265都是國際標準化組織(ISO)和國際電信聯盟(ITU)開發的編碼標準,而VP8、VP9 和 AV1是谷歌開發的編碼標準,H264 和 H265 是需要專利費的,所以VP8、VP9 和 AV1(都是免費)也是谷歌為了對抗他們高昂專利費而開發出來的。

由于H.264是目前最常用的編碼標準,所以主要就來介紹它。H.264是國際標準化組織(ISO)和國際電信聯盟(ITU)共同提出的繼MPEG4之后的新一代數字視頻壓縮格式,也可以看做是國際電信聯盟(ITU)提出的h26x系列和國際電信聯盟(ITU)提出的MPEG系列斗爭多年最后決定化干戈為玉帛,為共同造福人類而努力的產物。

這是2家組織的一個斗爭轉合作的大致歷史,各位了解以下即可。

接下來,就是介紹H264的正題部分了。

視頻編碼基本原理

編碼總體思路

既然叫做壓縮,那么肯定是要去除冗余信息的,一般來說冗余信息要么是有重復多余的,可以直接丟棄或者換成另一種更省空間的方式來表達,要么是人感知不敏感,即使去掉一些信息,人也很難感知到。對于我么 Android開發來說,最熟悉的壓縮莫過于Bitmap的壓縮了,常見2種,一是壓縮分辨率,這個對應去除重復多余的信息,一種是質量壓縮,對應去掉一些人感知不敏感的信息。那么視頻也是有類似的冗余信息的:

  • 空間冗余,即相鄰的像素往往很相似。
  • 時間冗余,即相鄰的幀的內容往往很相似。
  • 視覺冗余,即人眼感知不敏感的信息。
  • H264壓縮技術正是針對以上冗余信息進行一一攻破,主要采用了以下幾種方法對視頻數據進行壓縮。最主要的步驟包括:

  • 幀內預測壓縮:解決的是空域數據冗余問題。
  • 幀間預測壓縮(運動估計與補償):解決的是時域數據冗徐問題。
  • 整數離散余弦變換(DCT),將空間上的相關性變為頻域上無關的數據然后進行量化,解決視覺冗余問題。
  • 熵編碼:真正的編碼環節,將前面3部處理得到的數據使用編碼算法編碼為最終的碼流。
  • 詳細請繼續閱讀之后部分:

    幀內預測

    空間冗余

    一幅圖像中相鄰像素的亮度和色度信息是比較接近的,并且亮度和色度信息也是逐漸變化的,不太會出現突變。也就是說,圖像具有空間相關性。 利用這種相關性,視頻壓縮就可以去除空間冗余信息。

    回到開頭提及的電影《假如愛有天意》中很喜歡的開頭那段孫藝珍的畫面:


    隨手圈出幾個區域都是亮度和色度信息是比較接近的,那么這些區域,是不是就可以不用完整數據記錄,而只要使用一小部分數據記錄就可以表達全部呢?

    比如android開發中的漸變色,我們并不需要指定整個圖像全部像素數據,而只是記錄開頭和結束以及中間變化的顏色,加上漸變位置以及漸變方向

    而視頻也是利用了類似的方法去除冗余信息,叫做幀內預測,即幀內預測通過利用已經編碼的相鄰像素的值來預測待編碼的像素值,最后達到減少空間冗余的目的。

    具體預測方法

    整體思路是利用一幀圖像中已經編碼部分來預測尚未編碼部分圖像,實際值和預測值之間的差別叫做殘差。實際上真正編碼的是殘差數據,因為殘差一般比較小,所以對殘差編碼比對實際數據編碼會小很多。

    所謂物以類聚人以群分,分而治之的思想又發揮重要作用了。為了可以利用編碼部分來預測尚未編碼部分圖像,所以需要根據具體情況對一幀圖像劃分為若干個部分, 每個部分叫做塊,其中某些塊可以預測另外一些塊。H264中對一幀圖像劃分為宏塊的方式來分別進行幀內預測,宏塊可以預測相鄰的宏塊,那么同個宏塊的像素就使用一種預測模式。那么何為宏塊呢?

    一張圖片

    比如一幀圖像如下:

    H264默認是使用 16X16像素大小的區域作為一個宏塊,其中亮度塊為 16 x 16,色度塊為 8 x 8,幀內預測中亮度塊和色度塊是分開獨立進行預測的,比如左上角區域:

    H264對比較平坦的圖像使用 16X16 大小的宏塊。但為了更高的壓縮率,在細節復雜的地方,還可以在 16X16 的宏塊上更劃分出更小的子塊。子塊的大小可以是 8X16、 16X8、 8X8、 4X8、 8X4、 4X4,非常的靈活。

    還是孫藝珍,紅色塊就是16*16的宏塊,綠色剪頭指的就是進一步劃分的子塊:

    對于4*4的宏塊,幀內預測模式總共有 9 個。其中有 8 種方向模式和一種 DC 模式,接下來簡單介紹下各種幀內預測模式:

    1.Vertical 模式
    Vertical 模式就是指,當前編碼亮度塊的每一列的像素值,都是復制上邊已經編碼塊的最下面那一行的對應位置的像素值。

    2.Horizontal 模式
    Horizontal 模式就是指,當前編碼亮度塊的每一行的像素值,都是復制左邊已經編碼塊的最右邊那一列的對應位置的像素值

    3.DC 模式
    DC 模式就是指,當前編碼亮度塊的每一個像素值,是上邊已經編碼塊的最下面那一行和左邊已編碼塊右邊最后一列的所有像素值的平均值,所以DC 模式預測得到的塊中每一個像素值都是一樣的。

    4.Diagonal Down-Left 模式
    Diagonal Down-Left 模式是上邊塊和右上塊的像素通過插值得到。如果上邊塊和右上塊不存在則該模式無效。

    5.Diagonal Down-Right 模式
    Diagonal Down-Right 模式需要通過上邊塊、左邊塊和左上角對角的像素通過插值得到。如果這三個有一個不存在則該模式無效。

    6.Vertical-Right 模式
    Vertical-Right 模式是需要通過上邊塊、左邊塊以及左上角對角的像素插值得到的。

    7.Horizontal-Down 模式
    Horizontal-Down 模式需要通過上邊塊、左邊塊以及左上角對角的像素插值得到。必須要這三個都有效才能使用,否則該模式無效。

    8.Vertical-Left 模式
    Vertical-Left 模式是需要通過上邊塊和右上塊最下面一行的像素通過插值得到。

    9.Horizontal-Up 模式
    Horizontal-Up 模式是需要通過左邊塊的像素通過插值得到的。

    總結一下就是:

    16 * 16和8 * 8的宏塊預測模式一樣,都是有4種幀內預測模式:

    前面三種在4 * 4宏塊預測模式中已經存在,只有最后一種plane是4 * 4宏塊預測模式沒有的。

    plane預測塊的每一個像素值,都是將上邊已編碼塊的最下面那一行,和左邊已編碼塊右邊最后一列的像素值經過一定算法計算得到。

    每一個宏塊只能用一種預測模式,那如何選擇呢?具體算法很復雜,大概思路就是對于每一個塊或者子塊,我們可以得到預測塊,再用實際待編碼的塊減去預測塊就可以得到殘差塊。然后在不同場景下根據不同的算法對殘差塊進行計算得到最優的預測模式

    所謂工欲善其事必先利其器,可能上面基本都是理論的東西,看起來還是有點霧里看花,那么可以使用H264Visa這種優秀的視頻查看工具來查看一個H264文件具體編碼的數據,真真切切感受編碼是如何進行的。

    這里有一段抖音某個紅人的視頻:

    用FFmpeg轉為H264文件(具體怎么轉后面講FFmpeg再講),用H264Visa打開:

    暫時只看第一幀(因為第一幀必定是I幀,即只有幀內預測的幀,關于I幀后面會詳細講解)

    上面一個個數字對應每個宏塊的具體圖像數值,可以表示該宏塊的量化參數QP(關于量化,后面也會講到),也可以切換為表示宏塊碼流大小。

    選中其中一個宏塊,可以查看宏塊基本信息:

    圖中右邊紅框部分可以看到宏塊的坐標、宏塊大小、宏塊類型以及QP等信息。可以看到該宏塊是4*4、I宏塊(僅使用幀內預測)、坐標為(16,48)。

    可以直接看到該宏塊的所用到的預測模式,可以看到亮度(Y)和色度(UV)是分別預測的,所用的宏塊大小也是不一樣的。

    這是預測幀,可以看到和原始幀還是有差別的,看起來更模糊了些:
    原始幀和預測幀相減得到的就是殘差幀了:


    這可以說已經是面目全非了,只剩一點點輪廓,而這些殘差數據將和相關預測信息全部一起送到后面步驟,即變換和量化、編碼處理后打入碼流。

    用一種更為量化的方式查看該宏塊,直接查看該宏塊的原始幀yuv數據:

    殘差幀的yuv數據:

    可以看出經過參數幀大部分像素數值變成0了,這部分數據將傳入下一個階段,而正是利用殘差數據擁有大量0的特點(后面的變換量化還會增加0的個數),這一部分數據通過編碼后放入碼流將大大減少碼流大小。

    幀間預測

    時間冗余

    在一個視頻中,一般前后兩幀圖像往往變化比較小,這就是視頻的時間相關性。
    而視頻一般往往一秒會播放20-30幀,所以存在大量重復的圖像數據,所以會有巨大的壓縮空間。

    還是孫藝珍在這部電影中的連續5幀畫面:




    很明顯,5幀畫面差別非常小,那么很容易想到,能不能只記錄第一幀畫面數據,然后后面幾幀只記錄差別數據呢?

    視頻編碼中,就是通過在已經編碼的幀里面找到一個塊來預測待編碼塊的像素,從而達到減少時間冗余的目的,官方名稱為:幀間預測。

    具體來說,就是在前面某一幀找到一個內容很接近的塊,那么只要再加上運動矢量,就可以表示當前的塊。

    比如這是前后兩幀(圖來源于:幀間預測:如何減少時間冗余),背景的樹木都是靜止的,只有汽車是移動的,對整個圖片建立坐標系,那么汽車的移動就可以用運動矢量(-163,0)(16是因為每個宏塊為1616)表示:


    回到現實視頻例子,比如前面一幀孫藝珍的左手是一個塊:

    到了后面若干幀之后,這個塊的位置發生了移動,但是內容基本一致(存在較小的殘差數據)

    所以后面的這一幀就不必記錄左手這一個塊的圖像信息了,只要記錄運動矢量、所參考的宏塊標識和殘差數據即可,這樣比直接把后面一幀的左手的圖像數據編碼進入碼流要小很多。前面一幀也就是后面一幀的參考幀。

    類似加上下圖的綠色剪頭:

    用專業分析軟件打開看看運動矢量分析圖:


    可以看到大量密密麻麻讓人犯密集恐懼癥的細線,表示運動矢量,而我們關注的孫藝珍左手的塊(綠色框),上面的紅色線方向大體和移動方向一致。

    運動估計

    幀間預測一個重要概念就是運動估計,就是尋找當前編碼的塊在已編碼圖像中的最佳對應塊

    如圖,假設P為當前編碼幀,Pr為參考幀,當前編碼塊為B,則運動估計要做的就是在Pr中尋找與B相減殘差最小的塊Br,Br就叫做B的最佳匹配塊。

    放到孫藝珍視頻例子中,運動估計就是尋找上面第二幅圖中孫藝珍左手在第一張圖中對應的最佳圖像塊。當然我們人眼可以很快找到后面一幀左手和前面一幀左手是最佳匹配,但是計算機可就不好找了,所以幀間預測這里的難點在于如何找到最佳的參考塊來預測當前塊,這里涉及很多復雜的運動搜索算法,主要有這兩種算法:

    (1)全局搜索算法。該方法是把搜索區域內所有的像素塊逐個與當前宏塊進行比較,查找具有最小匹配誤差的一個像素塊為匹配塊。這一方法的好處是可以找到最佳的匹配塊,壞處是速度太慢。目前全局搜索算法極少使用。
    (2)快速搜索算法。該方法按照一定的數學規則進行匹配塊的搜索。這一方法的好處是速度快,壞處是可能只能得到次最佳的匹配塊。

    具體可以看下幀間預測:如何減少時間冗余,這里重點是要知道I幀,P幀和B幀這幾個概念。

    GOP

    前面已經介紹了幀內預測和幀間預測2種壓縮技術,結合具體視頻內容,為了得到更好的壓縮率,我們可以對不同的幀使用不同的預測壓縮方式。我們知道一個視頻會有若干個場景,即在一個內容為相似的背景或者空間內有著相似的人物或者物體,而每個場景會由若干幀組成,而這些幀往往是強相關的,最適合進行幀間預測,這里一個場景的幀的組合,就叫做GOP(group of pictures)。

    比如剛才孫藝珍是在屋子的窗前,坐著打開收藏盒:
    這個場景持續了幾秒,播放了好多好多幀,然后切到孫藝珍接電話的場景:

    這里就是2個視頻場景GOP,根據場景內幀的強相關性和幀預測理論,所以可以對一個場景的首幀進行幀內預測去除空間冗余,然后后面的幀來參考首幀,再后面的幀再來參考前面已經預測出來的幀,為了更好地降低壓縮率,還可以不止一個參考幀,比如一幀可以參考前后2幀,于是就出現了I幀,P幀和B幀。

    經過壓縮后的幀被人為劃分為分為:I幀,P幀和B幀:
      I幀:關鍵幀,采用幀內壓縮技術。
      P幀:向前參考幀,在壓縮時,只參考前面已經處理的幀。采用幀間壓縮和幀內技術。
      B幀:雙向參考幀,在壓縮時,它即參考前而的幀,又參考它后面的幀。采用幀間和幀內壓縮技術。

    由于P、B幀同時包含幀間幀內預測,所以宏塊同樣也有劃分I、P、B宏塊,I宏塊用來做幀內預測,宏塊用來做向前參考幀的預測,B宏塊用來做雙向參考幀預測。I幀僅包含I宏塊,P幀包含P宏塊和I宏塊,B幀包含B宏塊和I宏塊。


    那么GOP究竟是什么呢?

    GOP是一個圖像序列,一般可以理解為一個場景的若干個幀,比如一段電影片段在主角在公園里,因為整體畫面差別不大,所以可以放入一個gop中,接下來切到主角在室內了,那么此時就重新開始另一個gop了。在一個圖像序列中只有一個I幀。如下圖所示:

    每個GOP首幀就是I幀,它采用幀內預測,是一個全幀壓縮編碼幀,描述了圖像背景和運動主體的詳情,不需要考慮運動矢量,解碼時僅用I 幀的數據就可重構完整圖像,是P幀和B幀的參考幀

    后面的幀會使用幀間預測技術參考I幀或之后編碼出來的P幀,P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據。P幀是以 I 幀或前面的P幀為參考幀,在 參考幀中找出P幀“某點”的預測值和運動矢量,取預測差值和運動矢量一起傳送。在接收端根據運行矢量從 I 幀找出P幀“某點”的預測值并與差值相加以得到P幀“某點”樣值,從而可得到完整的P幀。

    B幀是雙向差別幀,和P幀的主要區別在于它是參考前后2幀,也就是B幀記錄的是本幀與前后幀的差別。 B幀以前面的 I 或P幀和后面的P幀為參考幀,“找出”B幀“某點”的預測值和兩個運動矢量,并取預測差值和運動矢量傳送。不過正是由于需要參考后面的P幀,所以B幀雖然提高了壓縮率,但是也帶來了編碼延遲問題(需要等后面一幀編碼好才能編碼)。

    B幀的雙向預測圖:

    由于幀間預測需要參考編碼好的幀,所以需要緩存隊列緩存編碼好的再解碼重建的幀來給后續編碼的幀作為參考幀。那為什么不直接拿原始宏塊而要專門重新解碼編碼好的宏塊做為參考呢?關鍵點在于為了和解碼流程保持一致的參考宏塊,因為編碼出來的宏塊和解碼重建的宏塊并非完全一致的,所以如果幀間預測在編碼端和解碼器端參考幀不一致,就會出錯。

    比如B幀需要前后參考幀,所以需要2個緩存隊列:

    這里由于B幀的引入,會導致一個現象,就是編碼的幀順序和播放的幀順序會不一致

    所以也衍生了pts和dts2個時間戳,這在后面的代碼開發是一種很需要注意的點,不然用錯出問題了都不知道什么原因。

    打個比方,就比如有一排人,每人說一句話,他們每個人要說的東西比較接近,但是要求說話字數盡量少。為了使得總說話的數量盡量少,第一個人說了完整的一句話(盡量概括),后面的人只說了相對第一個人說的話有區別的部分,而還有的人說了和前后2個人區別的部分,使得總的需要說的話更少。這樣子只要推導一下就能推導出他們每個人完整的話的內容。

    顯然I幀壓縮率最低,其次是P幀,B幀壓縮率最高。

    這里還要提到一種特殊的I幀,叫做IDR幀,因為幀間預測技術總是不斷參考前面已經編碼成功的幀,那如果其中一幀編碼出錯,那可能造成后面幀的錯誤傳遞,比如第一個人說話說錯了一個字,那么后面參考他的人基于他的話說了區別部分,那么推導出的原話必然會出錯。所以IDR幀的作用就是用來阻斷錯誤傳遞的,它就限制后面同個GOP的幀不能參考前面的GOP的幀,這樣一旦某一幀出錯,錯誤也僅限于一個GOP內,不會傳入下一個GOP。

    Gop越長,編碼的I幀就越少,壓縮率越高,但是視頻質量往往越差。那么Gop設置多長合適呢?
    本地視頻文件一般根據具體場景選擇壓縮率和質量的折中方案。直播流一般是幀率的倍數,一般不會設置過長,因為如果Gop太長,則進入直播間的時候等待I幀的時間會越長,導致出現黑屏卡頓的用戶體驗問題(因為必須有I幀才能解碼整個Gop)。另外Gop太長,點播場景時進行視頻的 seek 操作就會不方便。

    繼續用H264Visa分析前面抖音那段視頻,現在看第三幀:

    可以看到現在選中的是一個B幀的16*16的B宏塊,根據前面說的,它支持幀內和幀間預測。


    打開預測信息選項卡,可以看到具體的運動矢量數據(圖右側的MV(motion vector))是非常豐富的,因為此時的宏塊是在主播的手的影像,視頻此時手正處于運動中。

    作為對比,看另一塊靜止的宏塊:


    可以看出運動矢量都是0。

    注意到該宏塊是屬于skip類型,即不會放入碼流的,為什么呢?因為它是不運動的宏塊,和所參考的幀的對應參考宏塊是完全一樣的,所以當前幀是沒有必要存放這一宏塊數據的。

    總結

    由于篇幅關系,視頻編碼原理的前半部分就到這,本文主要是簡單介紹了H264歷史背景,并著重介紹了H264中的幀內幀間預測理論基礎和具體方法,并通過工具查看了實際相關數據,下篇文章將繼續講解H264編碼剩余部分——變換量化、熵編碼:解析視頻編碼原理——從孫藝珍的電影說起(二)

    由于視頻編碼技術復雜,本人水平有限,有錯誤的地方也請各位指正哈~

    參考文章:
    編碼原理:視頻究竟是怎么編碼壓縮的?
    幀內預測:如何減少空間冗余?
    幀間預測:如何減少時間冗余?
    變換量化:如何減少視覺冗余?
    H264 I幀 P幀 B幀
    《深入理解視頻編解碼技術》
    《H.264和MPEG-4視頻壓縮 新一代多媒體的視頻編碼技術》

    如果覺得本文有幫助,別忘了點贊關注哦~

    總結

    以上是生活随笔為你收集整理的解析视频编码原理——从孙艺珍的电影说起(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久热热 | 激情综合网五月婷婷 | 成人在线免费高清视频 | 美女的胸给男人玩视频 | 色婷婷国产精品久久包臀 | 欧美人妖乱大交 | 国产99对白在线播放 | 欧美久久久久久久 | 亚洲 小说 欧美 激情 另类 | 日韩一区二区三区在线免费观看 | 欧亚av | 中文字幕亚洲国产 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 中国美女一级片 | 亚洲天堂网址 | 奇米影视av | 成人精品一区二区三区在线 | 三上悠亚在线一区二区 | 国产二级片 | 国内自拍在线观看 | 亚洲天堂男人的天堂 | 亚洲成人黄色影院 | 亚洲天堂av免费在线观看 | 亚洲一级黄色片 | 成人黄性视频 | 日本一区不卡 | 国产91高清| 精品亚洲一区二区三区 | 一本—道久久a久久精品蜜桃 | 欧美性极品少妇xxxx | 秘密基地免费观看完整版中文 | 天堂婷婷| 欧美草b| 国产中文欧美日韩在线 | 以女性视角写的高h爽文 | 欧美 日韩 人妻 高清 中文 | 免费高清欧美大片在线观看 | 在线电影一区 | 伊人超碰| 99热这里只有精品99 | 国内自拍真实伦在线观看 | 女十八毛片 | 影音先锋毛片 | 久久色图| 色多多视频在线观看 | 欧美亚洲黄色片 | 青青草激情视频 | 怡红院精品视频 | 成年人午夜视频 | 凸凹人妻人人澡人人添 | 一区二区三区激情 | 日本福利网站 | 国产一区两区 | 久久精品国产亚洲av久一一区 | 亚洲综合免费视频 | wwwxxxx在线观看 | 天堂网色 | 超碰婷婷 | 亚洲国产三级 | 亚洲成人av电影在线 | 蜜臀在线视频 | xxxx日韩| 国内免费av | www.九色.com | 91av在线视频观看 | 国模大胆一区二区三区 | 精品人妻一区二区三区在线视频 | 日韩黄色av网站 | 国产黄色网页 | 疯狂做爰高潮videossex | 午夜精品久久久久久久91蜜桃 | 国产伦精品一区二区三区88av | 欧美性高潮 | 国产美女一级片 | 1级黄色大片 | 级毛片内射视频 | 免费看欧美黄色片 | 五色天婷婷 | 亚洲一区二区免费电影 | a毛片大片 | 老司机午夜性大片 | 九草网 | 欧美精品一区三区 | 国产jjizz一区二区三区视频 | 欧美日韩精品国产 | 欧美1页| 久久久久99精品成人片直播 | 亚洲一区二区在线播放 | 国产精品夜夜躁视频 | 最近免费中文字幕 | 精品午夜一区二区三区在线观看 | 欧美精品xx | 国产天天骚| 国模小黎自慰gogo人体 | 欧美成人一区二区三区片免费 | 大奶一区二区 | 国产精品xxx | 国产乱码精品一区二三区蜜臂 | 黄色一二三区 |