波多野结衣简介_爱的色放3_欧美精品一区二_五月亚洲婷婷_美女被娇喘视频_亚洲午夜免费_好吊色视频988gao在线观看_在线一区_99久久精品免费视频_欧美色吊丝_亚洲色图小说_亚洲两性视频_男女做的视频_亚洲自拍图片_免费黄色一级片

資訊專欄INFORMATION COLUMN

Canvas + WebSocket + Redis 實現一個視頻彈幕

wangdai / 2504人閱讀

摘要:創建彈幕功能的類及基本參數處理布局時需要注意的默認寬為,高為,我們要保證完全覆蓋整個視頻,需要讓與寬高相等。因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以畫布的寬高并沒有通過來設置,而是通過在類創建實例初始化屬性的時候動態設置。


閱讀原文


頁面布局

首先,我們需要實現頁面布局,在根目錄創建 index.html 布局中我們需要有一個 video 多媒體標簽引入我們的本地視頻,添加輸入彈幕的輸入框、確認發送的按鈕、顏色選擇器、字體大小滑動條,創建一個 style.css 來調整頁面布局的樣式,這里我們順便創建一個 index.js 文件用于后續實現我們的核心邏輯,先引入到頁面當中。

HTML 布局代碼如下:





    
    
    視頻彈幕


    

Canvas + WebSocket + Redis 實現視頻彈幕

CSS 樣式代碼如下:

/* 文件:style.css */
#cantainer {
    text-align: center;
}
#content {
    width: 640px;
    margin: 0 auto;
    position: relative;
}
#canvas {
    position: absolute;
}
video {
    width: 640px;
    height: 360px;
}
input {
    vertical-align: middle;
}

布局效果如下圖:


定義接口,構造假數據

我們彈幕中的彈幕數據正常情況下應該是通過與后臺數據交互請求回來,所以我們需要先定義數據接口,并構造假數據來實現前端邏輯。

數據字段定義:

value:表示彈幕的內容(必填)

time:表示彈幕出現的時間(必填)

speed:表示彈幕移動的速度(選填)

color:表示彈幕文字的顏色(選填)

fontSize:表示彈幕的字體大小(選填)

opacity:表示彈幕文字的透明度(選填)

上面的 valuetime 是必填參數,其他的選填參數可以在前端設置默認值。

前端定義的假數據如下:

// 文件:index.js
let data = [
    {
        value: "這是第一條彈幕",
        speed: 2,
        time: 0,
        color: "red",
        fontSize: 20
    },
    {
        value: "這是第二條彈幕",
        time: 1
    }
];


實現前端彈幕的邏輯

我們希望是把彈幕封裝成一個功能,只要有需要的地方就可以使用,從而實現復用,那么不同的地方使用這個功能通常的方式是 new 一個實例,傳入當前使用該功能對應的參數,我們也使用這種方式來實現,所以我們需要封裝一個統一的構造函數或者類,參數為當前的 canvas 元素、video 元素和一個 options 對象,options 里面的 data 屬性為我們的彈幕數據,之所以不直接傳入 data 是為了后續參數的擴展,嚴格遵循開放封閉原則,這里我們就統一使用 ES6 的 class 類來實現。

1、創建彈幕功能的類及基本參數處理

布局時需要注意 Canvas 的默認寬為 300px,高為 150px,我們要保證 Canvas 完全覆蓋整個視頻,需要讓 Canvas 與 video 寬高相等。
因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以 Canvas 畫布的寬高并沒有通過 CSS 來設置,而是通過 JS 在類創建實例初始化屬性的時候動態設置。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);
    }
}

應該掛在實例上的屬性除了有當前的 canvas 元素、video 元素、彈幕數據的默認選項以及彈幕數據之外,還應該有一個代表當前是否渲染彈幕的參數,因為視頻暫停的時候,彈幕也是暫停的,所以沒有重新渲染,因為是否暫停與彈幕是否渲染的狀態是一致的,所以我們這里就用 isPaused 參數來代表當前是否暫停或重新渲染彈幕,值類型為布爾值。

2、創建構造每一條彈幕的類

我們知道,后臺返回給我們的彈幕數據是一個數組,這個數組里的每一個彈幕都是一個對象,而對象上有著這條彈幕的信息,如果我們需要在每一個彈幕對象上再加一些新的信息或者在每一個彈幕對象的處理時用到了當前彈幕功能類 CanvasBarrage 實例的一些屬性值,取值顯然是不太方便的,這樣為了后續方便擴展,遵循開放封閉原則,我們把每一個彈幕的對象轉變成同一個類的實例,所以我們創建一個名為 Barrage 的類,讓我們每一條彈幕的對象進入這個類里面走一遭,掛上一些擴展的屬性。

// 文件:index.js
class Barrage {
    constructor(item, ctx) {
        this.value = item.value; // 彈幕的內容
        this.time = item.time; // 彈幕出現的時間
        this.item = item; // 每一個彈幕的數據對象
        this.ctx = ctx; // 彈幕功能類的執行上下文
    }
}

在我們的 CanvasBarrage 類上有一個存儲彈幕數據的數組 data,此時我們需要給 CanvasBarrage 增加一個屬性用來存放 “加工” 后的每條彈幕對應的實例。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // ********** 以下為新增代碼 **********
        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));
        // ********** 以上為新增代碼 **********
    }
}

其實通過上面操作以后,我們相當于把 data 里面的每一條彈幕對象轉換成了一個 Barrage 類的一個實例,把當前的上下文 this 傳入后可以隨時在每一個彈幕實例上獲取 CanvasBarrage 類實例的屬性,也方便我們后續擴展方法,遵循這種開放封閉原則的方式開發,意義是不言而喻的。

3、在 CanvasBarrage 類實現渲染所有彈幕的 render 方法

CanvasBarragerender 方法是在創建彈幕功能實例的時候應該渲染 Canvas 所以應該在 CanvasBarrage 中調用,在 render 內部,每一次渲染之前都應該先將 Canvas 畫布清空,所以需要給當前的 CanvasBarrage 類新增一個屬性用于存儲 Canvas 畫布的內容。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));

        // ********** 以下為新增代碼 **********
        // Canvas 畫布的內容
        this.context = canvas.getContext("2d");

        // 渲染所有的彈幕
        this.render();
        // ********** 以上為新增代碼 **********
    }

    // ********** 以下為新增代碼 **********
    render() {
        // 渲染整個彈幕
        // 第一次先進行清空操作,執行渲染彈幕,如果沒有暫停,繼續渲染
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        // 渲染彈幕
        this.renderBarrage();
        if (this.isPaused == false) {
            // 遞歸渲染
            requestAnimationFrame(this.render.bind(this));
        }
    }
    // ********** 以上為新增代碼 **********
}

在上面的 CanvasBarragerender 函數中,清空時由于 Canvas 性能比較好,所以將整個畫布清空,所以從坐標 (0, 0) 點,清空的寬高為整個 Canvas 畫布的寬高。

只要視頻是在播放狀態應該不斷的調用 render 方法實現清空畫布、渲染彈幕、判斷是否暫停,如果非暫停狀態繼續渲染,所以我們用到了遞歸調用 render 去不斷的實現渲染,但是遞歸時如果直接調用 render,性能特別差,程序甚至會掛掉,以往這種情況我們會在遞歸外層加一個 setTimeout 來定義一個短暫的遞歸時間,但是這個過程類似于動畫效果,如果使用 setTimeout 其實是將同步代碼轉成了異步執行,會增加不確定性導致畫面出現卡頓的現象。

這里我們使用 H5 的新 API requestAnimationFrame,可以在平均 1/60 S 內幫我執行一次該方法傳入的回調,我們直接把 render 函數作為回調函數傳入 requestAnimationFrame,該方法是按照幀的方式執行,動畫流暢,需要注意的是,render 函數內使用了 this,所以應該處理一下 this 指向問題。

由于我們使用面向對象的方式,所以渲染彈幕的具體細節,我們抽離出一個多帶帶的方法 renderBarrage,接下來看一下 renderBarrage 的實現。

4、CanvasBarrage 類 render 內部 renderBarrage 的實現
// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));

        // Canvas 畫布的內容
        this.context = canvas.getContext("2d");

        // 渲染所有的彈幕
        this.render();
    }
    render() {
        // 渲染整個彈幕
        // 第一次先進行清空操作,執行渲染彈幕,如果沒有暫停,繼續渲染
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        // 渲染彈幕
        this.renderBarrage();
        if (this.isPaused == false) {
            // 遞歸渲染
            requestAnimationFrame(this.render.bind(this));
        }
    }

    // ********** 以下為新增代碼 **********
    renderBarrage() {
        // 將數組的彈幕一個一個取出,判斷時間和視頻的時間是否符合,符合就執行渲染此彈幕
        let time = this.video.currentTime;
        this.barrages.forEach(barrage => {
            // 當視頻時間大于等于了彈幕設置的時間,那么開始渲染(時間都是以秒為單位)
            if (time >= barrage.time) {
                // 初始化彈幕的各個參數,只有在彈幕將要出現的時候再去初始化,節省性能,初始化后再進行繪制
                // 如果沒有初始化,先去初始化一下
                if (!barrage.isInited) {
                    // 初始化后下次再渲染就不需要再初始化了,所以創建一個標識 isInited
                    barrage.init();
                    barrage.isInited = true;
                }
            }
        });
    }
    // ********** 以上為新增代碼 **********
}

此處的 renderBarrage 方法內部主要對每一條彈幕實例所設置的出現時間和視頻的播放時間做對比,如果視頻的播放時間大于等于了彈幕出現的時間,說明彈幕需要繪制在 Canvas 畫布內。

之前我們的每一條彈幕實例的屬性可能不全,彈幕的其他未傳參數并沒有初始化,所以為了最大限度的節省性能,我們在彈幕該第一次繪制的時候去初始化參數,等到視頻播放的時間變化再去重新繪制時,不再初始化參數,所以初始化參數的方法放在了判斷彈幕出現時間的條件里面執行,又設置了代表彈幕實例是不是初始化了的參數 isInited,初始化函數 init 執行過一次后,馬上修改 isInited 的值,保證只初始化參數一次。

renderBarrage 方法中我們可以看出來,其實我們是循環了專門存放每一條彈幕實例(Barrage 類的實例)的數組,我們在內部用實例去調用的方法 init 應該是在 Barrage 類的原型上,下面我們去 Barrage 類上實現 init 的邏輯。

5、Barrage 類 init 的實現
// 文件:index.js
class Barrage {
    constructor(item, ctx) {
        this.value = item.value; // 彈幕的內容
        this.time = item.time; // 彈幕出現的時間
        this.item = item; // 每一個彈幕的數據對象
        this.ctx = ctx; // 彈幕功能類的執行上下文
    }

    // ********** 以下為新增代碼 **********
    init() {
        this.opacity = this.item.opacity || this.ctx.opacity;
        this.color = this.item.color || this.ctx.color;
        this.fontSize = this.item.fontSize || this.ctx.fontSize;
        this.speed = this.item.speed || this.ctx.speed;

        // 求自己的寬度,目的是用來校驗當前是否還要繼續繪制(邊界判斷)
        let span = document.createElement("span");

        // 能決定寬度的只有彈幕的內容和文字的大小,和字體,字體默認為微軟雅黑,我們就不做設置了
        span.innerText = this.value;
        span.style.font = this.fontSize + "px "Microsoft YaHei";

        // span 為行內元素,取不到寬度,所以我們通過定位給轉換成塊級元素
        span.style.position = "absolute";

        document.body.appendChild(span); // 放入頁面
        this.width = span.clientWidth; // 記錄彈幕的寬度
        document.body.removeChild(span); // 從頁面移除

        // 存儲彈幕出現的橫縱坐標
        this.x = this.ctx.canvas.width;
        this.y = this.ctx.canvas.height;

        // 處理彈幕縱向溢出的邊界處理
        if (this.y < this.fontSize) {
            this.y = this.fontSize;
        }
        if (this.y > this.ctx.canvas.height - this.fontSize) {
            this.y = this.ctx.canvas.height - this.fontSize;
        }
    }
    // ********** 以上為新增代碼 **********
}

在上面代碼的 init 方法中我們其實可以看出,每條彈幕實例初始化的時候初始的信息除了之前說的彈幕的基本參數外,還獲取了每條彈幕的寬度(用于后續做彈幕是否已經完全移出屏幕的邊界判斷)和每一條彈幕的 xy 軸方向的坐標并為了防止彈幕在 y 軸顯示不全做了邊界處理。

6、實現每條彈幕的渲染和彈幕移除屏幕的處理

我們當時在 CanvasBarrage 類的 render 方法中的渲染每個彈幕的方法 renderBarrage中(原諒這么啰嗦,因為到現在內容已經比較多,說的具體一點方便知道是哪個步驟,哈哈)只做了對每一條彈幕實例的初始化操作,并沒有渲染在 Canvas 畫布中,這時我們主要做兩部操作,實現每條彈幕渲染在畫布中和左側移出屏幕不再渲染的邊界處理。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));

        // Canvas 畫布的內容
        this.context = canvas.getContext("2d");

        // 渲染所有的彈幕
        this.render();
    }
    render() {
        // 渲染整個彈幕
        // 第一次先進行清空操作,執行渲染彈幕,如果沒有暫停,繼續渲染
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        // 渲染彈幕
        this.renderBarrage();
        if (this.isPaused == false) {
            // 遞歸渲染
            requestAnimationFrame(this.render.bind(this));
        }
    }
    renderBarrage() {
        // 將數組的彈幕一個一個取出,判斷時間和視頻的時間是否符合,符合就執行渲染此彈幕
        let time = this.video.currentTime;
        this.barrages.forEach(barrage => {
            // ********** 以下為改動的代碼 **********
            // 當視頻時間大于等于了彈幕設置的時間,那么開始渲染(時間都是以秒為單位)
            if (!barrage.flag && time >= barrage.time) {
                // ********** 以上為改動的代碼 **********

                // 初始化彈幕的各個參數,只有在彈幕將要出現的時候再去初始化,節省性能,初始化后再進行繪制
                // 如果沒有初始化,先去初始化一下
                if (!barrage.isInited) {
                    // 初始化后下次再渲染就不需要再初始化了,所以創建一個標識 isInited
                    barrage.init();
                    barrage.isInited = true;
                }

                // ********** 以下為新增代碼 **********
                barrage.x -= barrage.speed;
                barrage.render(); // 渲染該條彈幕
                if (barrage.x < barrage.width * -1) {
                    barrage.flag = true; // 是否出去了,出去了,做停止渲染的操作
                }
                // ********** 以上為新增代碼 **********
            }
        });
    }
}

每個彈幕實例都有一個 speed 屬性,該屬性代表著彈幕移動的速度,換個說法其實就是每次減少的 x 軸的差值,所以我們其實是通過改變 x 軸的值再重新渲染而實現彈幕的左移,我們創建了一個標識 flag 掛在每個彈幕實例下,代表是否已經離開屏幕,如果離開則更改 flag 的值,使外層的 CanvasBarrage 類的 render 函數再次遞歸時不進入渲染程序。

每一條彈幕具體是怎么渲染的,通過代碼可以看出每個彈幕實例在 x 坐標改變后都調用了實例方法 render 函數,注意此 render 非彼 render,該 render 函數屬于 Barrage 類,目的是為了渲染每一條彈幕,而 CanvasBarrage 類下的 render,是為了在視頻時間變化時清空并重新渲染整個 Canvas 畫布。

7、Barrage 類下的 render 方法的實現
// 文件:index.js
class Barrage {
    constructor(item, ctx) {
        this.value = item.value; // 彈幕的內容
        this.time = item.time; // 彈幕出現的時間
        this.item = item; // 每一個彈幕的數據對象
        this.ctx = ctx; // 彈幕功能類的執行上下文
    }
    init() {
        this.opacity = this.item.opacity || this.ctx.opacity;
        this.color = this.item.color || this.ctx.color;
        this.fontSize = this.item.fontSize || this.ctx.fontSize;
        this.speed = this.item.speed || this.ctx.speed;

        // 求自己的寬度,目的是用來校驗當前是否還要繼續繪制(邊界判斷)
        let span = document.createElement("span");

        // 能決定寬度的只有彈幕的內容和文字的大小,和字體,字體默認為微軟雅黑,我們就不做設置了
        span.innerText = this.value;
        span.style.font = this.fontSize + "px "Microsoft YaHei";

        // span 為行內元素,取不到寬度,所以我們通過定位給轉換成塊級元素
        span.style.position = "absolute";

        document.body.appendChild(span); // 放入頁面
        this.width = span.clientWidth; // 記錄彈幕的寬度
        document.body.removeChild(span); // 從頁面移除

        // 存儲彈幕出現的橫縱坐標
        this.x = this.ctx.canvas.width;
        this.y = this.ctx.canvas.height;

        // 處理彈幕縱向溢出的邊界處理
        if (this.y < this.fontSize) {
            this.y = this.fontSize;
        }
        if (this.y > this.ctx.canvas.height - this.fontSize) {
            this.y = this.ctx.canvas.height - this.fontSize;
        }
    }

    // ********** 以下為新增代碼 **********
    render() {
        this.ctx.context.font = this.fontSize + "px "Microsoft YaHei"";
        this.ctx.context.fillStyle = this.color;
        this.ctx.context.fillText(this.value, this.x, this.y);
    }
    // ********** 以上為新增代碼 **********
}

從上面新增代碼我們可以看出,其實 Barrage 類的 render 方法只是將每一條彈幕的字號、顏色、內容、坐標等屬性通過 Canvas 的 API 添加到了畫布上。

8、實現播放、暫停事件

還記得我們的 CanvasBarrage 類里面有一個屬性 isPaused,屬性值控制了我們是否遞歸渲染,這個屬性與視頻暫停的狀態是一致的,我們在播放的時候,彈幕不斷的清空并重新繪制,當暫停的時候彈幕也應該跟著暫停,說白了就是不在調用 CanvasBarrage 類的 render 方法,其實就是在暫停、播放的過程中不斷的改變 isPaused 的值即可。

還記得我們之前構造的兩條假數據 data 吧,接下來我們添加播放、暫停事件,來嘗試使用一下我們的彈幕功能。

// 文件:index.js
// 實現一個簡易選擇器,方便獲取元素,后面獲取元素直接調用 $
const $ = document.querySelector.bind(document);

// 獲取 Canvas 元素和 Video 元素
let canvas = $("#canvas");
let video = $("#video");

let canvasBarrage = new CanvasBarrage(canvas, video, {
    data
});

// 添加播放事件
video.addEventListener("play", function() {
    canvasBarrage.isPaused = false;
    canvasBarrage.render();
});

// 添加暫停事件
video.addEventListener("pause", function() {
    canvasBarrage.isPaused = true;
});
9、實現發送彈幕事件
// 文件:index.js
$("#add").addEventListener("click", function() {
    let time = video.currentTime; // 發送彈幕的時間
    let value = $("#text").value; // 發送彈幕的文字
    let color = $("#color").value; // 發送彈幕文字的顏色
    let fontSize = $("#range").value; // 發送彈幕的字體大小
    let sendObj = { time, value, color, fontSize }; //發送彈幕的參數集合
    canvasBarrage.add(sendObj); // 發送彈幕的方法
});

其實我們發送彈幕時,就是向 CanvasBarrage 類的 barrages 數組里添加了一條彈幕的實例,我們多帶帶封裝了一個 add 的實例方法。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));

        // Canvas 畫布的內容
        this.context = canvas.getContext("2d");

        // 渲染所有的彈幕
        this.render();
    }
    render() {
        // 渲染整個彈幕
        // 第一次先進行清空操作,執行渲染彈幕,如果沒有暫停,繼續渲染
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        // 渲染彈幕
        this.renderBarrage();
        if (this.isPaused == false) {
            // 遞歸渲染
            requestAnimationFrame(this.render.bind(this));
        }
    }
    renderBarrage() {
        // 將數組的彈幕一個一個取出,判斷時間和視頻的時間是否符合,符合就執行渲染此彈幕
        let time = this.video.currentTime;
        this.barrages.forEach(barrage => {
            // 當視頻時間大于等于了彈幕設置的時間,那么開始渲染(時間都是以秒為單位)
            if (!barrage.flag && time >= barrage.time) {
                // 初始化彈幕的各個參數,只有在彈幕將要出現的時候再去初始化,節省性能,初始化后再進行繪制
                // 如果沒有初始化,先去初始化一下
                if (!barrage.isInited) {
                    // 初始化后下次再渲染就不需要再初始化了,所以創建一個標識 isInited
                    barrage.init();
                    barrage.isInited = true;
                }

                barrage.x -= barrage.speed;
                barrage.render(); // 渲染該條彈幕
                if (barrage.x < barrage.width * -1) {
                    barrage.flag = true; // 是否出去了,出去了,做停止渲染的操作
                }
            }
        });
    }

    // ********** 以下為新增代碼 **********
    add(item) {
        this.barrages.push(new Barrage(item, this));
    }
    // ********** 以上為新增代碼 **********
}
10、拖動進度條實現彈幕的前進和后退

其實我們發現,彈幕雖然實現了正常的播放、暫停以及發送,但是當我們拖動進度條的時候彈幕應該是跟著視頻時間同步播放的,現在的彈幕一旦播放過無論怎樣拉動進度條彈幕都不會再出現,我們現在就來解決這個問題。

// 文件:index.js
// 拖動進度條事件
video.addEventListener("seeked", function() {
    canvasBarrage.reset();
});

我們在事件內部其實只是調用了一下 CanvasBarrage 類的 reset 方法,這個方法就是在拖動進度條的時候來幫我們初始化彈幕的狀態。

// 文件:index.js
class CanvasBarrage {
    constructor(canvas, video, options = {}) {
        // 如果沒有傳入 canvas 或者 video 直接跳出
        if (!canvas || !video) return;
        this.canvas = canvas; // 當前的 canvas 元素
        this.video = video; // 當前的 video 元素

        // 設置 canvas 與 video 等高
        this.canvas.width = video.clientWidth;
        this.canvas.height = video.clientHeight;

        // 默認暫停播放,表示不渲染彈幕
        this.isPaused = true;

        // 沒傳參數的默認值
        let defaultOptions = {
            fontSize: 20,
            color: "gold",
            speed: 2,
            opacity: 0.3,
            data: []
        };

        // 對象的合并,將默認參數對象的屬性和傳入對象的屬性統一放到當前實例上
        Object.assign(this, defaultOptions, options);

        // 存放所有彈幕實例,Barrage 是創造每一條彈幕的實例的類
        this.barrages = this.data.map(item => new Barrage(item, this));

        // Canvas 畫布的內容
        this.context = canvas.getContext("2d");

        // 渲染所有的彈幕
        this.render();
    }
    render() {
        // 渲染整個彈幕
        // 第一次先進行清空操作,執行渲染彈幕,如果沒有暫停,繼續渲染
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        // 渲染彈幕
        this.renderBarrage();
        if (this.isPaused == false) {
            // 遞歸渲染
            requestAnimationFrame(this.render.bind(this));
        }
    }
    renderBarrage() {
        // 將數組的彈幕一個一個取出,判斷時間和視頻的時間是否符合,符合就執行渲染此彈幕
        let time = this.video.currentTime;
        this.barrages.forEach(barrage => {
            // 當視頻時間大于等于了彈幕設置的時間,那么開始渲染(時間都是以秒為單位)
            if (!barrage.flag && time >= barrage.time) {
                // 初始化彈幕的各個參數,只有在彈幕將要出現的時候再去初始化,節省性能,初始化后再進行繪制
                // 如果沒有初始化,先去初始化一下
                if (!barrage.isInited) {
                    // 初始化后下次再渲染就不需要再初始化了,所以創建一個標識 isInited
                    barrage.init();
                    barrage.isInited = true;
                }

                barrage.x -= barrage.speed;
                barrage.render(); // 渲染該條彈幕
                if (barrage.x < barrage.width * -1) {
                    barrage.flag = true; // 是否出去了,出去了,做停止渲染的操作
                }
            }
        });
    }
    add(item) {
        this.barrages.push(new Barrage(item, this));
    }

    // ********** 以下為新增代碼 **********
    reset() {
        // 先清空 Canvas 畫布
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
        let time = this.video.currentTime;
        // 循環每一條彈幕實例
        this.barrages.forEach(barrage => {
            // 更改已經移出屏幕的彈幕狀態
            barrage.flag = false;
            // 當拖動到的時間小于等于當前彈幕時間是,重新初始化彈幕的數據,實現渲染
            if (time <= barrage.time) {
                barrage.isInited = false;
            } else {
                barrage.flag = true; // 否則將彈幕的狀態設置為以移出屏幕
            }
        });
    }
    // ********** 以上為新增代碼 **********
}

其實 reset 方法中值做了幾件事:

清空 Canvas 畫布;

獲取當前進度條拖動位置的時間;

循環存儲彈幕實例的數組;

將所有彈幕更改為未移出屏幕;

判斷拖動時間和每條彈幕的時間;

在當前時間以后的彈幕重新初始化數據;

以前的彈幕更改為已移出屏幕。

從而實現了拖動進度條彈幕的 “前進” 和 “后退” 功能。


使用 WebSocket 和 Redis 實現前后端通信及數據存儲 1、服務器代碼的實現

要使用 WebSocket 和 Redis 首先需要去安裝 wsredis 依賴,在項目根目錄執行下面命令:

npm install ws redis

我們創建一個 server.js 文件,用來寫服務端的代碼:

// 文件:index.js
const WebSocket = require("ws"); // 引入 WebSocket
const redis = require("redis"); // 引入 redis

// 初始化 WebSocket 服務器,端口號為 3000
let wss = new WebSocket.Server({
    port: 3000
});

// 創建 redis 客戶端
let client = redis.createClient(); // key value

// 原生的 websocket 就兩個常用的方法 on("message")、on("send")
wss.on("connection", function(ws) {
    // 監聽連接
    // 連接上需要立即把 redis 數據庫的數據取出返回給前端
    client.lrange("barrages", 0, -1, function(err, applies) {
        // 由于 redis 的數據都是字符串,所以需要把數組中每一項轉成對象
        applies = applies.map(item => JSON.parse(item));

        // 使用 websocket 服務器將 redis 數據庫的數據發送給前端
        // 構建一個對象,加入 type 屬性告訴前端當前返回數據的行為,并將數據轉換成字符串
        ws.send(
            JSON.stringify({
                type: "INIT",
                data: applies
            })
        );
    });

    // 當服務器收到消息時,將數據存入 redis 數據庫
    ws.on("message", function(data) {
        // 向數據庫存儲時存的是字符串,存入并打印數據,用來判斷是否成功存入數據庫
        client.rpush("barrages", data, redis.print);

        // 再將當前這條數據返回給前端,同樣添加 type 字段告訴前端當前行為,并將數據轉換成字符串
        ws.send(
            JSON.stringify({
                type: "ADD",
                data: JSON.parse(data)
            })
        );
    });
});

服務器的邏輯很清晰,在 WebSocket 連接上時,立即獲取 Redis 數據庫的所有彈幕數據返回給前端,當前端點擊發送彈幕按鈕發送數據時,接收數據存入 Redis 數據庫中并打印驗證數據是否成功存入,再通過 WebSocket 服務把當前這一條數返回給前端,需要注意一下幾點:

從 Redis 數據庫中取出全部彈幕數據的數組內部都存儲的是字符串,需要使用 JSON.parse 方法進行解析;

將數據發送前端時,最外層要使用 JSON.stringify 重新轉換成字符串發送;

在初始化階段 WebSocket 發送所有數據和前端添加新彈幕 WebSocket 將彈幕的單條數據重新返回時,需要添加對應的 type 值告訴前端,當前的操作行為。

2、前端代碼的修改

在沒有實現后端代碼之前,前端使用的是 data 的假數據,是在添加彈幕事件中,將獲取的新增彈幕信息通過 CanvasBarrage 類的 add 方法直接創建 Barrage 類的實例,并加入到存放彈幕實例的 barrages 數組中。

現在我們需要更正一下交互邏輯,在發送彈幕事件觸發時,我們應該先將獲取的單條彈幕數據通過 WebSocket 發送給后端服務器,在服務器重新將消息返還給我們的時候,去將這條數據通過 CanvasBarrage 類的 add 方法加入到存放彈幕實例的 barrages 數組中。

還有在頁面初始化時,我們之前在創建 CanvasBarrage 類實例的時候直接傳入了 data 假數據,現在需要通過 WebSocket 的連接事件,在監聽到連接 WebSocket 服務時,去創建 CanvasBarrage 類的實例,并直接把服務端返回 Redis 數據庫真實的數據作為參數傳入,前端代碼修改如下:

// 文件:index.js
// ********** 下面代碼被刪掉了 **********
// let canvasBarrage = new CanvasBarrage(canvas, video, {
//     data
// });
// ********** 上面代碼被刪掉了 **********

// ********** 以下為新增代碼 **********
let canvasBarrage;

// 創建 WebSocket 連接
let socket = new WebSocket("ws://localhost:3000");

// 監聽連接事件
socket.onopen = function() {
    // 監聽消息
    socket.onmessage = function(e) {
        // 將收到的消息從字符串轉換成對象
        let message = JSON.parse(e.data);

        // 根據不同情況判斷是初始化還是發送彈幕
        if (message.type === "INIT") {
            // 創建 CanvasBarrage 的實例添加彈幕功能,傳入真實的數據
            canvasBarrage = new CanvasBarrage(canvas, video, {
                data: message.data
            });
        } else if (message.type === "ADD") {
            // 如果是添加彈幕直接將 WebSocket 返回的單條彈幕存入 barrages 中
            canvasBarrage.add(message.data);
        }
    };
};
// ********** 以上為新增代碼 **********

$("#add").addEventListener("click", function() {
    let time = video.currentTime; // 發送彈幕的時間
    let value = $("#text").value; // 發送彈幕的文字
    let color = $("#color").value; // 發送彈幕文字的顏色
    let fontSize = $("#range").value; // 發送彈幕的字體大小
    let sendObj = { time, value, color, fontSize }; //發送彈幕的參數集合

    // ********** 以下為新增代碼 **********
    socket.send(JSON.stringify(sendObj));
    // ********** 以上為新增代碼 **********

    // ********** 下面代碼被刪掉了 **********
    // canvasBarrage.add(sendObj); // 發送彈幕的方法
    // ********** 上面代碼被刪掉了 **********
});

現在我們可以打開 index.html 文件并啟動 server.js 服務器,就可以實現真實的視頻彈幕操作了,但是我們還是差了最后一步,當前的服務只能同時服務一個人,但真實的場景是同時看視頻的有很多人,而且發送的彈幕是共享的。

3、實現多端通信、彈幕共享

我們需要處理兩件事情:

第一件事情是實現多端通信共享數據庫信息;

第二件事情是當有人離開的時候清除關閉的 WebSocket 對象。

// 文件:server.js
const WebSocket = require("ws"); // 引入 WebSocket
const redis = require("redis"); // 引入 redis

// 初始化 WebSocket 服務器,端口號為 3000
let wss = new WebSocket.Server({
    port: 3000
});

// 創建 redis 客戶端
let client = redis.createClient(); // key value

// ********** 以下為新增代碼 **********
// 存儲所有 WebSocket 用戶
let clientsArr = [];
// ********** 以上為新增代碼 **********

// 原生的 websocket 就兩個常用的方法 on("message")、on("send")
wss.on("connection", function(ws) {
    // ********** 以下為新增代碼 **********
    // 將所有通過 WebSocket 連接的用戶存入數組中
    clientsArr.push(ws);
    // ********** 以上為新增代碼 **********

    // 監聽連接
    // 連接上需要立即把 redis 數據庫的數據取出返回給前端
    client.lrange("barrages", 0, -1, function(err, applies) {
        // 由于 redis 的數據都是字符串,所以需要把數組中每一項轉成對象
        applies = applies.map(item => JSON.parse(item));

        // 使用 websocket 服務器將 redis 數據庫的數據發送給前端
        // 構建一個對象,加入 type 屬性告訴前端當前返回數據的行為,并將數據轉換成字符串
        ws.send(
            JSON.stringify({
                type: "INIT",
                data: applies
            })
        );
    });

    // 當服務器收到消息時,將數據存入 redis 數據庫
    ws.on("message", function(data) {
        // 向數據庫存儲時存的是字符串,存入并打印數據,用來判斷是否成功存入數據庫
        client.rpush("barrages", data, redis.print);

        // ********** 以下為修改后的代碼 **********
        // 循環數組,將某一個人新發送的彈幕在存儲到 Redis 之后返回給所有用戶
        clientsArr.forEach(w => {
            // 再將當前這條數據返回給前端,同樣添加 type 字段告訴前端當前行為,并將數據轉換成字符串
            w.send(
                JSON.stringify({
                    type: "ADD",
                    data: JSON.parse(data)
                })
            );
        });
        // ********** 以上為修改后的代碼 **********
    });

    // ********** 以下為新增代碼 **********
    // 監聽關閉連接事件
    ws.on("close", function() {
        // 當某一個人關閉連接離開時,將這個人從當前存儲用戶的數組中移除
        clientsArr = clientsArr.filter(client => client != ws);
    });
    // ********** 以上為新增代碼 **********
});

上面就是 Canvas + WebSocket + Redis 視頻彈幕的實現,實現過程可能有些復雜,但整個過程寫的還是比較詳細,可能需要一定的耐心慢慢的讀完,并最好一步一步跟著寫一寫,希望這篇文章可以讓讀到的人解決視頻彈幕類似的需求,真正理解整個過程和開放封閉原則,認識到前端面向對象編程思想的美。


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://www.hztianpu.com/yun/98308.html

相關文章

  • Canvas + WebSocket + Redis 實現一個視頻彈幕

    摘要:創建彈幕功能的類及基本參數處理布局時需要注意的默認寬為,高為,我們要保證完全覆蓋整個視頻,需要讓與寬高相等。因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以畫布的寬高并沒有通過來設置,而是通過在類創建實例初始化屬性的時候動態設置。 showImg(https://segmentfault.com/img/remote/1460000018998386); 閱讀原文 頁面布...

    WelliJhon 評論0 收藏0
  • Canvas + WebSocket + Redis 實現一個視頻彈幕

    摘要:創建彈幕功能的類及基本參數處理布局時需要注意的默認寬為,高為,我們要保證完全覆蓋整個視頻,需要讓與寬高相等。因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以畫布的寬高并沒有通過來設置,而是通過在類創建實例初始化屬性的時候動態設置。 showImg(https://segmentfault.com/img/remote/1460000018998386); 閱讀原文 頁面布...

    gekylin 評論0 收藏0
  • 彈幕,是怎樣練成的?

    showImg(https://segmentfault.com/img/bVbk1Nl?w=1080&h=602); 說起彈幕看過視頻的都不會陌生,那滿屏充滿著飄逸評論的效果,讓人如癡如醉,無法自拔 最近也是因為在學習關于 canvas 的知識,所以今天就想和大家分享一個關于彈幕的故事 那么究竟彈幕是怎樣煉成的呢? 我們且往下看(look) 看什么?看效果 showImg(https://s...

    lwx12525 評論0 收藏0
  • 全棧開發——動手打造屬于自己的直播間(Vue+SpringBoot+Nginx)

    摘要:經過琢磨,其實是要考慮安全性的。具體在以下幾個方面跨域連接協議升級前握手攔截器消息信道攔截器對于跨域問題,我們可以通過方法來設置可連接的域名,防止跨站連接。 前言 大學的學習時光臨近尾聲,感嘆時光匆匆,三年一晃而過。同學們都忙著找工作,我也在這里拋一份簡歷吧,歡迎各位老板和獵手誠邀。我們進入正題。直播行業是當前火熱的行業,誰都想從中分得一杯羹,直播養活了一大批人,一個平臺主播粗略估計就...

    e10101 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
美女扒开尿口给男人桶 | ass亚洲肉体欣赏pics | 女女百合国产免费网站 | 大地二资源在线观看高清国语版 | 51国产偷自视频区视频 | ass亚洲肉体欣赏pics | 日本乳汁视频 | 天天亚洲 | 1024国产在线| 日韩av无码一区二区三区 | 韩国一区二区三区在线观看 | 中文字幕第4页 | ass亚洲肉体欣赏pics | 依人久久 | 性高潮视频在线观看 | 亚洲作爱视频 | 亚洲青青草 | 91亚洲精品在线观看 | 欧洲激情网 | 国产精品一级 | 欧洲精品一区二区三区 | 日韩av高清| 九一网站在线观看 | 欧美脚交 | 视频在线观看免费大片 | 国产福利在线观看 | 一级黄色大片 | 蜜桃91视频| 成人黄色一级 | 日韩精品一区二区三区免费视频 | 自拍偷拍第五页 | 青青草成人在线观看 | 日韩美女网 | 黄页网站在线播放 | 狠狠狠操 | 草莓视频免费在线观看 | 永久91嫩草亚洲精品人人 | 伊人网免费视频 | 原神女裸体看个够无遮挡 | 久久久久极品 | 国产成人a人亚洲精品无码 最近中文字幕av | 牛牛超碰 | 打屁股调教视频 | 中文字字幕在线中文乱码电影 | 91丨九色丨黑人外教 | 亚洲视频国产精品 | 午夜黄视频 | 色小说在线 | 不卡久久| 久久男人天堂 | 麻豆精品一区二区 | 人妻少妇偷人精品视频 | 色人阁视频| 国产精品第三页 | 成人做爰视频www | 卡一卡二卡三 | 欧美午夜精品一区二区 | 久久与婷婷 | 好吊操视频这里只有精品 | 好吊操视频这里只有精品 | 欧美第二页 | 久草色在线| 男人操女人的视频 | 久久av一区| 天天综合亚洲 | 双性人hdsexvideos | 免费在线观看黄色av | 美女靠逼app | 欧美午夜在线 | 成人免费在线播放 | 日本极品丰满ⅹxxxhd | 中文字幕亚洲乱码熟女1区2区 | 年代下乡啪啪h文 | 日本一级淫片色费放 | 日韩视频一区在线观看 | aaaa一级片 | 视频在线观看免费大片 | 国产传媒一区 | 野花视频免费在线观看 | 欧美大片高清免费观看 | 337p亚洲精品色噜噜狠狠 | 性欧美sm调教 | 日本黄色精品 | 人人澡人人看 | 麻豆av一区二区 | 日韩精品视频在线免费观看 | 久久综合狠狠综合久久综合88 | 久久精品国产亚洲AV无码男同 | 美女一区二区三区四区 | 日韩av一区在线 | 日本三级视频在线观看 | 麻豆视频在线观看 | 亚洲精品乱码久久久久 | 国产中文字幕一区 | 日本妈妈9| 波多野吉衣一二三区乱码 | 爱吃波客今天最新视频 | 91在线播放视频 | 国产午夜在线视频 | 久久99亚洲精品 | 久久成人一区 | 91免费大片 | 9999热| 在线高清观看免费 | 国产人妻精品一区二区三区不卡 | 黄色网址免费 | 青娱乐超碰在线 | 特黄色一级片 | 手机在线免费看av | 婷婷中文 | 亚洲深夜视频 | 欧美一级爱爱 | 可以免费看的av网站 | 黄色小说免费在线观看 | 久久国产精品免费视频 | 欧美第二页| 午夜精品一区二区三区在线视频 | 人妻少妇精品视频一区二区三区 | 极度诱惑香港电影完整 | 久久国产免费 | 国产成人中文字幕 | 精品伦精品一区二区三区视频密桃 | 人人澡人人看 | 色妞综合 | 久久在线看 | 性高潮久久久久久久 | 免费精品久久 | 一区二区免费在线观看 | 91精品视频在线播放 | 中国女人内谢69xxxx | 高清不卡毛片 | 综合久久久久久久 | 日韩一区二区三区四区五区六区 | 五月天久久久久久 | 精品国产乱码久久久久久郑州公司 | 日本亚洲在线 | 日本高清二区 | 超碰麻豆| 爱搞国产 | 国产第8页 | 亚洲午夜一区二区 | 在线观看三级电影 | 日本美女一区二区 | www.夜夜| 先锋成人资源 | 日韩一级片在线 | 一区二区免费在线观看 | 免费观看毛片视频 | 久草久热| 一级黄色免费 | 玉女心经在线看 | 巨粗高h双龙筋肉体育生 | 韩国三级hd中文字幕 | 女m被s玩胸虐乳哭着求饶 | 在线看片你懂得 | 精品国产一 | 1024国产在线 | 美女爆乳18禁www久久久久久 | 91亚洲国产成人精品一区 | 91亚洲精品在线观看 | 亚洲天堂av在线播放 | 免费三片在线观看网站v888 | 美国免费高清电影在线观看 | 国产18在线 | 五月精品 | 国产乱码一区 | 欧美成人激情在线 | 懂色av一区二区三区免费观看 | 久色网站 | 少妇高潮惨叫久久久久久 | 国产又爽又黄视频 | 碧蓝之海动漫在线观看免费高清 | 天天操天| 成人丁香婷婷 | 黄色三级生活片 | 天天插天天狠 | 成年人一级片 | 4438x在线观看| 日本免费中文字幕 | 特级毛片在线观看 | 四虎精品一区二区三区 | 欧美20p| 九九视屏 | 日韩精品免费一区二区夜夜嗨 | 午夜黄视频 | 欧美一卡二卡三卡 | 午夜激情免费视频 | 中文字幕丰满乱子伦无码专区 | 亚洲草逼视频 | 人人妻人人澡人人爽精品日本 | 日韩一区二区三区四区在线 | 亚洲综合久久久 | 色噜噜狠狠狠综合曰曰曰 | 欧美精品久久久久久 | 中文在线免费视频 | 综合久久久久久久 | 久草网址 | 久久国产精品偷 | 精品午夜福利视频 | 暖暖日本在线视频 | 日本中文字幕一区 | 超碰免费av | 久久精品波多野结衣 | av在线播放中文字幕 | 熟妇熟女乱妇乱女网站 | 天天拍夜夜操 | 91久久精品日日躁夜夜躁欧美 | 日韩午夜精品 | 高h言情| 中文字幕一区二区三区精华液 | 亚洲第一免费 | 黄色三级生活片 | 日本一区二区在线 | 久久精品噜噜噜成人 | av在线播放中文字幕 | 97超碰精品 | 99爱在线 | 天天躁日日躁aaaaxxxx | 亚洲精品中文字幕 | 欧美激情黑白配 | 爆操巨乳 | 另类日韩 | 色情毛片 | 亚洲专区在线播放 | 麻豆视频在线观看 | 日韩一页| 岛国av大片 | 亚洲欧美精品一区二区三区 | 亚洲h视频在线观看 | 天天爱天天做 | 成年女人免费视频 | 国产激情久久久久久熟女老人av | 草莓视频免费在线观看 | 亚洲国产成人精品女人久久久 | 黄色小说免费在线观看 | 91视频在线网站 | 懂色av一区二区三区免费观看 | 国产在线小视频 | 在线观看毛片网站 | 碧蓝之海动漫在线观看免费高清 | 国产第8页| 少妇全黄性生交片 | 丝袜 亚洲 另类 欧美 重口 | 国产精品v欧美精品v日韩 | 日韩五月天| 乱日视频 | 国产精品视频入口 | 最新国产露脸在线观看 | 亚洲国产一区在线观看 | www.亚洲国产 | 草莓视频app18在线视频 | 中文字幕一区二区三区人妻不卡 | 国产又粗又大又爽视频 | 国产精品tv | 手机在线观看毛片 | 亚洲青青草原 | 国产伦精品一区 | 欧美日韩性视频 | 色婷婷在线影院 | 色图一区| v天堂在线观看 | 最近中文字幕av | 中文字幕 自拍偷拍 | 黄色小说免费在线观看 | 国产欧美在线看 | 阿娇全套94张未删图久久 | 91久久国产综合久久91精品网站 | 91精品国产91久久久久久黑人 | 岛国av大片 | 草莓视频污视频 | 超碰免费av | 4hu最新网址 | 天天爱天天做 | 午夜激情免费视频 | 四虎影视免费永久大全 | 国产精品久久久久久亚洲色 | 欧美成人精品激情在线视频 | 神马午夜国产 | 青青草青青操 | 欧美色图狠狠干 | www.日韩在线观看 | 黄色国产视频 | 中文字幕一区二区人妻电影 | 国产精品自拍偷拍 | 一区二区av在线 | 中文字幕第18页 | 国产成人a v | 精品午夜福利视频 | 午夜国产片 | 丁香婷婷久久久综合精品国产 | 国产亚洲色婷婷久久99精品91 | 狠狠狠操 | 久久成年人视频 | 国产精品欧美在线 | 欧美大片高清免费观看 | 美女又爽又黄网站泳装 | 中文字幕一区二 | 黄色小说免费在线观看 | 五月开心网| 永久91嫩草亚洲精品人人 | 天天综合亚洲 | 国产黄色小说 | av电影免费在线播放 | 亚洲黄色av | 熟睡侵犯の奶水授乳在线 | 柠檬福利第一导航在线 | 蜜桃视频在线观看www | 丁香六月综合激情 | 亚洲九九 | 99re视频这里只有精品 | 超碰伊人 | 中文字幕亚洲区 | 国偷自产视频一区二区久 | 99激情| 影音先锋毛片 | 五月婷婷小说 | 日韩视频一区在线观看 | 91人人爽| 狠狠狠操 | 人妻一区二区在线 | 污网站视频 | 九九热九九| 日韩精品一区二区三区免费视频 | 成年人一级片 | 日本美女一区二区 | 成人av专区 | 欧美亚洲国产一区二区三区 | 美国免费高清电影在线观看 | 你懂得在线观看 | 国产又粗又大又硬 | 日韩2区| 婷婷中文 | 色愁久久 | 午夜黄色小视频 | 总裁憋尿呻吟双腿大开憋尿 | 超碰伊人 | 少妇扒开粉嫩小泬视频 | 老师让我她我爽了好久视频 | 欧美mv日韩mv国产网站app | 樱桃视频app看片 | 男人的天堂一区二区 | 国语对白一区 | 国产黄色高清视频 | 韩国一区二区在线观看 | 91热热| 国产伦精品一区 | 国产精品高清无码在线观看 | 亚洲最新网址 | 国产成人毛片 | 欧美脚交 | 午夜视频在线播放 | 天天干在线观看 | 精品一二三区 | 色妞综合| 久久久国产一区二区三区 | 国产97在线观看 | 亚洲特级毛片 | 成年人性生活视频 | 自拍第一页 | 免费看黄色a级片 | 欧美午夜精品一区二区 | 中文字幕一二三 | 精品人妻无码中文字幕18禁 | 中日韩中文字幕 | 国产精品女优 | 操干视频 | 成人动漫网站在线观看 | 91久久精品日日躁夜夜躁欧美 | 欧美一级网 | 国产日韩欧美中文字幕 | 国产乱码一区 | 天堂影视在线观看 | 黄色激情av | 青青青草视频在线观看 | 潘金莲一级淫片免费放动漫 | 色悠悠视频 | 日韩午夜一区 | 午夜视频在线播放 | 亚洲综合色视频 | 亚洲色图自拍 | 亚洲日本va在线观看 | 亚洲手机在线观看 | 夜夜草导航 | 91精品国产91久久久久久黑人 | 国产视频黄 | 91免费大片 | 女人洗澡一级特黄毛片 | 神马久久精品 | 国产传媒一区 | 天堂av在线资源 | 污污网站在线免费观看 | 柠檬福利第一导航在线 | 亚洲成年人 | 亚洲精品第一页 | 依人在线 | 91手机在线| 不卡av在线 | 日本三级视频在线观看 | 天天狠狠操| 欧美亚洲在线视频 | 美女一级黄色片 | 男人天堂中文字幕 | av在线播放中文字幕 | 成年人视频免费在线观看 | 猫咪av在线 | 91久久国产综合久久91精品网站 | 亚洲成年人影院 | 免费一级毛片麻豆精品 | 国产一区免费视频 | 337p亚洲精品色噜噜狠狠 | 能免费看av的网站 | 久久av在线| 阿娇全套94张未删图久久 | 少妇高潮惨叫久久久久久 | 熟女人妻aⅴ一区二区三区60路 | 欧美毛片基地 | 欧洲天堂网 | 久青草视频在线观看 | 国产精品久久国产精麻豆96堂 | 久久大香 | 亚洲第一免费 | 欧美视频久久久 | 天天操天天操天天操 | 日韩和欧美的一区二区 | 成人久久视频 | 黄色片www | 色图一区 | 九九九九精品九九九九 | 成年人免费视频观看 | 香港黄色网 | 天天干天天干天天干 | 青青草成人av | 国产午夜电影 | 青春草视频 | 蜜桃av噜噜一区二区三区麻豆 | 黄漫app| 一区二区免费 | 可以看的毛片 | 国产成人在线免费观看视频 | 娇小的粉嫩xxx极品 天天射天天射 | 亚洲人天堂 | 青娱乐超碰在线 | 亚洲黄色片 | 国产成人在线观看免费网站 | 国产乱乱 | 专干老肥女人88av | av在线播放中文字幕 | 自拍偷拍国产精品 | 美女爆乳18禁www久久久久久 | 久久久91 | 人人妻人人澡人人爽精品日本 | 欧美黄色片免费看 | 张柏芝亚洲一区二区三区 | 美女一区| 婷婷免费 | xxx免费视频 | 欧洲成人免费视频 | 久操视频免费观看 | 91视频在线网站 | 一级免费观看 | 精品九九九九 | 另类日韩| 黄色片网站在线观看 | 91久久久久久 | 国产白丝在线观看 | 修仙淫交(高h)h文 | 欧美精品 在线观看 | 日本亚洲色大成网站www久久 | 天天干天天干天天干 | 草久影院| 国产a国产 | 超碰在线国产 | 波多在线观看 | 中文字幕一区二区三区精华液 | 精品美女一区二区三区 | 国产麻豆精品久久一二三 | 韩国无码一区二区三区精品 | 欧美夜夜| 丁香花电影免费播放电影 | 日本三级视频在线观看 | 无码人妻久久一区二区三区 | 91手机在线| 你懂得在线观看 | 欧美日韩中文字幕一区二区 | 黄色片网站在线观看 | 久久99亚洲精品 | 国产日韩在线视频 | 麻豆视频在线观看 | 日韩黄色免费观看 | 欧美有码在线 | 日本一级淫片色费放 | 欧美第二页| 午夜久久久久久久久久 | 黄色免费看片网站 | 91成人免费视频 | 久久久久噜噜噜亚洲熟女综合 | 在线观看网页视频 | 五月天狠狠干 | 伊人99热 | 午夜寂寞院 | 五月婷婷久久久 | 麻豆视频在线观看 | 日日骚影院 | 永久91嫩草亚洲精品人人 | 国产呦小j女精品视频 | 久久在线看 | 西西44rtwww国产精品 | 91成人免费看 | 欧美亚洲国产日韩 | 国产精品久久久久久吹潮 | 欧美高清一区 | 中文字幕女同女同女同 | 韩国一区二区三区在线观看 | 一级黄色短视频 | 久久久观看| 国产又粗又大又爽视频 | 国产成人毛片 | 完美搭档在线观看 | 黄色片链接 | av蜜臀网站| 3p在线观看 | 二区三区视频 | 日韩在线观看视频网站 | 久久这里有 | 欧美精品亚洲精品 | 超大量吹潮系列合集 | 亚洲精品色午夜无码专区日韩 | 草比网站| 天堂av在线资源 | 99热免费 | 亚洲熟妇色自偷自拍另类 | 伊人久久久久久久久久 | 农村老妇性真猛 | 中文字幕不卡在线观看 | 午夜在线观看影院 | 97在线看 | 暖暖日本在线视频 | 欧美影院一区 | 亚洲一区二区精品在线 | 久久成人一区 | 黄色精品在线观看 | 美女视频在线播放 | 日韩在线观看视频网站 | 91精品人妻一区二区三区 | 久久久久草 | 免费成人av在线 | 国产三级在线观看视频 | 欧美在线免费观看视频 | 在线观看国产精品入口男同 | 成人看片泡妞 | 福利在线观看 | 国产一区二区中文字幕 | 秘密基地动漫在线观看免费 | 猫咪av在线 | 综合久久久久久久 | 国产成人中文字幕 | 成人午夜淫片免费观看 | 日韩av无码一区二区三区 | 精品影院| 女人洗澡一级特黄毛片 | 91黄色大片 | 国产午夜精品久久久 | 日韩欧美国产高清 | 五月天av在线 | 欧美精品成人在线 | 99久久99久久精品国产片果冻 | 国产黄色高清视频 | 性视频播放免费视频 | 欧美老熟妇xb水多毛多 | 都市激情 亚洲 | 神马久久久久久久久 | 中文字幕一区二区三区5566 | 精品资源成人 | 秋霞午夜 | 亚洲一区二区三区免费视频 | 99资源在线 | 人人草在线| 超碰人人干 | 日韩有色 | 玩弄人妻少妇500系列 | 色小说在线 | 精品无码免费视频 | 国产一区二区在线免费 | 香蕉视频免费看 | 中文字幕亚洲精品 | 青青91| 欧美丝袜丝交足nylons | 在线观看www. | 久久国产精品免费视频 | 亚洲最新中文字幕 | 欧美mv日韩mv国产网站app | 精品无码久久久久 | 亚洲日本中文 | 91色国产 | 精品国产乱码久久久久久郑州公司 | 国产亚洲精品女人久久久久久 | 美女视频网址 | 欧美日韩中文字幕一区二区 | 国产精品久久久一区 | 久久久久久av无码免费网站 | 午夜黄色小视频 | 韩国三级与黑人 | 免费看一级大片 | 九九视频在线免费观看 | 4hu最新网址 | 日本一区二区视频在线 | av在线免费电影 | 成年人视频网站 | 五月婷婷开心中文字幕 | 91精品国产成人观看 | 高清日韩 | 在线无限看免费粉色视频 | 精品国内自产拍在线观看视频 | 在线播放第一页 | 国产精品自拍一区 | 午夜a级片 | 国产无套精品一区二区三区 | 午夜在线观看影院 | 中文字幕第18页 | 2019中文字幕在线观看 | 欧美交换国产一区内射 | 丰满熟妇乱又伦 | 永久免费视频网站直接看 | 免费特级毛片 | 污视频网站在线看 | 中文字字幕在线中文乱码电影 | 男人插入女人阴道视频 | 日韩视频一区 | 最新国产露脸在线观看 | 欧美香蕉在线 | 男人天堂一区 | 三级av在线 | 99爱在线视频 | 欧美熟妇精品一区二区蜜桃视频 | 日本少妇xxxxx| 亚洲图色av | 免费成人av片 | 欧美日韩在线观看一区二区 | 黄污网 | 欧日韩一区二区三区 | 欧美色图狠狠干 | 免费看一级大片 | 神马久久久久久久久 | 91精品视频在线播放 | 很黄很污的网站 | 久久与婷婷 | 日韩中文字幕不卡 | 久久黄色大片 | 综合网天天 | 久久tv| 国产黄色高清视频 | 欧美大片免费 | 午夜精品一区二区三区在线视频 | 五月开心婷婷 | 在线色av | 久久久久极品 | 99资源在线 | 修仙淫交(高h)h文 | 久章草影院| 91久久国产综合久久91精品网站 | 三级黄在线观看 | 玉女心经在线看 | 91成人在线免费视频 | 亚洲一级影院 | www.伊人网| h片在线免费看 | 久久久久久少妇 | 91精品国产91久久久久久黑人 | 国产一区二区av | 高清不卡毛片 | 亚洲图片欧美 | 一区二区三区欧美视频 | 91快射 | 精品伦精品一区二区三区视频密桃 | 91久久久久久久久久久 | 久久噜 | 亚洲精品白浆高清久久久久久 | 色视屏| 久久久久久国产精品 | 欧美在线亚洲 | 久久影片 | 国产熟女高潮一区二区三区 | 午夜免费播放观看在线视频 | 中文字幕最新 | 夜夜骑天天操 | 丁香网站 | 能免费看av的网站 | 国产麻豆传媒 | 国产亚洲一区二区三区在线观看 | 火影忍者羞羞漫画 | 日本黄色精品 | 久久免费看少妇高潮 | 久久黄色大片 | 亚洲国产精品无码久久久久高潮 | 性视频免费 | 国产乱码一区 | 中文字幕第12页 | 免费av播放| 国产做爰免费视频观看 | 91狠狠| 不卡久久 | 亚洲最新中文字幕 | 国产精品自拍偷拍 | 后宫秀女调教(高h,np) | 精品无码久久久久 | 色屋在线 | 少妇无码一区二区三区 | 看片网站在线观看 | 九九视频在线播放 | 色蝌蚪 | 韩国一区二区三区在线观看 | 最好看的2019免费观看 | 日韩精品一区二区三区免费视频 | 91亚洲欧美 | 人妻少妇偷人精品视频 | www色日本| aaaaa黄色片 日韩电影院 | 动漫3d精品一区二区三区乱码 | 国产精品白丝喷水在线观看 | 97精产国品一二三产区 | 青青91| 久青草视频在线观看 | 四虎精品一区二区三区 | 18免费网站 | 熟妇高潮一区二区三区 | 老鸭资源 | 日韩精品无码一区二区三区久久久 | 奇米影视av| 欧美色妞网 | 国产亚洲一区二区三区在线观看 | 欧美伦乱 | 97超碰精品 | 色av影院 | heyzo在线播放 | 亚洲综合色视频 | 九九综合网 | 在线无限看免费粉色视频 | 日韩啊啊啊 | 先锋成人资源 | 噜噜噜久久 | 欧亚一区二区 | 欧美成人三区 | 成人黄色免费电影 | 日本福利在线观看 | 97精品| 欧美在线亚洲 | 最近中文字幕av | 老司机午夜电影 | 男女日批视频 | 欧美一级少妇 | 精产国产伦理一二三区 | 自拍第一页 | 狠狠狠操 | 日本乳汁视频 | 欧美一区二区三区不卡 | 狠狠干2023 | 国产成人高清在线 | 中国极品少妇xxxx做受 | 丁香网站 | 日韩三级黄色 | 免费久久视频 | 色哟哟精品 | 久久亚洲电影 | 双性人hdsexvideos | 做爰视频| 黄污视频在线观看 | 亚洲特级毛片 | 男男黄网站| 黄色小说免费在线观看 | 二区三区视频 | 欧美交换国产一区内射 | 韩国一区二区三区在线观看 | 99婷婷| 超碰人人超碰 | 成人国产网站 | 国产成人精品片 | 欧美日韩影院 | 亚洲一区二区三区免费视频 | 亚洲综合一区二区三区 | 狠狠网站 | 超碰在线影院 | 精品九九九九 | 免费av网站观看 | 国产亚洲色婷婷久久99精品91 | 丁香婷婷久久久综合精品国产 | 在线无限看免费粉色视频 | 亚洲精品二 | www.久久 | 91老肥熟 | 色婷婷综合久久久中文字幕 | 捆绑无遮挡打光屁股 | 成人污视频在线观看 | 爆操巨乳 | 波多野结衣一区二区三区在线观看 | 五月天av在线 | 亚洲天天干 | 成人污视频在线观看 | 中文字幕自拍偷拍 | 亚洲第一男人天堂 | 99在线视频播放 | 自拍偷拍专区 | 日韩av一二三| 成人在线一区二区三区 | 伊人久久久久久久久久 | 草莓视频免费在线观看 | 国产成人中文字幕 | 午夜aaa片一区二区专区 | 亚洲国产精品无码久久久久高潮 | 欧美伦乱 | 一级做a视频 | 深夜成人福利视频 | 欧美成人免费在线视频 | 成年网站在线视频网站 | 女同vk | 日韩美女网 | 国产无遮挡裸体免费视频 | 欧美性猛交xxxx黑人猛交 | 99在线视频播放 | 精品一二三区 | 篠田优在线 | 欧美性视屏 | 成人免费毛片果冻 | 先锋成人资源 | 日本高清三区 | 黄网在线免费观看 | 97在线视频免费 | 国产精选在线观看 | 国产午夜精品理论片 | 玖玖国产 | 成年人视频免费在线观看 | 欧美日韩国产高清 | 色婷婷综合久久久中文字幕 | 秋霞av鲁丝片一区二区 | 欧美爱爱网站 | 日本国产一区二区三区 | 天天干天天干天天干 | 神马久久久久久久久 | 日日夜夜精 | 少妇高潮惨叫久久久久久 | 午夜不卡av免费 | 在线观看www.| 狂野欧美 | 天天干天天干天天干 | 国产三级在线观看视频 | 久操视频免费观看 | 久久久在线| 黄色三级生活片 | 神马影院午夜伦理 | 大地资源二中文在线影视观看 | 国产无遮挡裸体免费视频 | 成年人毛片 | 韩国无码一区二区三区精品 | 日韩五码| 男人都懂的网站 | 女人免费视频 | 在线不卡中文字幕 | 蜜桃精品视频在线 | 少妇被躁爽到高潮无码人狍大战 | 修仙淫交(高h)h文 | 性高潮久久久久久久 | 91短视全免费 | 久久ww | 欧洲成人免费视频 | 亚洲综合中文字幕在线 | 成人啪啪漫画羞羞漫画 | 亚洲三级免费 | 国产超级av | 无码人妻久久一区二区三区 | 午夜院线 | 国产精品女优 | 打屁股调教视频 | 91成人在线观看喷潮动漫 | 奇米影视在线播放 | 日韩欧美一级 | 偷偷操网站 | 青青青国产在线 | 日韩jizz | 无码人妻精品一区二区三区蜜桃91 | 亚洲天堂午夜 | 美女爱爱视频 | 日韩少妇 | 成人免费毛片果冻 | 91成人免费视频 | 人人澡人人看 | 中日韩男男gay无套 中文字幕8 | 日韩午夜精品 | 麻豆视频在线观看 | 特级av片 | 激情综合激情五月 | 中文字幕不卡在线观看 | 伊人色网 | 久久av在线| 欧美性生活一区二区 | 小早川怜子一区二区三区 | 国精品一区 | 黄色小说免费在线观看 | 超大量吹潮系列合集 | 超碰伊人| 九九热视频在线播放 | 亚洲综合中文字幕在线 | 午夜久久久久久久久久 | 玖玖国产 | 日韩精品五区 | 亚洲欧美日韩综合在线 | 日本在线三级 | 精品人妻午夜一区二区三区四区 | 色欲av无码一区二区三区 | 一区二区三区黄 | 午夜免费播放观看在线视频 | 免费看日韩毛片 | 日日拍拍| 不卡久久 | 人人综合| 国产日韩在线视频 | 成人福利在线 | 国产第8页 | 日本成人网址 | 欧美 日韩 综合 | 欧美成人小视频 | 婷婷五月综合久久中文字幕 | 国产精品xxx在线观看 | 91久久久久国产一区二区 | 日韩高清不卡 | 操大爷影院 | 久久作爱视频 | 美女扒开尿口给男人桶 | 日本高清视频在线 | 欧美69久成人做爰视频 | 日韩jizz | 欧美成人不卡 | 成人啪啪漫画羞羞漫画 | 灌篮高手全国大赛电影 | 五月天av在线 | 国产精品高清无码在线观看 | 天天射天天射 | 婷婷久久久久久 | 欧美日韩h| 91视频在线网站 | 亚洲视频二| 亚洲天天干| 午夜精品亚洲 | 3级黄色片| 善良的女朋友在线观看 | 日韩精品一区二区三区免费视频 | 亚洲涩综合 | 亚洲av无码乱码国产精品久久 | 色婷婷av一区二区三区之红樱桃 | 大陆熟妇丰满多毛xxxⅹ | 大地资源二中文在线影视观看 | 成人影片在线播放 | 奇米色777| 黄色三级生活片 | 国产高清av在线 | 成年人免费网站在线观看 | 操操干干 | 色噜噜在线观看 | 午夜av网站 | 中文字幕8| 精品久久免费 | 欧美一卡二卡三卡 | 狠狠干2023| 超碰人人超碰 | 狠狠操天天操 | 美女娇喘 | 亚洲天堂av在线播放 | 337p日本欧洲亚洲大胆张筱雨 | 在线97 | 成人在线激情视频 | 二十四小时在线更新观看 | 草莓视频app18在线视频 | 欧美性猛交xxxx乱大交退制版 | 男人操女人网站 | 欧美色图狠狠干 | 国产在线看片 | 一级全黄裸体片 | 男女瑟瑟网站 | 野花视频免费在线观看 | 一级黄色免费 | 狠狠干2023| 在线观看毛片网站 | 欧美尻逼 | 欧美亚洲中文精品字幕 | 亚洲三级精品 | 欧洲一区二区在线 | 国产白丝在线观看 | 9色在线| 性视频播放免费视频 | 国产日b视频 | 久久综合狠狠综合久久综合88 | 激情小说在线 | 国产青青青 | 超碰在线国产 | 99爱在线视频 | 久久久888| 亚洲一区二区精品在线 | 免费三片在线观看网站v888 | 性视频播放免费视频 | 成人精品三级av在线看 | 久久不卡影院 | 好大好舒服视频 | 夜夜视频 | 青青草青青操 | 日韩精品第二页 | 日本精品视频在线播放 | 成人污视频在线观看 | 色婷婷社区| 华丽的外出在线 | 日韩免费 | 一区二区三区日韩欧美 | 岛国av大片 | 欧美成人激情在线 | 国产无遮挡裸体免费视频 | 美女扒开双腿 | 污污网站在线免费观看 | 国产亚洲激情 | 亚洲熟妇色自偷自拍另类 | 欧美熟妇精品一区二区蜜桃视频 | 一级片手机在线观看 | 秘密基地动漫在线观看免费 | 亚洲综合久久久 | 午夜免费播放观看在线视频 | 亚洲成人精品久久 | 北京富婆泄欲对白 | 色图一区 | 青青草狠狠干 | 最好看的2019免费观看 | 一级免费黄色片 | 欧美国产日韩一区二区 | 日韩久久一区二区 | 一区二区av在线 | www.夜夜| 韩国三级hd中文字幕 | 中国挤奶哺乳午夜片 | 国产尻逼视频 | 日韩av无码一区二区三区 | 九九九九精品九九九九 | 午夜视频在线播放 | 第一福利丝瓜av导航 | 69精品无码成人久久久久久 | 成人福利在线 | 色婷婷社区 | 国产18在线| 日韩欧美国产高清 | a级小视频| 国产免费久久 | 日日骚影院 | 亚洲成人精品久久 | 秋霞一区 | 99爱在线 | 成人91视频 | 超碰狠狠操 | 自拍偷拍第五页 | 黄黄的网站 | 99视频免费看 | 欧美zzoo | 免费特级毛片 | 一级免费黄色片 | 一本不卡 | 99re国产 | 日日夜夜影院 | 色吧av色av | 亚洲精品白浆高清久久久久久 | 蜜桃精品视频在线 | 北京富婆泄欲对白 | 成人羞羞国产免费 | 青青草国产成人99久久 | 国产精品v欧美精品v日韩 | 明日叶三叶 | 黄色三级生活片 | 好吊操视频这里只有精品 | 日本天堂网在线观看 | 免费网站观看www在线观 | www.亚洲国产 | 亚洲精品二| 中文字幕不卡在线观看 | av影视网| 蜜乳av红桃嫩久久 | 欧美a∨| 亚洲精品白浆高清久久久久久 | 美女扒开尿口给男人桶 | 久草高清视频 | 插插影视 | 成人羞羞国产免费 | 久久国产精品偷 | 日一日射一射 | 火影忍者羞羞漫画 | 精品国内自产拍在线观看视频 | 在线观看国产欧美 | 亚洲手机在线观看 | xxx在线视频 | 午夜视频在线免费 | 欧美一区二区三区成人精品 | 国产福利影院 | 欧美 日韩 精品 | 日日夜夜精 | 国产精品探花视频 | 日本国产一区二区三区 | 人妻少妇精品视频一区二区三区 | 97超碰精品| 日本亚洲色大成网站www久久 | 超碰三级 | 免费麻豆视频 | 久久亚洲精品小早川怜子 | 白又丰满大屁股bbbbb | 午夜精品久久久久久久久久 | 中文字幕不卡在线观看 | 女m被s玩胸虐乳哭着求饶 | 美国免费高清电影在线观看 | 日本美女一区二区 | 波多野结衣中文字幕在线 | 欧美又粗又大aaa片 亚洲欧洲视频 | 国产卡一卡二 | 亚洲精品一二三 | 国产在线小视频 | 成人免费在线播放 | 国产成人在线免费观看视频 | 亚洲综合中文字幕在线 | 人人草人人射 | 和黑帮大佬的365 | 又粗又大又深又硬又爽 | 沟厕沟厕近拍高清视频 | 特级av片| 九九九九精品九九九九 | 高清不卡毛片 | 午夜免费小视频 | 日本极品丰满ⅹxxxhd | 亚洲三级免费 | 黄色三级生活片 | 国产精品天天狠天天看 | 波多野结衣av无码 | 久久精品噜噜噜成人 | 女人做爰全过程免费观看美女 | 色婷婷av一区二区三区之红樱桃 | 国产精品入口麻豆 | 色婷婷av一区二区三区之红樱桃 | 日韩videos| 亚洲激情成人 | 玉女心经在线看 | 伊人影院av | 国产在线精品一区二区 | 欧美激情自拍偷拍 | 亚洲精品二 | 日韩啊啊啊 | 白又丰满大屁股bbbbb | 午夜不卡av免费 | 日日夜操 | 善良的女朋友在线观看 | 青青青青操| 99热网址| 国产无遮挡裸体免费视频 | 五月婷婷,六月丁香 | 国产成人精品无码片区在线 | 国产精品伊人 | 潘金莲一级淫片免费放动漫 | 日本一区二区在线 | 狠狠干.com | 自拍亚洲欧美 | 人人妻人人澡人人爽精品日本 | 精品伦精品一区二区三区视频密桃 | aa亚洲| 欧美高清hd18日本 | 草莓视频污视频 | 男人天堂中文字幕 | 人妖一区| 欧美在线中文字幕 | 日本黄色大片免费 | 和黑帮大佬的365 | 污视频网站免费看 | 女人免费视频 | 四虎影库在线播放 | 午夜色福利 | 国产精品白丝喷水在线观看 | 中文av在线播放 | 久久久久免费观看 | 久久精品爱 | gogogo日本免费观看电视 | 国内精品久久久久久 | 婷婷五月综合久久中文字幕 | 国产日b视频 | 91精品网| 色视屏| 俄罗斯特级毛片 | 久久国产亚洲 | 可以看的毛片 | 久久免费在线视频 | 欧美日韩国产高清 | 日本一级一片免费视频 | 樱桃av | 精品少妇theporn | 91久久精品一区二区 | 免费看黄色a级片 | 操操干干 | 美女视频在线播放 | 国产精品v欧美精品v日韩 | 91久久久久久久久久久 | 波多野结衣av无码 | 丁香网站 | 国产人成视频在线观看 | 亚洲一区二区精品在线 | 97在线播放 | 日韩高清一区 | 欧美一级色片 | 伊人影院av | 国产色播 | 精品少妇theporn| 黄漫在线免费观看 | 四虎成人精品永久免费av九九 | 天天插天天狠 | a级片免费在线观看 | 午夜免费在线 | 美国免费高清电影在线观看 | 成年网站在线视频网站 | 色蝌蚪| 超碰97人人爱 | 久久久久久av无码免费网站 | 性欧美sm调教 | 国产午夜在线视频 | 国产高清免费在线播放 | 欧美日韩精品久久久 | 国产成人在线观看免费网站 | 美女一区二区三区四区 | 四虎影视永久免费观看 | 丝袜 亚洲 另类 欧美 重口 | 中文字幕视频在线观看 | 免费黄色网址大全 | 成人免费毛片男人用品 | 草莓视频免费在线观看 | 欧美一卡二卡三卡 | 久久国产精品偷 | 夜夜草导航| 中文字幕一区二区三区精华液 | 午夜视频免费看 | 米奇影视777 | 男人操女人的视频 | 国产白丝在线观看 | 校园春色综合网 | 污视频网站免费看 | 亚洲午夜精品一区二区三区 | 一二三区视频 | 日本精品视频在线播放 | 337p亚洲精品色噜噜狠狠 | 午夜国产精品视频 | 国产精品999 | 黄视频在线播放 | 欧美精品一线 | 中文字幕一区二区三区人妻不卡 | 黑人爱爱视频 | 国产精品偷拍 | 韩国一区二区在线观看 | 无码人妻精品一区二区三区蜜桃91 | 成人av图片 | 欧美日韩h | 九九综合久久 | 国产精品xxx在线观看 | 秋霞一区 | 日韩经典一区二区 | 91好色先生| 国产日批视频 | 娇小的粉嫩xxx极品 天天射天天射 | 免费在线国产视频 | 五月开心婷婷 | 日本三级视频在线观看 | 男人天堂一区 | 国产一区二区在线看 | 日本久色 | 成年人精品 | 五月婷婷开心中文字幕 | av综合在线观看 | 一区二区三区欧美视频 | 女人做爰全过程免费观看美女 | 国产精品偷拍 | av正在播放| 精品伦精品一区二区三区视频密桃 | 欧美色激情 | 黄网在线免费观看 | 日韩三级黄色 | 国产三级在线观看视频 | 久久久国产一区二区三区 | 91手机在线 | 久久免费看少妇高潮 | 天天干天天草天天射 | 亚洲色成人www永久网站 | 日韩欧美大片在线观看 | 久久久久久少妇 | 人人妻人人澡人人爽精品日本 | 精品人妻午夜一区二区三区四区 | www.久久| 亚洲综合中文字幕在线 | 国产精品v欧美精品v日韩 | 大地二资源在线观看高清国语版 | 午夜精品电影 | 福利视频免费 | 善良的女朋友在线观看 | 天天干视频在线观看 | 碧蓝之海动漫在线观看免费高清 | 日本天堂网在线观看 | 色悠悠视频 | 亚洲欧美精品一区二区三区 | 日韩三级黄色 | 天天干天天草天天射 | 精久久久久 | 久久色婷婷 | 男女日批视频 | 中文字幕观看 | 欧美日韩在线观看一区二区 | 日韩五码 | 少妇扒开粉嫩小泬视频 | 免费av播放 | 97看片吧 | www.欧美在线| 男人插入女人阴道视频 | 青青视频在线免费观看 | 欧美国产日韩一区二区 | 1769在线视频| 国产又粗又猛视频免费 | 天天干在线观看 | 大地资源二中文在线影视观看 | 女人洗澡一级特黄毛片 | 在线观看www. | 欧洲激情网 | 日本欧美激情 | 视频在线观看免费大片 | 久久久久9999 | 一本一道久久a久久精品蜜桃 | 看全色黄大色黄女片18 | 一本一道久久a久久精品蜜桃 | 五月婷婷六月色 | 综合色视频 | 久草99 | av中文网站| 91桃色在线观看 | 一区二区在线免费观看视频 | 四虎影视库 | 欧洲成人av| 污视频网站免费看 | 中国男女全黄大片 | 又粗又大又深又硬又爽 | 国产黄色a | 午夜国产精品视频 | 欧美日韩在线观看一区二区 | 女人洗澡一级特黄毛片 | 四虎成人精品永久免费av九九 | 欧美一区二区三区不卡 | 欧美脚交| 亚洲免费观看高清 | 不良视频在线观看 | 日韩精品一区在线观看 | 国产超级av | 爆操白丝美女 | 老司机午夜电影 | 欧美在线亚洲 | 樱桃视频app看片 | 国产美女视频免费观看下载软件 | 视频一区在线播放 | 国产呦小j女精品视频 | 免费a视频在线观看 | 91久久国产综合久久91精品网站 | 日韩精品在线视频观看 | 复古经典毛茸茸xxxxxxxx | 深夜成人福利视频 | 性欧美sm调教 | 欧美高清hd18日本 | av综合在线观看 | 在线无限看免费粉色视频 | 四虎福利| 中文在线www | 久久久久久亚洲av无码专区 | 天天综合亚洲 | 嫩草在线| av蜜臀网站 | 在线观看免费黄色 | 麻豆成人免费 | 日本少妇xxxxx | 草草免费视频 | 亚洲免费福利视频 | 欧美mv日韩mv国产网站app | 91快射| 中国精品毛片 | 九九热视频在线播放 | 九一网站在线观看 | 色欲av无码一区二区三区 | 国内视频精品 | 久草色在线 | 男女福利视频 | 日日骚影院 | v天堂在线观看 | 精品少妇theporn | 国产成人高清在线 | 污污视频免费观看 | 传媒av在线 | 草莓视频污视频 | 色天堂视频 | 少妇高潮惨叫久久久久久 | 中文字幕观看视频 | 欧美性猛交xxxx乱大交俱乐部 | h片在线免费看 | 淫欲的美女理论电影完整版 | 日韩欧美一级片 | 大地资源二中文在线影视观看 | 日日夜夜影院 | www男人天堂 | 欧美午夜精品一区二区 | 91久久久久久久久久久 | 欧美xxxx18国产 | 男人天堂中文字幕 | 午夜肉体高潮免费毛片 | 好吊操视频这里只有精品 | 可以看的毛片 | 91成人免费视频 | 色婷婷av一区二区三区之红樱桃 | 97看片吧 | 玖玖国产| 超碰97人人草 | 免费一级片视频 | 精品少妇theporn | 色久视频 | 国产一极片 | 美女扒开尿口给男人桶 | 日本一级一片免费视频 | 久久99视频 | 欧美日韩中文字幕一区二区 | 精品人妻无码中文字幕18禁 | 波多野结衣人妻 | 精品久久二区 | 欧美尻逼 | 少妇扒开粉嫩小泬视频 | 国产片一区二区三区 | 日本在线视频中文字幕 | 一区二区在线免费观看视频 | 国产h视频在线观看 | 成人91视频 | 日本特黄一级 | 久久久久久一区二区三区 | 国产一区二区在线看 | 欧美做受xxxxxⅹ性视频 | 美女xx网站| 日韩美女网 | 三级av在线 | 性高潮久久久久久久 | 日韩av一二三 | 爱操视频| 青青青草视频在线 | av片在线观看免费 | 五月天狠狠操 | 亚洲成成品网站 | 99热这里只有精品在线观看 | 亚洲精品乱码久久久久 | 亚洲精品国产精品乱码不99按摩 | 亚洲精品一二三 | 在线观看毛片网站 | 女同vk| 久久影片| 日本欧美激情 | 欧美人妻日韩精品 | 黄视频在线播放 | 熟女一区二区三区四区 | 国产传媒一区 | 欧美毛片基地 | 欧美在线免费观看视频 | 中文字幕在线免费看 | 欧美高清免费 | 精品人妻无码中文字幕18禁 | 夜色资源网 | 伊人99热| 国产午夜精品理论片 | 911精品国产一区二区在线 | 日韩精品久久久久久久 | 女女les互磨高潮国产精品 | 免费在线观看黄色av | 亚洲天堂第一页 | 久久久久免费观看 | 日本精品在线播放 | 色噜噜在线观看 | 美国免费高清电影在线观看 | 麻豆影音先锋 | 中文久久精品 | 亚洲国产成人精品女人久久久 | 亚洲黄色在线观看 | 人妻精品久久久久中文 | 欧美又粗又深又猛又爽啪啪九色 | 欧美一级网 | 久久与婷婷 | 免费三片在线观看网站v888 | 国产精品天天干 | 中文字幕一区二 | 星铁乱淫h侵犯h文 | 日韩啊啊啊 | 五月婷婷中文 | 潘金莲一级淫片免费放动漫 | 亚洲免费三级 | 免费三片在线观看网站v888 | 人人澡人人看 | 柠檬福利第一导航在线 | 国精品一区 | 看全色黄大色黄女片18 | 久久久久免费观看 | 999国产精品视频 | 秘密的基地| 黄色av网站免费 | 成人av电影免费观看 | 就去吻亚洲 | 天天躁日日躁aaaaxxxx | 欧美四区 | 精品无码国产一区二区三区51安 | 国产精品视频在线观看 | 黄色网址免费 | 自拍偷拍国产精品 | sm捆绑调教视频 | 三上悠亚 在线观看 | 精品美女一区二区三区 | 少妇高潮惨叫久久久久久 | 国产乱码一区 | 国产黄色录像 | 男女视频免费 | 五月天亚洲色图 | 欧美日韩三级在线 | 少妇被躁爽到高潮无码人狍大战 | 精品少妇theporn | 原神女裸体看个够无遮挡 | 99资源在线 | 大地二资源在线观看高清国语版 | 青青操原 | 精品午夜视频 | 免费特级毛片 | 99在线视频精品 | 牛牛电影国产一区二区 | 美女爱爱视频 | 男18无遮挡脱了内裤 | 91色站| 91天天| 成年人视频网站 | 黄色网入口 | 青青草成人在线观看 | 国产亚洲色婷婷久久 | 女人免费视频 | 五月婷婷中文 | 口舌奴vk | 国产精品白丝喷水在线观看 | 黄色av网站免费 | 亚洲xxx视频 | 奶妈的诱惑 | 日韩精品视频在线免费观看 | 午夜精品一区二区三区在线视频 | 亚洲一区二区三区免费视频 | 中文字幕不卡在线观看 | 欧美专区第一页 | 人人妻人人澡人人爽精品日本 | 1024国产在线| 日本福利在线观看 | 久草五月| 亚洲专区在线播放 | 韩国三级与黑人 | 精品一二三区 | 久久免费精品 | 黄色精品在线观看 | www.国产91| 国产片一区二区三区 | 日日夜夜免费精品 | 欧美 日韩 综合 | 伊人99热 | www.夜夜 | 久久噜 | 国产亚洲色婷婷久久99精品91 | 欧美午夜精品一区二区 | 久久久91| 日本黄色网址大全 | 中文字字幕在线中文乱码电影 | 老鸭资源 | 深夜视频18 | 久章草影院 | www.日本高清 | 亚洲国产精品无码久久久久高潮 | 天堂av在线资源 | 久草色在线 | 性视频播放免费视频 | 午夜寂寞院 | 成年人视频免费在线观看 | 久久成人一区 | 性爱一级视频 | 久久不卡影院 | 中国极品少妇xxxx做受 | 青青草国产精品 | 色婷婷在线影院 | 三级av电影 | 午夜免费播放观看在线视频 | 和黑帮大佬的365 | 天天干天天干天天干 | 日韩免费 | 91免费影片| 超碰人人超碰 | 日韩精品视频在线免费观看 | 小嫩女直喷白浆 | 在线观看亚洲 | 国产又粗又猛又爽又黄的 | 男女瑟瑟网站 | 老鸭资源 | 国模在线 | 久草五月天| 久久成年人视频 | 日日拍拍 | 视频在线你懂的 | 日韩高清一区 | 高h喷水荡肉少妇爽多p视频 | 一级黄色免费 | 亚洲美女视频 | 男人天堂中文字幕 | 欧美20p | 99热这里只有精品在线观看 | 波多野吉衣一二三区乱码 | 亚洲视频综合 | 国产成人a人亚洲精品无码 最近中文字幕av | 伊人久久大香线蕉av一区 | 国产chinesehd精品露脸 | 色综合中文字幕 | 天天摸夜夜添狠狠添婷婷 | 欧美性猛交xxxx乱大交俱乐部 | 男人操女人网站 | 少妇高潮惨叫久久久久久 | 97播播| 大学生三级中国dvd 亚洲成人精品久久 | 夜色资源网 | 97精品| 精品午夜福利视频 | 精品无码久久久久久久久 | 传媒av在线 | 三级黄在线观看 | 不卡久久 | 看黄色一级视频 | 午夜激情免费视频 | 青青草成人在线观看 | 九九视频在线播放 | www.夜夜骑| 中文在线免费视频 | 日韩有码第一页 | 韩国一区二区在线观看 | 国产一区二区视频在线 | 九九九九精品九九九九 | 国产精品久久久久久亚洲色 | 99综合 | 成年人视频网 | 久青草视频在线观看 | aaaa一级片 | www色日本 | 欧美亚洲在线视频 | 污视频网站免费看 | 女同vk| 好吊一区二区三区 | 92国产精品 | 少妇扒开粉嫩小泬视频 | 中文字幕mv | 日本大乳奶做爰 | a级片免费在线观看 | 久久免费在线视频 | 一区二区免费 | 中文字幕亚洲乱码熟女1区2区 | av在线播放中文字幕 | 好看的h文| 免费网站观看www在线观 | 亚洲乱码一区二区 | 欧洲成人免费视频 | 亚洲黄色在线观看 | 80日本xxxxxxxxx96| 国产日比视频 | 日本黄色大片免费 | 欧美激情黑白配 | 97人妻精品一区二区三区免 | 国产1区2区在线观看 | 日韩一区二 | 日韩欧美一级片 | 两女双腿交缠激烈磨豆腐 | 亚洲精品97久久 | 国产人成视频在线观看 | 国产熟女高潮一区二区三区 | 91成人在线观看喷潮动漫 | av在线免费电影 | 91人妻一区二区 | 在线观看国产欧美 | 人妻精品久久久久中文字幕 | 亚洲免费观看高清 | 在线高清观看免费 | 清纯粉嫩极品夜夜嗨av | 麻豆精品一区二区 | 在线观看免费黄色 | 亚洲免费三级 | 欧美性猛交xxxx乱大交退制版 | 亚洲国产精品无码久久久久高潮 | 国产在线精品一区二区 | 欧美影院一区 | 最新日韩在线 | ass大乳尤物肉体pics | 免费色片 | 欧美日韩亚洲二区 | 操到喷水 | 日韩一区二区三区四区在线 | 成人羞羞国产免费 | 国产成人在线观看免费网站 | 久草五月| 亚洲视频国产精品 | 成人污视频在线观看 | 天天干天天干天天干 | 丁香花电影免费播放电影 | 韩国一区二区三区在线观看 | 特黄aaaaaaaaa毛片免费视频 | 天天插天天射 | 日韩黄色免费观看 | 一级黄色大片 | 日韩av一二三 | 久久久久久少妇 | 色噜噜狠狠狠综合曰曰曰 | 日本精品在线 | 黄桃av | 国产精品天天狠天天看 | 日本在线三级 | 亚洲熟妇色自偷自拍另类 | 美女又爽又黄网站泳装 | 北条麻妃av在线 | 色噜噜在线观看 | 中文字幕第18页 | 在线不卡中文字幕 | 欧美69久成人做爰视频 | 西欧毛片 | 日韩午夜一区 | 9999热| 中文字幕一区二区人妻电影 | 张柏芝亚洲一区二区三区 | aaaaa黄色片 日韩电影院 | 亚洲xxx视频 | 91精品国产成人观看 | 色婷婷av一区二区三区之红樱桃 | 亚洲免费福利视频 | 日韩精品在线视频观看 | 欧美成人高清视频 | 欧洲成人av | 中文字幕一区二区人妻电影 | 亚洲女成人图区 | 黄色成人毛片 | 星铁乱淫h侵犯h文 | 亚洲麻豆精品 | 91狠狠| 天天草夜夜操 | 中文字字幕在线中文乱码电影 | 国内自拍av | 灌篮高手全国大赛电影 | 1769在线视频 | 日本中文字幕免费 | 韩国黄色大片 | 少妇一级片 | www.五月激情| 玖玖国产 | 91久久久久国产一区二区 | 特黄aaaaaaaaa真人毛片 | 91久久国产综合久久91精品网站 | 日韩大尺度视频 | www夜片内射视频日韩精品成人 | 欧美婷婷| 午夜精品电影 | 一区二区在线免费观看视频 | 久久久久9999 | 国产精品黑丝 | 久久成人免费视频 | 97看片吧| 国产精品黑丝 | 淫欲的美女理论电影完整版 | aaaa一级片 | 黑夜传说1 | av蜜臀网站| 国产一区二区中文字幕 | 在线观看www.| 久久伊人精品 | 亚洲网站在线 | 男人天堂一区 | 中文字幕观看 | 国产又粗又猛视频免费 | 成人做爰视频www | 国产成人在线免费观看视频 | 91视频污 | 亚洲男同视频 | 青青草激情视频 | 自拍亚洲欧美 | 暖暖日本在线视频 | 狂野欧美| 色吧av色av| 国产人妻精品一区二区三区不卡 | 日韩精品免费一区二区夜夜嗨 | 国产精品三 | 自拍偷拍国产精品 | 中国a级黄色片 | 草久影院| 人成在线 | 爆操欧美美女 | 国产精品入口麻豆 | 青青草狠狠干 | 三级黄在线观看 | 女~淫辱の触手3d动漫 | 欧洲天堂网 | 午夜欧美激情 | 五月婷婷激情四射 | 成人av电影免费观看 | 2019毛片| 日韩在线视频看看 | 黄色免费网站在线观看 | 丁香花电影免费播放电影 | 性色av蜜臀av浪潮av老女人 | 都市激情 亚洲 | 女女百合国产免费网站 | 极度诱惑香港电影完整 | 91精品国产成人观看 | 精品无码国产一区二区三区51安 | 亚洲日本中文 | 波多野结衣中文字幕在线 | 日韩久久一区二区 | 亚洲三级免费 | 国产一区精品在线观看 | 好吊一区二区三区 | 国产又粗又猛又爽又黄的 | 91精品人妻一区二区三区 | 动漫美女被到爽 | 午夜精品久久久久久久爽 | 亚洲一区二区精品在线 | 欧美做受xxxxxⅹ性视频 | 乱色视频 | 西欧毛片| av免费一区 | 日韩和欧美的一区二区 | 亚洲播放器 | 星铁乱淫h侵犯h文 | 看特级毛片 | 琪琪五月天 | 岛国av大片 | 国产精品黑丝 | 在线免费看av片 | 黄色av网站免费 | 猫咪av在线 | 午夜精品亚洲 | 麻豆影音先锋 | 日本精品在线 | 中文字字幕在线中文乱码电影 | 伊人天堂av | 91麻豆精品一二三区在线 | 一级片手机在线观看 | 成人国产网站 | 看全色黄大色黄女片18 | 人人爱操 | 欧美9999 | 国产又粗又猛又爽又黄的 | 久久一| 日本极品丰满ⅹxxxhd | 国产亚洲精品成人a | 日韩三级| 国内精品一区二区 | 亚洲黄色片 | 亚洲天堂av在线播放 | 国产青青草视频 | 久久男人天堂 | 国产成人精品无码片区在线 | 黄漫在线免费观看 | 日本五十路女优 | 欧美jizz欧美性大全 | 又粗又大又深又硬又爽 | 久久久久噜噜噜亚洲熟女综合 | 欧美在线专区 | 艳母动漫在线播放 | 人妻丰满熟妇av无码区hd | 亚洲最新中文字幕 | 午夜在线观看视频 | 超碰在线亚洲| 欧美九九 | 国产又粗又大又爽视频 | 精品伦精品一区二区三区视频密桃 | 国语对白永久免费 | 日本女优网址 | 欧美国产片 | 自拍亚洲欧美 | 国产午夜精品理论片 | 性史性dvd影片农村毛片 | 国产又粗又大又硬 | 91在线观看视频 | 羞羞网站在线观看 | 精品无码国产一区二区三区51安 | 91中文 | 永久91嫩草亚洲精品人人 | 日韩av一区在线 | 欧美69久成人做爰视频 | 91精品国产综合久久香蕉922 | 美女一级黄色片 | 日韩av一区二区三区在线观看 | 免费看日韩毛片 | www夜片内射视频日韩精品成人 | 国产精品白丝喷水在线观看 | 免费网站观看www在线观 | 爱操视频 | 国产伦精品一区 | 日韩国产免费 | 成人免费毛片果冻 | 99久久99久久精品国产片果冻 | 国产尻逼视频 | 91抖音在线观看 | 男女福利视频 | 一级片黄色| 午夜肉体高潮免费毛片 | 瑟瑟在线观看 | www.日本高清| 特黄色一级片 | 日韩精品久 | 艳母日本动漫在线观看 | 明日叶三叶 | 做爰视频 | 免费国产一区 | 精品人妻无码中文字幕18禁 | 成人免费黄色网 | 欧美jizz欧美性大全 | 特色黄色片 | 456亚洲影院 | 男人插入女人阴道视频 | 成人午夜淫片免费观看 | 秘密的基地 | 国产成人在线免费观看视频 | av中文网站| 久久久91 | 国模在线 | 激情网五月| 欧美日韩中文字幕一区二区 | 久久精品国产亚洲AV无码男同 | 少妇综合| 亚洲视频国产精品 | 毛茸茸的中国女bbw 国产午夜精品久久久 | 色哟哟一区| 日韩在线视频看看 | 91亚洲国产成人精品一区 | 国产人妻精品一区二区三区不卡 | 一本一道久久a久久精品蜜桃 | 樱桃香蕉视频 | 日韩一区二区三区四区五区六区 | 国产精品一级 | www夜片内射视频日韩精品成人 | 中文字幕av久久爽一区 | 黄色免费网站在线观看 | 国产麻豆精品久久一二三 | 中日韩中文字幕 | 亚洲一区二区三区免费视频 | 亚洲一区二区欧美 | 奶妈的诱惑 | 成人国产网站 | 韩国一区二区在线观看 | 国产精品欧美在线 | aaaa一级片 | 四虎精品一区二区三区 | 久久极品视频 | 亚洲高潮av | 天天亚洲 | 欧美色激情 | 黄色片在线观看视频 | <