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

C#開源實現MJPEG流傳輸

開發 后端
目前已經實現了UDP+RTP 方式在不同物理機之間的媒體流傳輸。當然,由于沒有基于 .NET 的媒體流壓縮實現,所以直接傳輸的裸圖Bitmap。不過要求不高,幀率低一些,機器性能強一些,看著也很流暢。

許久以前寫了篇文章《基于.NET打造IP智能網絡視頻監控系統》,記錄和介紹了自己幾年來積累和演練的一個系統。發現幾個月過去了,沒有任何進展。

目前已經實現了UDP+RTP 方式在不同物理機之間的媒體流傳輸。當然,由于沒有基于 .NET 的媒體流壓縮實現,所以直接傳輸的裸圖Bitmap。不過要求不高,幀率低一些,機器性能強一些,看著也很流暢。

能在桌面客戶端上看到視頻圖像的功能已經完成了。下面需要考慮,如何通過瀏覽器來查看視頻。

在不考慮使用 Flash、ActiveX 的條件下,貌似只能選擇 MJPEG 方式。目前還沒有研究在 HTML5 下視頻是如何處理的,以后有時間可以探索。

什么是 MJPEG?

看這里:

當然,我主要關注 MJPEG over HTTP 這段。

M-JPEG over HTTP
HTTP streaming separates each image into individual HTTP replies on a specified marker. RTP streaming creates packets of a sequence of JPEG images that can be received by clients such as QuickTime or VLC.
In response to a GET request for a MJPEG file or stream, the server streams the sequence of JPEG frames over HTTP. A special mime-type content type multipart/x-mixed-replace;boundary=<boundary-name> informs the client to expect several parts (frames) as an answer delimited by <boundary-name>. This boundary name is expressly disclosed within the MIME-type declaration itself. The TCP connection is not closed as long as the client wants to receive new frames and the server wants to provide new frames. Two basic implementations of a M-JPEG streaming server are cambozola and MJPG-Streamer. The more robust ffmpeg-server also provides M-JPEG streaming support.

也就是說,建立 HTTP 連接后,服務端在 Response 消息中先發一個數據頭 Header 告訴客戶端,我后面的都是 JPEG 圖片。圖片之間使用 boundary-name 來區分,每個圖片前都有自己的數據頭來描述圖片數據長度。

MJPEG數據頭定義

  1. /// <summary>  
  2.     /// 流頭部  
  3.     /// </summary>  
  4.     public string StreamHeader  
  5.     {  
  6.       get 
  7.       {  
  8.         return "HTTP/1.1 200 OK" +  
  9.                "\r\n" +  
  10.                "Content-Type: multipart/x-mixed-replace; boundary=" + this.Boundary +  
  11.                "\r\n";  
  12.       }  
  13.     } 
  1. /// <summary>  
  2.     /// 圖片頭部  
  3.     /// </summary>  
  4.     public string PayloadHeader  
  5.     {  
  6.       get 
  7.       {  
  8.         return "\r\n" +  
  9.                this.Boundary +  
  10.                "\r\n" +  
  11.                "Content-Type: image/jpeg" +  
  12.                "\r\n" +  
  13.                "Content-Length: " + _contentLengthString +  
  14.                "\r\n\r\n";  
  15.       }  
  16.     } 

這里的 Boundary 可以是任意字符串,只要你覺得唯一并能區分即可,比如我可以設置為“--dennisgao”。

#p#

服務器端實現

Http 服務器其實就是個支持 Tcp 連接的服務器。

  1. private AsyncTcpServer _server;  
  2.  
  3. _server = new AsyncTcpServer(Port);  
  4. _server.Encoding = Encoding.ASCII; 
  1. public void Start()  
  2.     {  
  3.       _server.Start(10);  
  4.       _server.ClientConnected += new EventHandler<TcpClientConnectedEventArgs>(OnClientConnected);  
  5.       _server.ClientDisconnected += new EventHandler<TcpClientDisconnectedEventArgs>(OnClientDisconnected);  
  6.     }  
  7.  
  8.     public void Stop()  
  9.     {  
  10.       _server.Stop();  
  11.       _server.ClientConnected -= new EventHandler<TcpClientConnectedEventArgs>(OnClientConnected);  
  12.       _server.ClientDisconnected -= new EventHandler<TcpClientDisconnectedEventArgs>(OnClientDisconnected);  
  13.     }  
  14.  
  15.     private void OnClientConnected(object sender, TcpClientConnectedEventArgs e)  
  16.     {  
  17.       _clients.AddOrUpdate(e.TcpClient.Client.RemoteEndPoint.ToString(), e.TcpClient, (n, o) => { return e.TcpClient; });  
  18.     }  
  19.  
  20.     private void OnClientDisconnected(object sender, TcpClientDisconnectedEventArgs e)  
  21.     {  
  22.       TcpClient clientToBeThrowAway;  
  23.       _clients.TryRemove(e.TcpClient.Client.RemoteEndPoint.ToString(), out clientToBeThrowAway);  
  24.     } 

這里可以參考兩篇文章中的實現。

發送圖片數據

首先要保證,對一個HTTP連接只能發一次流頭,因為后面是接連不斷的圖片數據。當然,發點別的數據客戶端也不會解碼。

  1. private void WriteStreamHeader()  
  2.     {  
  3.       if (_clients.Count > 0)  
  4.       {  
  5.         foreach (var item in _clients)  
  6.         {  
  7.           Logger.Debug(string.Format(CultureInfo.InvariantCulture,  
  8.             "Writing stream header, {0}, {1}{2}", item.Key, Environment.NewLine, StreamHeader));  
  9.  
  10.           _server.SyncSend(item.Value, StreamHeader);  
  11.  
  12.           TcpClient clientToBeThrowAway;  
  13.           _clients.TryRemove(item.Key, out clientToBeThrowAway);  
  14.         }  
  15.       }  
  16.     } 

發送圖片數據時,要保證圖片的前面是圖片頭和長度信息,數據尾部要有換行符。

  1. private void WritePayload(byte[] payload)  
  2.     {  
  3.       string payloadHeader = this.PayloadHeader.Replace(_contentLengthString, payload.Length.ToString());  
  4.       string payloadTail = "\r\n";  
  5.  
  6.       Logger.Debug(string.Format(CultureInfo.InvariantCulture,  
  7.         "Writing payload header, {0}{1}", Environment.NewLine, payloadHeader));  
  8.  
  9.       byte[] payloadHeaderBytes = _server.Encoding.GetBytes(payloadHeader);  
  10.       byte[] payloadTailBytes = _server.Encoding.GetBytes(payloadTail);  
  11.       byte[] packet = new byte[payloadHeaderBytes.Length + payload.Length + payloadTail.Length];  
  12.       Buffer.BlockCopy(payloadHeaderBytes, 0, packet, 0, payloadHeaderBytes.Length);  
  13.       Buffer.BlockCopy(payload, 0, packet, payloadHeaderBytes.Length, payload.Length);  
  14.       Buffer.BlockCopy(payloadTailBytes, 0, packet, payloadHeaderBytes.Length + payload.Length, payloadTailBytes.Length);  
  15.  
  16.       _server.SendToAll(packet);  
  17.     } 

結果演示

在可以成功發送流信息和圖片信息后,就可以在瀏覽器上查看視頻了。當然,我用的 Google Chrome 。IE10 好奇葩,它會把流當成文件不停的下載,搞不懂。

遠程訪問

局域網內的無線設備,只要瀏覽器支持 MJPEG ,均可以查看視頻。我測試了 iPad 上的 Safari 是可以的,但 Chrome 卻直接解析成亂碼。

當然,如果在路由器上配置轉發規則,就可以在外網訪問了。

#p#

完整代碼

  1. public class MJpegStreamingServer  
  2.   {  
  3.     private static string _contentLengthString = "__PayloadHeaderContentLength__";  
  4.     private AsyncTcpServer _server;  
  5.     private ConcurrentDictionary<string, TcpClient> _clients;  
  6.  
  7.     public MJpegStreamingServer(int listenPort)  
  8.       : this(listenPort, "--dennisgao")  
  9.     {  
  10.     }  
  11.  
  12.     public MJpegStreamingServer(int listenPort, string boundary)  
  13.     {  
  14.       Port = listenPort;  
  15.       Boundary = boundary;  
  16.  
  17.       _server = new AsyncTcpServer(Port);  
  18.       _server.Encoding = Encoding.ASCII;  
  19.       _clients = new ConcurrentDictionary<string, TcpClient>();  
  20.     }  
  21.  
  22.     /// <summary>  
  23.     /// 監聽的端口  
  24.     /// </summary>  
  25.     public int Port { getprivate set; }  
  26.  
  27.     /// <summary>  
  28.     /// 分隔符  
  29.     /// </summary>  
  30.     public string Boundary { getprivate set; }  
  31.  
  32.     /// <summary>  
  33.     /// 流頭部  
  34.     /// </summary>  
  35.     public string StreamHeader  
  36.     {  
  37.       get 
  38.       {  
  39.         return "HTTP/1.1 200 OK" +  
  40.                "\r\n" +  
  41.                "Content-Type: multipart/x-mixed-replace; boundary=" + this.Boundary +  
  42.                "\r\n";  
  43.       }  
  44.     }  
  45.  
  46.     /// <summary>  
  47.     /// 圖片頭部  
  48.     /// </summary>  
  49.     public string PayloadHeader  
  50.     {  
  51.       get 
  52.       {  
  53.         return "\r\n" +  
  54.                this.Boundary +  
  55.                "\r\n" +  
  56.                "Content-Type: image/jpeg" +  
  57.                "\r\n" +  
  58.                "Content-Length: " + _contentLengthString +  
  59.                "\r\n\r\n";  
  60.       }  
  61.     }  
  62.  
  63.     public void Start()  
  64.     {  
  65.       _server.Start(10);  
  66.       _server.ClientConnected += new EventHandler<TcpClientConnectedEventArgs>(OnClientConnected);  
  67.       _server.ClientDisconnected += new EventHandler<TcpClientDisconnectedEventArgs>(OnClientDisconnected);  
  68.     }  
  69.  
  70.     public void Stop()  
  71.     {  
  72.       _server.Stop();  
  73.       _server.ClientConnected -= new EventHandler<TcpClientConnectedEventArgs>(OnClientConnected);  
  74.       _server.ClientDisconnected -= new EventHandler<TcpClientDisconnectedEventArgs>(OnClientDisconnected);  
  75.     }  
  76.  
  77.     private void OnClientConnected(object sender, TcpClientConnectedEventArgs e)  
  78.     {  
  79.       _clients.AddOrUpdate(e.TcpClient.Client.RemoteEndPoint.ToString(), e.TcpClient, (n, o) => { return e.TcpClient; });  
  80.     }  
  81.  
  82.     private void OnClientDisconnected(object sender, TcpClientDisconnectedEventArgs e)  
  83.     {  
  84.       TcpClient clientToBeThrowAway;  
  85.       _clients.TryRemove(e.TcpClient.Client.RemoteEndPoint.ToString(), out clientToBeThrowAway);  
  86.     }  
  87.  
  88.     public void Write(Image image)  
  89.     {  
  90.       if (_server.IsRunning)  
  91.       {  
  92.         byte[] payload = BytesOf(image);  
  93.  
  94.         WriteStreamHeader();  
  95.         WritePayload(payload);  
  96.       }  
  97.     }  
  98.  
  99.     private void WriteStreamHeader()  
  100.     {  
  101.       if (_clients.Count > 0)  
  102.       {  
  103.         foreach (var item in _clients)  
  104.         {  
  105.           Logger.Debug(string.Format(CultureInfo.InvariantCulture,  
  106.             "Writing stream header, {0}, {1}{2}", item.Key, Environment.NewLine, StreamHeader));  
  107.  
  108.           _server.SyncSend(item.Value, StreamHeader);  
  109.  
  110.           TcpClient clientToBeThrowAway;  
  111.           _clients.TryRemove(item.Key, out clientToBeThrowAway);  
  112.         }  
  113.       }  
  114.     }  
  115.  
  116.     private void WritePayload(byte[] payload)  
  117.     {  
  118.       string payloadHeader = this.PayloadHeader.Replace(_contentLengthString, payload.Length.ToString());  
  119.       string payloadTail = "\r\n";  
  120.  
  121.       Logger.Debug(string.Format(CultureInfo.InvariantCulture,  
  122.         "Writing payload header, {0}{1}", Environment.NewLine, payloadHeader));  
  123.  
  124.       byte[] payloadHeaderBytes = _server.Encoding.GetBytes(payloadHeader);  
  125.       byte[] payloadTailBytes = _server.Encoding.GetBytes(payloadTail);  
  126.       byte[] packet = new byte[payloadHeaderBytes.Length + payload.Length + payloadTail.Length];  
  127.       Buffer.BlockCopy(payloadHeaderBytes, 0, packet, 0, payloadHeaderBytes.Length);  
  128.       Buffer.BlockCopy(payload, 0, packet, payloadHeaderBytes.Length, payload.Length);  
  129.       Buffer.BlockCopy(payloadTailBytes, 0, packet, payloadHeaderBytes.Length + payload.Length, payloadTailBytes.Length);  
  130.  
  131.       _server.SendToAll(packet);  
  132.     }  
  133.  
  134.     private byte[] BytesOf(Image image)  
  135.     {  
  136.       MemoryStream ms = new MemoryStream();  
  137.       image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);  
  138.  
  139.       byte[] payload = ms.ToArray();  
  140.  
  141.       return payload;  
  142.     }  
  143.   } 

原文鏈接:http://www.cnblogs.com/gaochundong/p/csharp_mjpeg_streaming.html

責任編輯:林師授 來源: 博客園
相關推薦

2009-08-26 14:35:00

用C#實現HTTP協議

2009-08-21 14:25:23

C#異步傳輸字符串

2009-08-21 14:33:15

C#異步傳輸字符串

2011-05-19 11:20:08

2009-08-21 16:27:44

C#服務端程序

2009-08-21 16:37:54

C#客戶端程序

2016-12-28 17:45:30

Hadoop大數據Kafka

2009-08-31 15:55:17

C#實現Strateg

2009-08-19 17:00:07

C#實現PrintPa

2009-08-25 17:55:52

C#實現Strateg

2009-08-20 14:22:17

C#實現 Contro

2009-09-01 18:29:10

C#繼承C#多態

2009-08-26 09:54:45

C#打印預覽C#打印

2021-04-19 12:31:04

太坊數據QuestDB

2009-08-12 13:11:24

C#實現遠程線程插入

2009-08-18 17:51:17

C#實現Interne

2009-09-04 13:22:31

C#實現多個接口

2009-08-17 17:08:35

C# ADSL自動撥號

2009-09-01 18:29:24

C#實現多個接口

2009-09-02 17:29:10

C# TextBox換
點贊
收藏

51CTO技術棧公眾號

亚洲色图.com| 九色综合狠狠综合久久| 亚洲欧美综合精品久久成人| 凹凸国产熟女精品视频| 国产色a在线| 国产麻豆成人精品| 97视频在线观看网址| 在线观看国产精品一区| 久久视频社区| 色悠悠亚洲一区二区| 自拍偷拍99| 天天干天天草天天射| 奇米色一区二区三区四区| 欧美大片第1页| 公肉吊粗大爽色翁浪妇视频| 亚洲精品在线播放| 在线观看日韩高清av| 欧美视频在线第一页| 成人免费视频| av激情亚洲男人天堂| 国产欧美一区二区三区在线看| 九九免费精品视频| 日本道不卡免费一区| 亚洲第一av网| 91网址在线观看精品| 偷拍视频一区二区三区| 亚洲一区二区三区中文字幕在线| 亚洲国产一区二区三区在线播| 俄罗斯嫩小性bbwbbw| 久久国产精品一区二区| 91爱爱小视频k| 成人涩涩小片视频日本| av一区二区在线观看| 亚洲精品美女网站| 中文字幕在线观看视频www| 日韩欧美2区| 欧美性猛交xxxx偷拍洗澡| 800av在线免费观看| 国产午夜在线视频| 91香蕉国产在线观看软件| 亚洲自拍欧美另类| 国产精品嫩草影院精东| 喷水一区二区三区| 国产精品久久久久久亚洲影视| 亚欧视频在线观看| 亚洲欧洲一区| 久久人人爽国产| 久久精品免费av| 欧美高清日韩| 美女久久久久久久| www.xxxx日本| 亚洲精品888| 不卡av电影院| 天天综合天天做| 国产精品91一区二区三区| 伊人久久久久久久久久久久久| 国产精品福利导航| 日韩欧美影院| 亚洲男人天堂2024| 亚洲黄色免费视频| 日韩电影一区| 俺去亚洲欧洲欧美日韩| 国产精品成人无码免费| 成人精品影院| 北条麻妃久久精品| 日本精品人妻无码77777| 欧美永久精品| 久久久久久12| 成人在线免费看视频| 天堂久久一区二区三区| 日韩av电影在线网| 怡红院成永久免费人全部视频| 久久se精品一区精品二区| 91久久精品在线| 亚洲av无码乱码国产精品久久| 国产98色在线|日韩| 激情伦成人综合小说| 日本人妖在线| 中文字幕欧美一| 欧美日韩中文字幕在线播放 | 四虎精品在线观看| 91精品综合久久久久久| 一区二区三区四区影院| 久久丝袜视频| 最近免费中文字幕视频2019| 好吊日在线视频| 亚洲综合欧美| 国产日韩av在线| 老熟妇高潮一区二区高清视频 | 亚洲色图日韩精品| 欧美福利网址| 日本一区二区三区四区视频| 91影院在线播放| 成人18精品视频| 日韩av在线电影观看| 久操视频在线观看| 午夜视频一区在线观看| 在线观看国产中文字幕| 澳门精品久久国产| 中文字幕免费精品一区| 精品视频在线观看免费| 日本aⅴ免费视频一区二区三区 | 三年中国国语在线播放免费| 视频一区国产| 亚洲最新中文字幕| 久久久久久久九九九九| 日本不卡一区二区三区| 国产精品xxx在线观看www| 国产视频福利在线| 五月天中文字幕一区二区| 视频二区在线播放| 日韩极品在线| 欧美区二区三区| 波多野结衣日韩| a美女胸又www黄视频久久| 亚洲欧美日韩在线综合| 电影网一区二区| 精品少妇一区二区三区 | 欧美成人自拍| 欧美做受高潮1| 精品人妻一区二区三区三区四区 | 欧美aaa在线观看| 欧美自拍电影| 日韩大陆毛片av| 免费中文字幕视频| 经典一区二区三区| 日韩国产一区久久| 性国裸体高清亚洲| 亚洲第一页自拍| 精品无码人妻一区二区三区品 | 特级毛片在线| 91精品国产色综合久久久蜜香臀| 精品人妻无码一区二区三区换脸| 日韩视频久久| 国产精品区一区二区三含羞草| 韩国av网站在线| 欧美区在线观看| 免费黄色国产视频| 蜜桃精品视频在线| 亚洲不卡1区| 在线观看福利电影| 日韩精品视频在线观看免费| 国产精品23p| 国产91高潮流白浆在线麻豆| 精品视频在线观看一区二区| 精品国产一区二区三区2021| 久久九九免费视频| a级片在线视频| 亚洲精品中文字幕乱码三区| 午夜诱惑痒痒网| 欧美精品黄色| 国产精品久久精品国产| 黑人极品ⅴideos精品欧美棵| 日韩视频一区二区三区在线播放| 日韩欧美123区| 国产成人综合视频| 精品久久久久久无码中文野结衣| 国产精品乱战久久久| 久久露脸国产精品| 搡老岳熟女国产熟妇| 天天做天天摸天天爽国产一区 | 欧美一区二三区| 欧美在线一卡| 欧美午夜精品久久久久久超碰 | 久久精品国产亚洲夜色av网站| 国产精品一二区| 成人在线直播| 亚洲成人网在线观看| 日本一级黄色录像| 久久久久久久久久久久久夜| 日韩一级理论片| 一区二区三区四区日韩| 风间由美一区二区三区| 亚洲精品国产精品国产| 伊人久久免费视频| 国产黄色av片| 欧美性猛交xxxx乱大交| 中文字幕求饶的少妇| 国产激情视频一区二区在线观看 | 高清无码一区二区在线观看吞精| 成人精品毛片| 国产精品1234| 91三级在线| 亚洲精品网址在线观看| 一级欧美一级日韩| 亚洲成av人片一区二区梦乃| 国产小视频自拍| 国产乱色国产精品免费视频| 国产乱子伦农村叉叉叉| 欧美手机视频| 国产精品一区二区三区四区五区 | 午夜精品福利在线视频| 成人18精品视频| 天天操狠狠操夜夜操| 亚洲午夜在线| 亚洲欧洲国产精品久久| silk一区二区三区精品视频| 国产成人激情小视频| 亚洲精品白浆| 在线播放精品一区二区三区| 国产高清免费av| 欧美色视频在线观看| 国产亚洲欧美久久久久| 中文字幕av在线一区二区三区| 亚洲性图第一页| 麻豆精品精品国产自在97香蕉| www.射射射| 99热国内精品| 欧美日韩在线一二三| 97se亚洲国产一区二区三区| 国产精品中文久久久久久久| 美女91在线看| 久久91亚洲人成电影网站| jizzjizz在线观看| 日韩精品中文字幕久久臀| 国产黄色一级大片| 欧美精品成人一区二区三区四区| 国产毛片aaa| 亚洲一区在线观看免费观看电影高清 | 欧美美女被草| 日韩av免费在线| 精品极品在线| 久久久久久久久久久免费| 国内外激情在线| www.色综合| h视频在线免费| 亚洲欧美在线看| 日本成人一区| 国产丝袜一区二区| 秋霞视频一区二区| 欧美不卡视频一区| www.污视频| 日韩女优毛片在线| 99久久久国产精品无码网爆| 欧美日韩国产综合一区二区三区| 91黑人精品一区二区三区| 欧美视频在线免费看| 国产一级精品视频| 精品久久久久久久久久久久久| 久久久www成人免费毛片| 亚洲免费看黄网站| 亚洲色婷婷一区二区三区| 亚洲天堂网中文字| 91精品一区二区三区蜜桃| 国产精品短视频| 国精产品一区一区二区三区mba| 日本一区二区高清| 中国特黄一级片| 成人欧美一区二区三区1314| 国产男女猛烈无遮挡在线喷水| 国产精品高潮呻吟| 欧美成人777| 亚洲高清免费一级二级三级| 亚洲精品午夜久久久久久久| 亚洲国产精品尤物yw在线观看| 久久精品视频国产| 激情懂色av一区av二区av| 国产精品男女视频| 日本高清无吗v一区| 久久久久99精品成人片我成大片| 色呦呦一区二区三区| 小泽玛利亚一区二区三区视频| 欧美专区日韩专区| 中文字幕丰满人伦在线| 欧美日韩三级一区| 中文字幕一区二区三区四区免费看| 欧美日韩国产经典色站一区二区三区| 在线免费观看高清视频| 91精品国产91综合久久蜜臀| 亚洲精品综合网| 亚洲级视频在线观看免费1级| 青青草免费观看免费视频在线| 亚洲视频axxx| 福利视频在线| 欧美亚洲国产日本| 久久精品 人人爱| 超碰在线97av| 国产精品片aa在线观看| 亚洲一区三区视频在线观看| 欧美/亚洲一区| 国产亚洲天堂网| 经典一区二区三区| 中文字幕一区二区久久人妻网站| 国产亚洲人成网站| 91精品国产高清一区二区三蜜臀| 婷婷久久综合九色综合伊人色| 午夜视频网站在线观看| 日韩一区二区三区四区五区六区| 天天操天天射天天舔| 久久激情视频免费观看| av丝袜在线| 国产拍精品一二三| 欧美爱爱网站| 三年中文高清在线观看第6集| 欧美精品色网| 国产一二三四在线视频| 成人av网站大全| 国产又粗又长又黄的视频| 天天综合日日夜夜精品| 国产一区二区自拍视频| 亚洲精品国产拍免费91在线| 久操视频在线免费播放| 国产成+人+综合+亚洲欧美丁香花| 欧美成年网站| 无遮挡亚洲一区| 日韩视频二区| 日本少妇一区二区三区| 久久精品网站免费观看| 国产亚洲精品久久久久久无几年桃| 欧美一a一片一级一片| 日本免费一区视频| 免费av在线一区| jizz久久久久久| 免费av在线一区二区| 女人香蕉久久**毛片精品| 日本中文字幕高清| 2020国产精品自拍| 久久精品国产亚洲AV无码麻豆| 欧美人牲a欧美精品| 黄上黄在线观看| 91精品成人久久| av一级亚洲| 路边理发店露脸熟妇泻火| 蜜臀av一区二区在线免费观看| 成年人在线观看av| 午夜亚洲福利老司机| 亚洲av无码乱码国产精品久久| 爱福利视频一区| 色综合.com| 亚洲欧洲一区二区在线观看| 久久一区国产| 中文字幕xxx| 欧美日韩国产影院| 三级在线观看网站| 91精品国产99| 风间由美中文字幕在线看视频国产欧美| 久久艳妇乳肉豪妇荡乳av| 伊人成年综合电影网| 蜜臀一区二区三区精品免费视频| 久久久蜜桃精品| 成人公开免费视频| 日韩成人在线播放| 麻豆国产在线| 欧美日韩中文国产一区发布| 国产欧美一级| 内射中出日韩无国产剧情| 黄色一区二区三区| 日韩欧美亚洲系列| 国产成人精品久久| 欧美精品乱码| 美女网站色免费| 最近日韩中文字幕| 国产片在线播放| 欧美精品在线看| jizz性欧美23| 欧美 激情 在线| 日本一区二区成人在线| 国产精品国产一区二区三区四区| xvideos国产精品| 欧美电影在线观看一区| 国产精品igao激情视频| 成人网页在线观看| 亚洲黄色免费观看| 永久555www成人免费| 日韩成人免费av| 99热都是精品| 不卡视频在线观看| 欧美brazzers| 日韩中文字幕在线看| 日本精品在线播放 | av成人免费网站| 亚洲精品一区二区三区香蕉 | 在线播放一区| 老头老太做爰xxx视频| 91精品国产色综合久久久蜜香臀| heyzo高清中文字幕在线| 农村寡妇一区二区三区| 蜜臀av亚洲一区中文字幕| 爱爱视频免费在线观看| 日韩国产欧美精品在线| 成人激情视屏| 大伊香蕉精品视频在线| 久久久久久日产精品| 国产精品久久婷婷| 91av在线网站| 正在播放日韩欧美一页| 亚洲一区二区观看| 欧美一区二区人人喊爽| 中文在线资源| 国产免费色视频| 91在线免费视频观看| 亚洲在线观看av| 18性欧美xxxⅹ性满足| 99久久综合| 一级性生活毛片| 欧美一区二区精品在线| 成人福利视频| 99热久久这里只有精品| 国产精品久久久久影视| 黄色片一区二区三区|