精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲新中文字幕| 精品日韩中文字幕| 99c视频在线| 黄色在线免费观看| 色综合久久一区二区三区| 制服丝袜亚洲精品中文字幕| 国产一二三在线视频| 国产在线视频网站| 国产老女人精品毛片久久| 91国产在线精品| а天堂中文在线资源| 成人知道污网站| 欧美三级日本三级少妇99| 日韩视频 中文字幕| 你懂的在线播放| 国产一区二区三区av电影| 2019中文字幕在线| 男人av资源站| 女人丝袜激情亚洲| 精品免费视频一区二区| 日日躁夜夜躁aaaabbbb| 超碰99在线| 亚洲素人一区二区| 欧美视频观看一区| 国产成人强伦免费视频网站| 91福利区在线观看| 亚洲色图丝袜美腿| 亚洲第一综合| 国产一区精品| 91视频免费播放| 国产精品免费区二区三区观看| 日本一区二区三区久久| 亚洲美女一区| 久久久视频精品| 日韩福利小视频| 不卡av一区二区| 亚洲性猛交xxxxwww| 91黄色免费视频| 91精品国产乱码久久久竹菊| 91精品中文字幕一区二区三区| 搡女人真爽免费午夜网站| 天堂网在线最新版www中文网| 一区二区三区四区激情| 小说区视频区图片区| 日本免费视频在线观看| 亚洲国产精品成人综合| 日韩av高清| 成人亚洲综合天堂| 欧美激情综合在线| 亚洲成人自拍| 午夜小视频在线| 国产精品亲子伦对白| 亚洲不卡中文字幕| 裸体xxxx视频在线| 国产日韩精品视频一区| 欧美影视一区二区| 久久精品a一级国产免视看成人| 97se亚洲国产综合自在线观| 久久99九九| 精品乱码一区二区三四区视频 | 日本韩国欧美国产| 日本999视频| 国产91亚洲精品久久久| 欧美日韩1区2区| 97超碰人人看| 99精品国产一区二区三区2021| 精品久久国产字幕高潮| 亚洲精品乱码久久久久久蜜桃图片| 成人香蕉社区| 亚洲人成亚洲人成在线观看| 国产午夜精品久久久久久久久| 久久精品高清| 欧美成人网在线| 国产精品二区一区二区aⅴ| 亚洲欧洲另类| 日韩免费观看高清| 91肉色超薄丝袜脚交一区二区| 经典一区二区三区| 高清视频一区二区三区| 天天综合天天综合| 国产欧美日韩激情| 成人在线免费观看网址| 青青青免费在线视频| 色噜噜偷拍精品综合在线| 国产一伦一伦一伦| 一区二区三区在线免费看| 亚洲精品天天看| 国产人与禽zoz0性伦| 中文在线播放一区二区| 97久久国产精品| 中文无码av一区二区三区| 国产在线乱码一区二区三区| 精品乱码一区二区三区| 888av在线| 亚洲成av人片一区二区梦乃| 国产免费人做人爱午夜视频| 国产精品日韩精品在线播放| 亚洲精品美女视频| 免费中文字幕日韩| 亚洲影视综合| 亚洲精品日韩av| 免费在线看v| 亚洲黄色小视频| 成年人在线观看视频免费| 日本在线视频一区二区三区| 亚洲欧美成人一区二区在线电影| 欧美特黄一级片| 久久国产毛片| 国产伦精品一区二区三毛| 婷婷在线视频| 一本到三区不卡视频| 女女调教被c哭捆绑喷水百合| 国产毛片一区二区三区| 久久6免费高清热精品| 久操视频在线免费观看| 成人精品电影在线观看| 亚洲一一在线| 自拍偷自拍亚洲精品被多人伦好爽| 欧美一级夜夜爽| 狂野欧美性猛交| 三级不卡在线观看| 国产美女在线精品免费观看| 成人三级网址| 欧美日韩电影一区| av电影网站在线观看| 国产视频一区三区| 国产精品久久久久久久久久直播| 麻豆网站在线观看| 欧美视频在线观看一区二区| 黄色aaa视频| 亚洲在线电影| 精品一区二区三区视频日产| 丁香花视频在线观看| 欧美一区二区在线播放| 午夜成人亚洲理伦片在线观看| 久久一区国产| 欧美一区二区在线| 精品91久久| 亚洲欧美一区二区三区四区| 久久国产精品免费看| k8久久久一区二区三区| 野外做受又硬又粗又大视频√| 欧美影院在线| 精品中文字幕视频| a视频免费在线观看| 亚洲品质自拍视频| 日本黄色三级网站| 欧美一区91| 97超碰在线播放| 欧洲黄色一区| 亚洲成人网在线观看| 国产精品6666| 91丨porny丨首页| 久久无码高潮喷水| 激情五月综合| 国产美女精彩久久| 性欧美1819sex性高清大胸| 日韩一区二区三区电影在线观看 | 69174成人网| 在线观看h网| 欧美精品一区二区三区视频| 日本少妇激情舌吻| 久久影视一区二区| 91蝌蚪视频在线观看| 色狮一区二区三区四区视频| 国产有码一区二区| av免费在线免费| 亚洲国产成人精品女人久久久| 国产69精品久久久久久久久久| 91美女精品福利| 手机看片福利日韩| 91tv精品福利国产在线观看| av一区和二区| 成人美女黄网站| 俺去了亚洲欧美日韩| 精品人妻一区二区三区浪潮在线| 亚洲成人av福利| 午夜理伦三级做爰电影| 另类中文字幕网| 久久手机在线视频| 国产99久久精品一区二区300| 国产精品小说在线| xxx性欧美| 一区二区三区视频观看| 成人1区2区3区| 一本大道久久a久久精品综合 | 亚洲国产日韩a在线播放| 蜜桃精品成人影片| 加勒比av一区二区| 日日橹狠狠爱欧美超碰| 成人av国产| 国产91精品入口17c| 小视频免费在线观看| 日韩中文第一页| 午夜在线视频免费| 欧美精品vⅰdeose4hd| 久久久久久久黄色片| 国产精品青草综合久久久久99| 99riav国产精品视频| 丝袜诱惑制服诱惑色一区在线观看 | 天天综合永久入口| 欧美日韩国产首页在线观看| 日本一级黄色大片| 国产精品女同一区二区三区| 色综合久久五月| 激情综合五月婷婷| 成年人视频在线免费| 黄色欧美成人| 亚洲图片欧洲图片日韩av| 老司机成人在线| 亚洲一区二区免费| japanese23hdxxxx日韩| 欧美激情一区二区三区成人| 国产三级在线| 亚洲黄色片网站| www.日韩高清| 337p亚洲精品色噜噜噜| 亚洲欧美一二三区| 激情成人中文字幕| 麻豆亚洲av成人无码久久精品| 午夜一区在线| 51xx午夜影福利| 久久视频国产| 亚洲国产高清国产精品| 日本精品影院| 国产精品手机在线| 精品一区二区三区视频在线播放| 国产精品美女免费看| 亚洲人体影院| 78色国产精品| av中文字幕在线观看第一页 | 激情综合色综合久久综合| 大陆极品少妇内射aaaaa| 亚洲国产高清一区二区三区| 欧美 国产 精品| 999国产精品永久免费视频app| 奇米影视首页 狠狠色丁香婷婷久久综合| 99re8这里有精品热视频免费 | 一道在线中文一区二区三区| 国产欧美日韩亚洲| 国产精品国产| 国产亚洲情侣一区二区无| 欧美专区一区| 国产精品国产精品国产专区不卡| 日韩精品成人在线观看| 91国产在线免费观看| 免费精品一区二区三区在线观看| 成人a免费视频| 国产精品一区三区在线观看| 国产免费久久av| 日韩三级一区| 91久久在线播放| 91精品久久久久久综合五月天| 成人18视频| 狠狠久久伊人| 久久一区二区精品| 视频一区中文| 亚洲免费不卡| 希岛爱理一区二区三区| 狠狠噜天天噜日日噜| 亚洲视频一区| 国产精品欧美激情在线观看| 天堂久久一区二区三区| 91日韩视频在线观看| 黄色小说综合网站| 无码人妻丰满熟妇啪啪网站| av网站一区二区三区| 99久久久久久久久久| 国产欧美综合在线| 好吊日在线视频| 亚洲成人资源网| 国产成人无码av| 欧美日韩美女一区二区| 国内精品偷拍视频| 日韩精品在线免费观看| 成人网视频在线观看| 久久国产精品久久精品| 蜜桃av在线播放| 国产精品亚洲视频在线观看| 蜜桃在线一区| 免费在线国产精品| 久久精品青草| 国产极品尤物在线| 免费观看在线色综合| 激情小说欧美色图| 国产午夜精品理论片a级大结局| 999福利视频| 亚洲一级二级在线| 中文字幕在线2018| 亚洲第一av网站| 91露出在线| 国模精品系列视频| 亚洲日韩中文字幕一区| 精品久久久久久一区| 91精品电影| 中文字幕乱码人妻综合二区三区| 精品中文字幕一区二区| 在线免费观看污视频| 中文字幕一区三区| 制服.丝袜.亚洲.中文.综合懂色| 337p亚洲精品色噜噜噜| 国模吧精品人体gogo| 欧美激情2020午夜免费观看| yw在线观看| 久久久久久国产精品三级玉女聊斋| 校园春色亚洲色图| 国产精品视频免费观看| 日韩毛片视频| 99色精品视频| 成人免费黄色在线| 午夜精品福利在线视频| 色狠狠色狠狠综合| 日本韩国在线观看| 欧美xxxx做受欧美| 成人在线免费电影网站| 鲁片一区二区三区| 伊人激情综合| 国模大尺度视频| 国产精品成人网| 波多野结衣电车痴汉| 日韩精品在线观| 国产天堂在线播放视频| 成人亚洲激情网| 久久精品高清| 在线观看亚洲色图| 国产午夜精品一区二区 | 欧美三级在线播放| 亚洲日本在线播放| 97精品视频在线| 国产成人精品亚洲线观看| 久久免费一级片| 极品少妇xxxx精品少妇| 日本午夜精品视频| 欧美三级电影精品| av网站无病毒在线| 国产精品wwwwww| 深爱激情久久| 国产v亚洲v天堂无码久久久| 91蜜桃视频在线| 二区视频在线观看| 亚洲精品一区二区三区婷婷月| av男人的天堂在线观看| 国产精品一区在线播放| 亚洲福利一区| 人妻av一区二区| 精品久久久久久国产| 色偷偷在线观看| 97成人精品区在线播放| 婷婷综合电影| 免费黄色福利视频| 久久久蜜桃精品| 免费看污视频的网站| 国产亚洲一区二区精品| 国产经典一区| 亚洲精品偷拍视频| 国产精品白丝jk白祙喷水网站| 欧美三级免费看| 精品久久国产老人久久综合| 爱看av在线| 狼狼综合久久久久综合网| 老妇喷水一区二区三区| 女人黄色一级片| 91精品国产aⅴ一区二区| 亚洲91av| 精品一区二区不卡| 麻豆久久一区二区| 欧美国产在线看| 亚洲国产精品小视频| 最新欧美电影| 伊人久久av导航| 国产91丝袜在线播放| 亚洲精品1区2区3区| 国产亚洲a∨片在线观看| 四虎精品在线观看| www.亚洲视频.com| 国产视频一区在线观看| 99热这里只有精品在线观看| 97人人模人人爽人人喊中文字| 国产在视频线精品视频www666| 成年人在线观看视频免费| 亚洲精品亚洲人成人网在线播放| 天天干天天操av| 国产精品人成电影在线观看| 欧美激情亚洲| 少妇真人直播免费视频| 91精品国产aⅴ一区二区| 忘忧草在线日韩www影院| 亚洲午夜激情| 26uuu精品一区二区三区四区在线| 中文字幕一区二区久久人妻| 欧美日韩国产成人在线观看| 蜜臀久久99精品久久一区二区| 91精品999| 狠狠色狠狠色综合日日小说| 黄色网在线免费看| 久久大片网站| 国产一区91精品张津瑜| 黄色av一级片| 久久乐国产精品| 91亚洲成人|