精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

老板怒吼:今晚整一個B站彈幕交互功能

開發 前端 開發工具
2021 年了,還有不支持彈幕的視頻網站嗎,現在各種彈幕玩法層出不窮,抽獎,PPT 都上彈幕玩法了,不整個彈幕都說不過去了。

 [[422775]]

圖片來自 包圖網

今天筆者就抽空做了一個實時視頻彈幕交互的小功能,不得不說這樣的形式為看視頻看直播,講義 PPT,抽獎等形式增加了許多樂趣。

技術選型

①Netty

官方對于 Netty 的描述:

  1. https://netty.io/ 

主要關鍵詞描述:Netty 是異步事件驅動網絡框架,可做各種協議服務端,并且支持了 FTP,SMTP,HTTP 等很多協議,并且性能,穩定性,靈活性都很棒。

可以看到 Netty 整體架構上分了三個部分:

  • 以零拷貝,一致性接口,擴展事件模型的底層核心。
  • Socket,Datagram,Pipe,Http Tunnel 作為傳輸媒介。
  • 傳輸支持的各種協議,HTTP&WebSocket,SSL,大文件,zlib/gzip 壓縮,文本,二進制,Google Protobuf 等各種各種的傳輸形式。

②WebSocket

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。WebSocket 通信協議于 2011 年被 IETF 定為標準 RFC 6455,并由 RFC7936 補充規范。

WebSocket API 也被 W3C 定為標準。WebSocket 使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。

在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。

為什么做這樣的技術選型:

  • 由上述可知,實時直播交互作為互動式是一個雙向數據傳輸過程。所以使用 WebSocket。
  • Netty 本身支持了 WebSocket 協議的實現,讓實現更加簡單方便。

實現思路

①服務架構

整體架構是所有客戶端都和我的服務端開啟一個雙向通道的架構。

②傳輸流程

如下圖:

實現效果

先看看效果吧,是不是 perfect,接下來就來看具體代碼是怎么實現的吧。

視頻直播彈幕示例

代碼實現

①項目結構

一個 maven 項目,將代碼放一個包下就行。

②Java 服務端

Java 服務端代碼,總共三個類,Server,Initailizer 和 Handler。

先做一個 netty nio 的服務端:一個 nio 的服務,開啟一個 tcp 端口。

  1. import io.netty.bootstrap.ServerBootstrap; 
  2. import io.netty.channel.ChannelFuture; 
  3. import io.netty.channel.EventLoopGroup; 
  4. import io.netty.channel.nio.NioEventLoopGroup; 
  5. import io.netty.channel.socket.nio.NioServerSocketChannel; 
  6.  
  7. /** 
  8.  * Copyright(c)lbhbinhao@163.com 
  9.  * @author liubinhao 
  10.  * @date 2021/1/14 
  11.  * ++++ ______                           ______             ______ 
  12.  * +++/     /|                         /     /|           /     /| 
  13.  * +/_____/  |                       /_____/  |         /_____/  | 
  14.  * |     |   |                      |     |   |        |     |   | 
  15.  * |     |   |                      |     |   |________|     |   | 
  16.  * |     |   |                      |     |  /         |     |   | 
  17.  * |     |   |                      |     |/___________|     |   | 
  18.  * |     |   |___________________   |     |____________|     |   | 
  19.  * |     |  /                  / |  |     |   |        |     |   | 
  20.  * |     |/ _________________/  /   |     |  /         |     |  / 
  21.  * |_________________________|/b    |_____|/           |_____|/ 
  22.  */ 
  23. public enum BulletChatServer { 
  24.     /** 
  25.      * Server instance 
  26.      */ 
  27.     SERVER; 
  28.  
  29.     private BulletChatServer(){ 
  30.         EventLoopGroup mainGroup = new NioEventLoopGroup(); 
  31.         EventLoopGroup subGroup  = new NioEventLoopGroup(); 
  32.         ServerBootstrap server = new ServerBootstrap(); 
  33.         server.group(mainGroup,subGroup) 
  34.                 .channel(NioServerSocketChannel.class) 
  35.                 .childHandler(new BulletChatInitializer()); 
  36.         ChannelFuture future = server.bind(9123); 
  37.     } 
  38.  
  39.     public static void main(String[] args) { 
  40.  
  41.     } 
  42.  

服務端的具體處理邏輯:

  1. import io.netty.channel.ChannelInitializer; 
  2. import io.netty.channel.ChannelPipeline; 
  3. import io.netty.channel.socket.SocketChannel; 
  4. import io.netty.handler.codec.http.HttpObjectAggregator; 
  5. import io.netty.handler.codec.http.HttpServerCodec; 
  6. import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; 
  7. import io.netty.handler.stream.ChunkedWriteHandler; 
  8. import io.netty.handler.timeout.IdleStateHandler; 
  9.  
  10. /** 
  11.  * Copyright(c)lbhbinhao@163.com 
  12.  * 
  13.  * @author liubinhao 
  14.  * @date 2021/1/14 
  15.  * ++++ ______                           ______             ______ 
  16.  * +++/     /|                         /     /|           /     /| 
  17.  * +/_____/  |                       /_____/  |         /_____/  | 
  18.  * |     |   |                      |     |   |        |     |   | 
  19.  * |     |   |                      |     |   |________|     |   | 
  20.  * |     |   |                      |     |  /         |     |   | 
  21.  * |     |   |                      |     |/___________|     |   | 
  22.  * |     |   |___________________   |     |____________|     |   | 
  23.  * |     |  /                  / |  |     |   |        |     |   | 
  24.  * |     |/ _________________/  /   |     |  /         |     |  / 
  25.  * |_________________________|/b    |_____|/           |_____|/ 
  26.  */ 
  27.  
  28. public class BulletChatInitializer extends ChannelInitializer<SocketChannel> { 
  29.     @Override 
  30.     protected void initChannel(SocketChannel ch) throws Exception { 
  31.         ChannelPipeline pipeline = ch.pipeline(); 
  32.         pipeline.addLast(new HttpServerCodec()); 
  33.         pipeline.addLast(new ChunkedWriteHandler()); 
  34.         pipeline.addLast(new HttpObjectAggregator(1024*64)); 
  35.         pipeline.addLast(new IdleStateHandler(8, 10, 12)); 
  36.         pipeline.addLast(new WebSocketServerProtocolHandler("/lbh")); 
  37.         pipeline.addLast(new BulletChatHandler()); 
  38.     } 

后臺處理邏輯,接受到消息,寫出到所有的客戶端:

  1. import io.netty.channel.Channel; 
  2. import io.netty.channel.ChannelHandler; 
  3. import io.netty.channel.ChannelHandlerContext; 
  4. import io.netty.channel.SimpleChannelInboundHandler; 
  5. import io.netty.channel.group.ChannelGroup; 
  6. import io.netty.channel.group.DefaultChannelGroup; 
  7. import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; 
  8. import io.netty.util.concurrent.EventExecutorGroup; 
  9. import io.netty.util.concurrent.GlobalEventExecutor; 
  10.  
  11. /** 
  12.  * Copyright(c)lbhbinhao@163.com 
  13.  * 
  14.  * @author liubinhao 
  15.  * @date 2021/1/14 
  16.  * ++++ ______                           ______             ______ 
  17.  * +++/     /|                         /     /|           /     /| 
  18.  * +/_____/  |                       /_____/  |         /_____/  | 
  19.  * |     |   |                      |     |   |        |     |   | 
  20.  * |     |   |                      |     |   |________|     |   | 
  21.  * |     |   |                      |     |  /         |     |   | 
  22.  * |     |   |                      |     |/___________|     |   | 
  23.  * |     |   |___________________   |     |____________|     |   | 
  24.  * |     |  /                  / |  |     |   |        |     |   | 
  25.  * |     |/ _________________/  /   |     |  /         |     |  / 
  26.  * |_________________________|/b    |_____|/           |_____|/ 
  27.  */ 
  28.  
  29. public class BulletChatHandler  extends SimpleChannelInboundHandler<TextWebSocketFrame> { 
  30.     // 用于記錄和管理所有客戶端的channel 
  31.     public static ChannelGroup channels = 
  32.             new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); 
  33.     @Override 
  34.     protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception { 
  35.         // 獲取客戶端傳輸過來的消息 
  36.         String content = msg.text(); 
  37.         System.err.println("收到消息:"+ content); 
  38.         channels.writeAndFlush(new TextWebSocketFrame(content)); 
  39.         System.err.println("寫出消息完成:"+content); 
  40.     } 
  41.  
  42.     @Override 
  43.     public void handlerAdded(ChannelHandlerContext ctx) throws Exception { 
  44.         channels.add(ctx.channel()); 
  45.     } 
  46.  
  47.     @Override 
  48.     public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { 
  49.  
  50.         String channelId = ctx.channel().id().asShortText(); 
  51.         System.out.println("客戶端被移除,channelId為:" + channelId); 
  52.         channels.remove(ctx.channel()); 
  53.     } 
  54.  
  55.     @Override 
  56.     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 
  57.         cause.printStackTrace(); 
  58.         // 發生異常之后關閉連接(關閉channel),隨后從ChannelGroup中移除 
  59.         ctx.channel().close(); 
  60.         channels.remove(ctx.channel()); 
  61.     } 
  62.  

③網頁客戶端實現

代碼如下:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.     <meta charset="utf-8"
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge"
  6.     <title>Netty視頻彈幕實現 Author:Binhao Liu</title> 
  7.     <link rel="stylesheet" href=""
  8.     <style type="text/css" media="screen"
  9.         * { 
  10.             margin: 0px; 
  11.             padding: 0px 
  12.         } 
  13.  
  14.         html, body { 
  15.             height: 100% 
  16.         } 
  17.  
  18.         body { 
  19.             overflow: hidden; 
  20.             background-color: #FFF; 
  21.             text-align: center; 
  22.         } 
  23.  
  24.         .flex-column { 
  25.             display: flex; 
  26.             flex-direction: column
  27.             justify-content: space-between;, align-items: center; 
  28.         } 
  29.  
  30.         .flex-row { 
  31.             display: flex; 
  32.             flex-direction: row; 
  33.             justify-content: center; 
  34.             align-items: center; 
  35.         } 
  36.  
  37.         .wrap { 
  38.             overflow: hidden; 
  39.             width: 70%; 
  40.             height: 600px; 
  41.             margin: 100px auto; 
  42.             padding: 20px; 
  43.             background-color: transparent; 
  44.             box-shadow: 0 0 9px #222; 
  45.             border-radius: 20px; 
  46.         } 
  47.  
  48.         .wrap .box { 
  49.             position: relative
  50.             width: 100%; 
  51.             height: 90%; 
  52.             background-color: #000000; 
  53.             border-radius: 10px 
  54.         } 
  55.  
  56.         .wrap .box span { 
  57.             position: absolute
  58.             top: 10px; 
  59.             left: 20px; 
  60.             display: block; 
  61.             padding: 10px; 
  62.             color: #336688 
  63.         } 
  64.  
  65.         .wrap .send { 
  66.             display: flex; 
  67.             width: 100%; 
  68.             height: 10%; 
  69.             background-color: #000000; 
  70.             border-radius: 8px 
  71.         } 
  72.  
  73.         .wrap .send input { 
  74.             width: 40%; 
  75.             height: 60%; 
  76.             border: 0; 
  77.             outline: 0; 
  78.             border-radius: 5px 0px 0px 5px; 
  79.             box-shadow: 0px 0px 5px #d9d9d9; 
  80.             text-indent: 1em 
  81.         } 
  82.  
  83.         .wrap .send .send-btn { 
  84.             width: 100px; 
  85.             height: 60%; 
  86.             background-color: #fe943b; 
  87.             color: #FFF; 
  88.             text-align: center; 
  89.             border-radius: 0px 5px 5px 0px; 
  90.             line-height: 30px; 
  91.             cursor: pointer; 
  92.         } 
  93.  
  94.         .wrap .send .send-btn:hover { 
  95.             background-color: #4cacdc 
  96.         } 
  97.     </style> 
  98. </head> 
  99. <script> 
  100.     var ws = new WebSocket("ws://localhost:9123/lbh"); 
  101.  
  102.     ws.onopen = function () { 
  103.         // Web Socket 已連接上,使用 send() 方法發送數據 
  104.         alert("數據發送中..."); 
  105.     }; 
  106.     ws.onmessage = function (e) { 
  107.         console.log("接受到消息:"+e.data); 
  108.         createEle(e.data); 
  109.     }; 
  110.     ws.onclose = function () { 
  111.         // 關閉 websocket 
  112.         alert("連接已關閉..."); 
  113.     }; 
  114.     function sendMsg(msg) { 
  115.         ws.send(msg) 
  116.     } 
  117.  
  118.  
  119. </script> 
  120. <body> 
  121. <div class="wrap flex-column"
  122.     <div class="box"
  123.         <video src="shape.mp4" width="100%" height="100%" controls autoplay></video> 
  124.     </div> 
  125.     <div class="send flex-row"
  126.  
  127.         <input type="text" class="con" placeholder="彈幕發送[]~(^v^)~*"/> 
  128.  
  129.         <div class="send-btn" onclick="javascript:sendMsg(document.querySelector('.con').value)">發送</div> 
  130.     </div> 
  131. </div> 
  132. <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script> 
  133. <script> 
  134.     //1.獲取元素 
  135.     var oBox = document.querySelector('.box');   //獲取.box元素 
  136.     var cW = oBox.offsetWidth;   //獲取box的寬度 
  137.     var cH = oBox.offsetHeight;   //獲取box的高度 
  138.     function createEle(txt) { 
  139.         //動態生成span標簽 
  140.         var oMessage = document.createElement('span');   //創建標簽 
  141.         oMessage.innerHTML = txt;   //接收參數txt并且生成替換內容 
  142.         oMessage.style.left = cW + 'px';  //初始化生成位置x 
  143.         oBox.appendChild(oMessage);   //把標簽塞到oBox里面 
  144.         roll.call(oMessage, { 
  145.             //call改變函數內部this的指向 
  146.             timing: ['linear''ease-out'][~~(Math.random() * 2)], 
  147.             color: '#' + (~~(Math.random() * (1 << 24))).toString(16), 
  148.             top: random(0, cH), 
  149.             fontSize: random(16, 32) 
  150.         }); 
  151.     } 
  152.  
  153.     function roll(opt) { 
  154.         //彈幕滾動 
  155.         //如果對象中不存在timing 初始化 
  156.         opt.timing = opt.timing || 'linear'
  157.         opt.color = opt.color || '#fff'
  158.         opt.top = opt.top || 0; 
  159.         opt.fontSize = opt.fontSize || 16; 
  160.         this._left = parseInt(this.offsetLeft);   //獲取當前left的值 
  161.         this.style.color = opt.color;   //初始化顏色 
  162.         this.style.top = opt.top + 'px'
  163.         this.style.fontSize = opt.fontSize + 'px'
  164.         this.timer = setInterval(function () { 
  165.             if (this._left <= 100) { 
  166.                 clearInterval(this.timer);   //終止定時器 
  167.                 this.parentNode.removeChild(this); 
  168.                 return;   //終止函數 
  169.             } 
  170.             switch (opt.timing) { 
  171.                 case 'linear':   //如果勻速 
  172.                     this._left += -2; 
  173.                     break; 
  174.                 case 'ease-out':   // 
  175.                     this._left += (0 - this._left) * .01; 
  176.                     break; 
  177.             } 
  178.             this.style.left = this._left + 'px'
  179.         }.bind(this), 1000 / 60); 
  180.     } 
  181.  
  182.     function random(start, end) { 
  183.         //隨機數封裝 
  184.         return start + ~~(Math.random() * (end - start)); 
  185.     } 
  186.  
  187.     var aLi = document.querySelectorAll('li');   //10 
  188.  
  189.     function forEach(ele, cb) { 
  190.         for (var i = 0, len = aLi.length; i < len; i++) { 
  191.             cb && cb(ele[i], i); 
  192.         } 
  193.     } 
  194.  
  195.     forEach(aLi, function (ele, i) { 
  196.         ele.style.left = i * 100 + 'px'
  197.     }); 
  198.     //產生閉包 
  199.     var obj = { 
  200.         num: 1, 
  201.         addfunction () { 
  202.             this.num++;   //obj.num = 2; 
  203.             (function () { 
  204.                 console.log(this.num); 
  205.             }) 
  206.         } 
  207.     }; 
  208.     obj.add();//window 
  209.  
  210. </script> 
  211. </body> 
  212. </html> 

這樣一個實時的視頻彈幕功能就完成啦,是不是很簡單,各位小伙伴快來試試吧。

小結

這個還是很簡單,筆者寫這個的時候一會兒就寫完了。不過這也得益于筆者很久以前就寫過 Netty 的服務,對于 HTTP,TCP 之類協議也比較熟悉。

只有前端會有些難度,問下度娘,也很快能做完,在此分享出來與諸君分享,有問題可找筆者交流。

作者:興趣使然的程序猿

編輯:陶家龍

出處:http://adkx.net/w71wf

 

責任編輯:武曉燕 來源: adkx.net
相關推薦

2022-04-26 10:47:53

分配權限vuejs

2018-01-04 09:20:55

python爬蟲視頻彈幕

2024-08-06 10:16:52

Java AgentJava

2020-10-20 14:12:54

B站開源彈幕

2021-10-29 07:49:23

Python彈幕播放

2021-04-01 07:44:45

排名調整Java Java基礎

2020-03-26 09:36:06

AB Test平臺的流量

2025-04-28 08:59:25

2009-08-26 17:05:55

.NET委托

2012-12-07 10:04:58

管理項目管理日常管理

2022-12-26 00:00:05

Python爬蟲B站彈幕

2021-07-15 09:49:08

B站宕機黑客

2012-04-24 09:22:16

軟件測試

2013-08-13 10:07:57

移動互聯網移動開發轉行創業

2021-04-09 08:13:14

API網關互聯網

2022-06-07 07:38:43

威士忌氣味測試

2021-12-14 17:19:15

存儲數據

2012-07-19 13:49:20

2020-04-06 20:47:42

FishShellLinux

2015-06-03 16:58:01

創業創業干貨
點贊
收藏

51CTO技術棧公眾號

日韩视频免费观看高清在线视频| 亚洲美女视频在线观看| 国自产精品手机在线观看视频| 亚洲香蕉中文网| 一区二区乱码| 欧美国产日韩精品免费观看| 成人黄色免费片| 久久香蕉精品视频| 亚洲瘦老头同性70tv| 欧美视频在线不卡| 999一区二区三区| 狠狠狠综合7777久夜色撩人| 免费在线视频一区| 欧美福利视频网站| 日本少妇xxxxx| 精品国产亚洲一区二区三区| 福利微拍一区二区| 亚洲欧美日韩精品综合在线观看| 精品二区在线观看| 爽爽淫人综合网网站| 日韩中文字幕av| 欧类av怡春院| 91精品麻豆| 色综合激情久久| 国产黄色激情视频| 视频三区在线| 久久久久9999亚洲精品| 国产精品久久久久久久久久久久冷 | 久久精品中文字幕一区二区三区 | 一本色道久久综合一区| 久久精品国产一区二区三区| 妺妺窝人体色WWW精品| 国产成人精品亚洲线观看| 欧美日韩一区三区| 国产日韩一区二区在线| 2021天堂中文幕一二区在线观| 国产精品美女久久久久高潮| 久久综合九色99| 精品人妻午夜一区二区三区四区 | 日本美女视频一区| 日本电影欧美片| 午夜精品免费在线| 青青草视频国产| 黄色成人影院| 国产精品久久久久久久第一福利| 国产一区精品在线| 韩国中文字幕hd久久精品| 国产伦精品一区二区三区在线观看| 国产成人综合久久| 国产污视频网站| 一本一本久久| 欧美在线激情网| 久久久国产高清| 亚洲人人精品| 国模叶桐国产精品一区| 日韩av电影网址| 亚洲天堂久久| 久久久久久久一区二区三区| 久草网视频在线观看| 欧美啪啪一区| 欧美国产日本在线| 日本三级午夜理伦三级三| 国产一区激情| 美女av一区二区三区| 亚洲天堂黄色片| 欧美精品激情| 97国产在线视频| 人人干人人干人人干| 国产精品一卡| 国产精品pans私拍| 在线视频免费观看一区| 另类人妖一区二区av| 国产在线精品一区免费香蕉| 91片黄在线观看喷潮| 精品一区二区三区在线视频| 亚洲va久久久噜噜噜久久天堂| 国产成a人亚洲精v品无码| 国产高清精品久久久久| 国产a一区二区| 人妻夜夜爽天天爽| 久久午夜电影网| 亚洲国产一区二区在线| sm国产在线调教视频| 亚洲综合色自拍一区| 日韩av中文字幕第一页| 超碰aⅴ人人做人人爽欧美| 91国内精品野花午夜精品| 一级黄色录像在线观看| 深夜激情久久| 日韩av网址在线| 精品亚洲aⅴ无码一区二区三区| 久久精品国产大片免费观看| 九九综合九九综合| 黄色片中文字幕| 蜜臀av性久久久久蜜臀aⅴ四虎| 91性高湖久久久久久久久_久久99| 亚洲国产精品久久久久爰性色| 99精品欧美一区二区三区小说 | 成人在线免费观看视频| 久久五月天综合| 欧美一二三区视频| 久久精品国产亚洲一区二区三区| 成人9ⅰ免费影视网站| 欧美日韩激情视频一区二区三区| 亚洲欧美自拍偷拍| 亚洲中文字幕无码不卡电影| 粉嫩av国产一区二区三区| 欧美精品一区二| 国产aaaaaaaaa| 亚洲人成久久| 成人在线中文字幕| 日韩av免费观影| 亚洲欧美日韩国产综合在线 | 白白色免费视频| 欧美黄免费看| 国产精品美女免费看| 日本国产在线观看| 亚洲色图视频网| 大香煮伊手机一区| 成人看片爽爽爽| 综合国产在线观看| 亚洲另类在线观看| 成人性生交大片免费看中文| 午夜精品一区二区在线观看| av影院在线免费观看| 91精品婷婷国产综合久久竹菊| jizz日本免费| 亚洲天堂偷拍| 97se国产在线视频| 日本中文在线观看| 日本道免费精品一区二区三区| 又大又长粗又爽又黄少妇视频| 精品国产一级毛片| 日韩av电影手机在线| 殴美一级特黄aaaaaa| 伊人夜夜躁av伊人久久| wwwwwxxxx日本| 精品视频97| 国产精品福利在线| 国产三级视频在线| 色婷婷综合久久久中文一区二区| 国产精品久久久久久在线观看| 欧美成人嫩草网站| 亚洲综合在线中文字幕| 成人高清免费在线| 这里是久久伊人| 二区三区四区视频| 国内精品久久久久影院一蜜桃| 五月天国产一区| 日本在线中文字幕一区二区三区| 亚洲精品一区中文| 欧美一级淫片免费视频黄| 26uuu另类欧美| 欧美日韩国产精品激情在线播放| 久久久久观看| 81精品国产乱码久久久久久| 天天综合网在线| 婷婷开心久久网| 鲁大师私人影院在线观看| 日韩午夜电影| 美乳视频一区二区| 97成人超碰| 日韩中文字幕在线看| 97精品久久人人爽人人爽| ㊣最新国产の精品bt伙计久久| 制服丝袜中文字幕第一页| 亚洲乱码精品| 福利视频一区二区三区| sm久久捆绑调教精品一区| 日韩av在线直播| 中文字幕高清在线免费播放| 久久久精品tv| www.国产视频.com| 欧美一区成人| 国产一区二区三区黄| 美女福利一区二区三区| 伊人久久精品视频| 国产情侣av在线| 亚洲午夜免费电影| 草草影院第一页| 奇米精品一区二区三区四区 | 九九免费精品视频在线观看| 国产精品电影观看| 99热国产在线| 亚洲欧美激情视频| 国产精品久久久久久久久久久久久久久久 | 欧美中文一区二区| 91中文字幕一区| 92久久精品| 国产亚洲成精品久久| 国产有码在线观看| 偷窥国产亚洲免费视频 | 国产精品国产三级国产aⅴ入口 | 印度午夜性春猛xxx交| 成人黄页在线观看| 少妇黄色一级片| 欧美在线播放| 欧美自拍资源在线| 欧美日本三级| 国产xxx69麻豆国语对白| 黄网页在线观看| 亚洲毛片一区二区| 国产免费叼嘿网站免费| 精品毛片三在线观看| 欧美一级片在线视频| 92国产精品观看| 国产女同无遮挡互慰高潮91| 亚洲看片免费| 经典三级在线视频| 国产日产一区 | 亚洲熟妇av日韩熟妇在线| 日韩一区二区在线| 九九九久久久| 欧美专区视频| 国产精品电影一区| 碰碰在线视频| 久久69精品久久久久久国产越南| 国产精品99999| 精品国产精品一区二区夜夜嗨| 91精品中文字幕| 一本大道久久a久久精二百| 国产在线视频二区| 亚洲免费大片在线观看| www中文在线| 国产三级一区二区三区| 无码任你躁久久久久久老妇| 国内精品久久久久影院色| 国产视频一区二区三区在线播放 | 久久久国产精品x99av| 免费在线高清av| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 欧美在线性爱视频 | 一区二区三区不卡视频| 黑人狂躁日本娇小| 欧美国产精品一区二区三区| 欧美精品黑人猛交高潮| 成人午夜激情在线| 性生活在线视频| 精品一区二区在线播放| 欧美伦理片在线观看| 三级一区在线视频先锋| 欧美 日韩 国产在线观看| 1024日韩| 欧美日韩性生活片| 国产日韩欧美三区| 精品欧美一区免费观看α√| 最新亚洲激情| 日本手机在线视频| 尤物在线精品| 欧美精品自拍视频| 一区二区黄色| 精品国产免费av| 国产免费成人| 日韩视频第二页| 欧美综合国产| 成年人黄色片视频| 久久精品午夜| 亚欧在线免费观看| 另类成人小视频在线| xxww在线观看| 国产一区欧美日韩| 精品人妻二区中文字幕| 成人国产亚洲欧美成人综合网| 欧美一级片黄色| 99精品国产99久久久久久白柏| 北岛玲一区二区| 久久综合成人精品亚洲另类欧美 | 国产麻豆9l精品三级站| 一区二区三区四区影院| 99精品一区二区三区| 日韩网站在线播放| 国产欧美一区二区精品性| 羞羞在线观看视频| 一区二区三区欧美| 97人人澡人人爽人人模亚洲| 一本一本久久a久久精品综合麻豆| 老熟妇仑乱一区二区av| 欧美自拍偷拍午夜视频| 一本色道久久综合熟妇| 精品久久99ma| 国产原创av在线| 久久精品中文字幕一区| 毛片在线网址| 国产成人avxxxxx在线看| 在线视频成人| 黑人另类av| 久久在线视频免费观看| 国产日本在线播放| 日本三级亚洲精品| 人妻 丝袜美腿 中文字幕| 久久久国产一区二区三区四区小说| 午夜国产福利视频| 亚洲成人av中文| 老熟妇一区二区三区啪啪| 日韩丝袜美女视频| 精品亚洲成a人片在线观看| www.亚洲人.com| 福利影院在线看| 91精品美女在线| 美腿丝袜亚洲图片| 伊人色综合久久天天五月婷| 亚洲人成久久| 一区二区三区国产好的精华液| 成人中文字幕在线| 亚洲aaa视频| 午夜国产精品影院在线观看| 一本色道久久综合精品婷婷| 日韩av影视在线| 成人在线视频亚洲| 国产成人亚洲综合91| 国产精品国产| 黄色网zhan| 日产国产高清一区二区三区| 亚洲精品无码一区二区| 国产精品久久久久婷婷二区次| 九九热精品视频在线| 欧美va在线播放| 日本www在线| 国产成人av在线| 日本韩国欧美超级黄在线观看| 久久久成人精品一区二区三区| 亚洲伦理精品| 一区二区三区四区毛片| 国产欧美一区二区三区鸳鸯浴 | 国产精品久久久久久久裸模| 日韩毛片一区二区三区| 欧美大片在线观看| 久草免费在线观看| 国产精品久久久久99| 国产免费播放一区二区| 免费在线观看亚洲视频| 丁香一区二区三区| 欧美国产日韩在线观看成人| 欧美福利视频一区| 91啦中文在线| 国产成人涩涩涩视频在线观看| 亚洲+小说+欧美+激情+另类| 久青草视频在线播放| 国产成人在线视频网站| 九九视频免费看| 欧美一区午夜视频在线观看| 日本成人在线播放| 国产综合久久久久| 久久一级电影| 国产欧美一区二| 亚洲欧洲精品天堂一级| 91丨九色丨蝌蚪丨对白| 日韩在线小视频| 97久久中文字幕| 国产av第一区| 国产麻豆成人传媒免费观看| 国产精品久久久久久久精| 日韩一级完整毛片| 国产极品人妖在线观看| 国产精品乱子乱xxxx| 99国产精品久久久久久久成人热| 美国黄色一级视频| 精品国产户外野外| 欧美孕妇性xxxⅹ精品hd| 国产成人精品在线观看| 日韩激情免费| 91精品视频国产| 亚洲激情图片qvod| 欧美77777| 2019中文字幕在线观看| 国产精品片aa在线观看| 亚洲精品视频导航| 成人免费在线播放视频| www.看毛片| 97视频在线观看视频免费视频| 亚洲国产最新| 日韩肉感妇bbwbbwbbw| 亚洲欧美色一区| 日本激情视频网站| 国产精品第2页| 欧美二区不卡| 五级黄高潮片90分钟视频| 欧美日韩午夜影院| 亚洲按摩av| 蜜桃传媒视频第一区入口在线看| 石原莉奈在线亚洲三区| 东方av正在进入| 亚洲激情视频在线观看| 精品无人乱码一区二区三区 | 国产精品一区=区| 欧美在线高清| 人人妻人人藻人人爽欧美一区| 欧美视频一区二区三区在线观看| 国产精品一卡二卡三卡| 国产精品久久久久久久小唯西川| 亚洲一区二区动漫| 三级黄色录像视频| 日韩av一区在线| 国产精品久久久久久av公交车| av之家在线观看| 中文字幕亚洲不卡| 亚洲欧美综合一区二区| 国产在线精品播放| 一区二区三区精品视频在线观看| 亚洲综合第一区|