99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

RK3588 WiFi攝像頭推流實戰(zhàn):V4L2采集與硬編碼

RK3588 WiFi攝像頭推流實戰(zhàn):V4L2采集與硬編碼 1. 為什么選 RK3588 做 WiFi 無線攝像頭推流方案選型與硬件準(zhǔn)備先聊點實在的。我這個項目最開始其實不是非 RK3588 不可當(dāng)時手里同時有樹莓派 4B 和一塊全志 H6 的開發(fā)板都試過做 USB 攝像頭采集推流。結(jié)果怎么說呢要么是編碼性能拉胯1080p 推流 CPU 直接燒到 80% 以上要么是 WiFi 吞吐不穩(wěn)定畫面時不時卡成幻燈片。后來換了 RK3588整體體驗完全不一樣了。RK3588 這芯片在嵌入式開發(fā)圈里這兩年熱度一直很高8 核 ARM 架構(gòu)4 個 Cortex-A76 大核加 4 個 Cortex-A55 小核算力相當(dāng)充裕而且自帶 NPU雖然這個項目暫時沒用到 AI 推理但后續(xù)如果想在端側(cè)跑個目標(biāo)檢測、人臉識別再做智能推流硬件底子是現(xiàn)成的。更重要的是RK3588 內(nèi)置了 VPU視頻編解碼單元硬編 H.264/H.265 都是常規(guī)操作這樣 CPU 就能從編碼這種重活里解放出來哪怕 4K 分辨率的視頻流推出去系統(tǒng)負載也能保持在一個很健康的水位。再一個原因就是接口資源。RK3588 的 MIPI-CSI 接口支持多路攝像頭輸入USB 3.0 Host 口也夠多這意味著無論是接 MIPI 攝像頭模組還是免驅(qū) UVC 攝像頭都非常靈活。我這套方案用的是一個普通的 USB 攝像頭走的標(biāo)準(zhǔn) V4L2 協(xié)議根本不需要額外寫驅(qū)動插上就能識別對新手來說特別友好。硬件準(zhǔn)備清單如下硬件/軟件型號/版本說明開發(fā)板RK3588 開發(fā)板我用的是某國產(chǎn)廠商的核心板加底板方案8GB 或 16GB 內(nèi)存都行存儲建議 32GB 以上攝像頭USB UVC 免驅(qū)攝像頭支持 1080p選 YUYV/MJPEG 輸出格式的兼容性好系統(tǒng)Ubuntu 22.04RK3588 移植版或者 Debian內(nèi)核 5.10 以上自帶 V4L2 框架WiFiUSB 無線網(wǎng)卡或板載 WiFi 模塊支持 AP/STA 模式我用的板載 WiFi 6 模塊實測吞吐穩(wěn)定軟件GStreamer、FFmpeg、VLC用于驗證核心推流工具下面細說提示RK3588 的很多開發(fā)板出廠帶的是 Android 系統(tǒng)做嵌入式 Linux 開發(fā)之前記得先刷成 Ubuntu 或 Debian 的固件網(wǎng)上針對各廠商板子的移植教程已經(jīng)比較成熟了實在不行用系統(tǒng)自帶的 SDK 自己編一個也行只是耗時比較長。這里想特別強調(diào)一下選 USB UVC 攝像頭而不是 MIPI 攝像頭的原因。MIPI-CSI 攝像頭的畫質(zhì)上限確實更高但驅(qū)動適配是個大坑不同廠商的 sensor 芯片驅(qū)動差異很大很多 RK3588 的板子即使有 DTS 配置也要反復(fù)調(diào)。USB UVC 攝像頭走的是標(biāo)準(zhǔn)協(xié)議Linux 內(nèi)核里已經(jīng)有現(xiàn)成的uvcvideo驅(qū)動插上就能枚舉出/dev/video0對做應(yīng)用層開發(fā)的人來說省了不止一個晚上的折騰時間。2. V4L2 攝像頭采集鏈路從設(shè)備枚舉到原始幀讀取V4L2 的全稱是 Video for Linux 2是 Linux 內(nèi)核里一套標(biāo)準(zhǔn)化的視頻設(shè)備驅(qū)動框架。你可以理解成攝像頭在 Linux 系統(tǒng)里的普通話協(xié)議——不管底層是什么 sensor、什么接口上層應(yīng)用只要按 V4L2 的規(guī)范操作/dev/videoX這個設(shè)備節(jié)點就能拿到圖像數(shù)據(jù)。這種設(shè)計思路和 POSIX 文件操作很像一切都是文件一切都是標(biāo)準(zhǔn)接口。2.1 先用命令行確認攝像頭能被系統(tǒng)正確識別動手寫代碼之前先跑幾個命令確認攝像頭工作正常。插上 USB 攝像頭后在 RK3588 的終端里執(zhí)行l(wèi)susb ls /dev/video* v4l2-ctl --list-devices正常情況下v4l2-ctl --list-devices會輸出類似這樣的內(nèi)容USB Camera (1bcf:2c87): /dev/video0接著查看攝像頭支持的像素格式和分辨率v4l2-ctl -d /dev/video0 --list-formats-ext輸出里如果能看到Y(jié)UYV或者MJPG就說明攝像頭在 UVC 協(xié)議下工作正常。這里有個重要概念YUYV 是無壓縮的裸數(shù)據(jù)格式一幀 1080p 圖像在 YUYV 下大約是1920 * 1080 * 2字節(jié)算下來差不多 4MB如果以 30fps 采集每秒數(shù)據(jù)量是 120MB 以上這個數(shù)據(jù)量直接扔到網(wǎng)絡(luò)上是不現(xiàn)實的。MJPG 是攝像頭內(nèi)部做了 JPEG 壓縮后輸出的格式同樣一幀 1080p 可能只需要 100KB 到 300KB流量壓力小很多但代價是畫質(zhì)有損、解碼需要算力。所以這里要鋪墊一個貫穿整個項目的判斷攝像頭采集端到底輸出什么格式?jīng)Q定了后面推流鏈路的復(fù)雜度。我的建議是如果攝像頭支持 MJPG優(yōu)先用 MJPG 做網(wǎng)絡(luò)傳輸如果只支持 YUYV那就老老實實在板子上做硬編碼壓縮別想著裸流直接推。2.2 V4L2 編程的基本套路打開設(shè)備、設(shè)置格式、申請緩沖區(qū)、啟動采集命令行驗證完下面進入正式的主題——用 C 語言寫一個 V4L2 采集程序。這里先給出完整可運行的代碼然后逐段拆解關(guān)鍵邏輯。#include stdio.h #include stdlib.h #include string.h #include fcntl.h #include unistd.h #include errno.h #include sys/ioctl.h #include sys/mman.h #include linux/videodev2.h #define DEVICE_PATH /dev/video0 #define WIDTH 1920 #define HEIGHT 1080 #define BUFFER_COUNT 4 struct buffer_info { void *start; size_t length; }; static struct buffer_info buffers[BUFFER_COUNT]; static int xioctl(int fd, unsigned long request, void *arg) { int r; do { r ioctl(fd, request, arg); } while (r -1 errno EINTR); return r; } int main(void) { int fd open(DEVICE_PATH, O_RDWR | O_NONBLOCK, 0); if (fd 0) { perror(open video device failed); return -1; } struct v4l2_format fmt; memset(fmt, 0, sizeof(fmt)); fmt.type V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.width WIDTH; fmt.fmt.pix.height HEIGHT; fmt.fmt.pix.pixelformat V4L2_PIX_FMT_YUYV; fmt.fmt.pix.field V4L2_FIELD_NONE; if (xioctl(fd, VIDIOC_S_FMT, fmt) 0) { perror(set format failed); close(fd); return -1; } struct v4l2_requestbuffers req; memset(req, 0, sizeof(req)); req.count BUFFER_COUNT; req.type V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory V4L2_MEMORY_MMAP; if (xioctl(fd, VIDIOC_REQBUFS, req) 0) { perror(request buffers failed); close(fd); return -1; } for (int i 0; i BUFFER_COUNT; i) { struct v4l2_buffer buf; memset(buf, 0, sizeof(buf)); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; buf.index i; if (xioctl(fd, VIDIOC_QUERYBUF, buf) 0) { perror(query buffer failed); close(fd); return -1; } buffers[i].length buf.length; buffers[i].start mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset); if (buffers[i].start MAP_FAILED) { perror(mmap failed); close(fd); return -1; } } enum v4l2_buf_type type V4L2_BUF_TYPE_VIDEO_CAPTURE; for (int i 0; i BUFFER_COUNT; i) { struct v4l2_buffer buf; memset(buf, 0, sizeof(buf)); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; buf.index i; if (xioctl(fd, VIDIOC_QBUF, buf) 0) { perror(queue buffer failed); return -1; } } if (xioctl(fd, VIDIOC_STREAMON, type) 0) { perror(stream on failed); close(fd); return -1; } for (int frame_count 0; frame_count 300; frame_count) { fd_set fds; FD_ZERO(fds); FD_SET(fd, fds); struct timeval tv; tv.tv_sec 2; tv.tv_usec 0; int sel select(fd 1, fds, NULL, NULL, tv); if (sel 0) { perror(select failed); break; } if (sel 0) { fprintf(stderr, select timeout, no frame\n); continue; } struct v4l2_buffer buf; memset(buf, 0, sizeof(buf)); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; if (xioctl(fd, VIDIOC_DQBUF, buf) 0) { perror(dequeue buffer failed); break; } // 到這里buffers[buf.index].start 就是一幀圖像數(shù)據(jù) // 幀大小為 buf.bytesused 字節(jié) printf(frame %d: size%d bytes\n, frame_count, buf.bytesused); // 實際項目中這里會把 buf 里的數(shù)據(jù)交給編碼器/網(wǎng)絡(luò)模塊處理 if (xioctl(fd, VIDIOC_QBUF, buf) 0) { perror(requeue buffer failed); break; } } type V4L2_BUF_TYPE_VIDEO_CAPTURE; xioctl(fd, VIDIOC_STREAMOFF, type); for (int i 0; i BUFFER_COUNT; i) { munmap(buffers[i].start, buffers[i].length); } close(fd); return 0; }2.3 這段采集代碼里幾個值得琢磨的細節(jié)先看打開設(shè)備那一步。我這里用了O_NONBLOCK非阻塞模式然后靠select()來等待幀數(shù)據(jù)準(zhǔn)備好。如果不用非阻塞模式VIDIOC_DQBUF會在沒有幀數(shù)據(jù)時一直卡住主線程就被堵死了。用select()的好處是能設(shè)置超時時間一旦攝像頭異常比如線松了、設(shè)備被占用程序不至于掛死可以及時報錯處理。實際項目里我還會把超時后的重連邏輯加進去比如連續(xù)超時 5 次就自動重新打開設(shè)備這對長時間運行的監(jiān)控設(shè)備特別重要。然后是緩沖區(qū)機制。V4L2 經(jīng)典的REQBUFS - QUERYBUF - mmap - QBUF - DQBUF流程本質(zhì)上是一個生產(chǎn)者消費者模型攝像頭硬件是生產(chǎn)者往 DMA 緩沖區(qū)里寫圖像數(shù)據(jù)應(yīng)用層是消費者從緩沖區(qū)里把數(shù)據(jù)取走。用多個緩沖區(qū)這里設(shè)了 4 個能避免一幀數(shù)據(jù)還沒處理完下一幀就被覆蓋的情況。緩沖區(qū)數(shù)量也不是越多越好多了占內(nèi)存少了容易丟幀4 到 8 個是比較合理的區(qū)間。還有一個常被忽略的坑VIDIOC_S_FMT設(shè)置格式不保證一定成功特別是某些攝像頭不支持你指定的分辨率和像素格式時驅(qū)動會靜默改成自己支持的最接近值。所以設(shè)置完格式之后一定要再調(diào)用VIDIOC_G_FMT讀回來確認一下實際生效的參數(shù)不然你按 1080p 分配緩沖區(qū)攝像頭卻輸出 640x480后面全是內(nèi)存越界問題排查起來非常酸爽。3. 推流方案的技術(shù)選型GStreamer 硬編碼管線 vs FFmpeg 軟編碼采集到原始幀之后畫面數(shù)據(jù)是有了但離WiFi 推流還有一道關(guān)鍵工序編碼成 H.264/H.265 再封裝成適合網(wǎng)絡(luò)傳輸?shù)牧鞲袷絉TSP/RTP/FLV。市面上主流的選擇就是 GStreamer 和 FFmpeg 這兩個框架我這次兩個方案都實測過下面分別說說優(yōu)缺點和適用場景。3.1 GStreamer RK3588 硬件編碼性能和效率的首選RK3588 的 VPU 在 GStreamer 里對應(yīng)的插件是mpph264encMpp 是 Rockchip 媒體處理平臺的簡稱。用 GStreamer 拼一條推流管線核心思路就是v4l2src 采集視頻 - 像素格式轉(zhuǎn)換 - mpph264enc 硬編碼 - rtph264pay 打包 - udpsink 或 rtsp 服務(wù)端一條完整的命令行推流示例推 UDP 到局域網(wǎng)內(nèi)的一臺 PC 上用 VLC 接收gst-launch-1.0 v4l2src device/dev/video0 ! \ video/x-raw,width1920,height1080,framerate30/1 ! \ videoconvert ! \ video/x-raw,formatI420 ! \ mpph264enc bitrate2000000 ! \ h264parse ! \ rtph264pay config-interval1 pt96 ! \ udpsink host192.168.1.100 port5000這里解釋一下每個插件的用途v4l2src從 V4L2 設(shè)備采集視頻幀。注意如果你把攝像頭格式設(shè)成了 MJPG這里還需要插入jpegdec解壓成原始圖像否則后面的編碼器不認。常見的坑是視頻格式?jīng)]有協(xié)商好看到Internal data stream error多半就是格式協(xié)商不通過解決辦法是在 Caps 里明確指定video/x-raw的格式和分辨率。videoconvert做像素格式轉(zhuǎn)換。攝像頭的輸出是 YUYV而 H.264 編碼器輸入通常要求 I420這中間差一步轉(zhuǎn)換。別小看這個插件它在 CPU 上做轉(zhuǎn)換的時候也有開銷如果能直接在采集端拿到 I420 格式會好一點但大部分 UVC 攝像頭原生只給 YUYV 或 MJPEG。mpph264encRK3588 的硬編碼器bitrate參數(shù)直接控制碼率。我實測 2Mbps 下 1080p30 的畫面在室內(nèi)場景基本上畫質(zhì)能接受運動劇烈一點的場景建議提到 4Mbps。h264parsertph264pay把 H.264 裸流封裝成 RTP 包這樣才能走 UDP 推給播放器。udpsink把 RTP 包發(fā)到指定主機的指定端口。這種 GStreamer 管線的好處是完全不用寫代碼一條命令就能跑起來而且硬編碼對 CPU 占用極低。我在 RK3588 上實測1080p30 硬編碼推流時四個 A76 大核的 CPU 占用率加起來不超過 15%大部分時候維持在 5% 以內(nèi)真的是殺雞用牛刀級別的輕松。3.2 FFmpeg x264 軟編碼兼容性優(yōu)先的備選方案如果你不想在板子上裝一堆 GStreamer 插件或者你的攝像頭輸出的格式比較奇葩FFmpeg 是更大眾的選擇。在 RK3588 上FFmpeg 也可以調(diào)用 Rockchip 的硬件編碼器但需要專門編譯帶--enable-rkmpp選項的版本很多發(fā)行版自帶的 FFmpeg 默認不啟用這個能力。不帶硬件加速的話直接用軟件 x264 編碼也能跑命令如下ffmpeg -f v4l2 -input_format yuyv422 -video_size 1920x1080 -framerate 30 \ -i /dev/video0 -c:v libx264 -preset veryfast -b:v 2M \ -f rtsp rtsp://192.168.1.100:8554/live這里-preset veryfast是為了降低編碼延遲x264 的編碼速度直接決定實時性表現(xiàn)。我的實測結(jié)果是在 RK3588 上用veryfast檔位編碼 1080p30CPU 占用大約 30% 到 40%比硬編碼高不少但還在可接受范圍。如果你用的是性能更弱的板子這個方案可能就撐不住了。FFmpeg 方案最大的優(yōu)勢是協(xié)議支持全面。不管你要推 RTSP、RTMP 還是直接錄成 MP4 文件FFmpeg 一個工具全搞定而且參數(shù)調(diào)起來非常直觀適合快速驗證。但它在低延遲場景下表現(xiàn)不如 GStreamer 的純 RTP 管線靈活因為 FFmpeg 的 RTSP 服務(wù)模式是轉(zhuǎn)發(fā)模式內(nèi)部會有緩沖延遲通常會比 GStreamer 的 UDP 直推高一截。3.3 我最終的選擇雙路并行策略這個項目最終我采用了GStreamer 做主干推流FFmpeg 做輔助錄制的組合方案。主干推流用 GStreamer mpph264enc 保證低延遲和低 CPU 占用同時在板子上定時用 FFmpeg 拉取本地的 RTSP 流做切片錄制這樣既滿足了實時監(jiān)看的延遲要求又保證了關(guān)鍵時刻有錄像留存。這種一魚兩吃的做法在真實項目里非常常見因為運維監(jiān)控場景既要看得見也要留得住。4. WiFi 推流的網(wǎng)絡(luò)痛點為什么局域網(wǎng)延遲時好時壞以及如何優(yōu)化攝像頭數(shù)據(jù)采集和編碼都搞定之后最大的不可控因素就剩 WiFi 了。我最初在局域網(wǎng)里用普通 2.4GHz WiFi 測試的時候延遲經(jīng)常在 200ms 到 2 秒之間反復(fù)橫跳畫面時不時卡頓一下一度以為是自己代碼寫的太爛后來排查發(fā)現(xiàn)根因在網(wǎng)絡(luò)這一層。4.1 WiFi 頻段選擇對推流質(zhì)量的影響2.4GHz 頻段的穿透能力確實好但干擾源也多——藍牙、微波爐、鄰居的路由器全擠在 2.4GHz 這不到 100MHz 的頻譜里環(huán)境稍微復(fù)雜一點WiFi 吞吐量就會劇烈抖動。而視頻流最怕的就是吞吐量抖動因為直播類應(yīng)用對帶寬是持續(xù)占滿型的需求不像網(wǎng)頁瀏覽那樣有突發(fā)性容忍度。我實測下來的數(shù)據(jù)WiFi 環(huán)境1080p30 推流延遲卡頓情況2.4GHz普通路由器多設(shè)備共存300ms - 2s頻繁輕微卡頓偶爾爆卡5GHz路由器較近3 米內(nèi)100ms - 300ms基本流暢5GHz穿一堵墻300ms - 800ms輕微卡頓建議是做 WiFi 推流時板子和路由器之間盡量用 5GHz 頻段并且縮短物理距離。如果只能走 2.4GHz那就降低推流碼率和分辨率比如 720p 加 1Mbps 碼率老老實實換體驗。另外注意一個容易忽略的點RK3588 開發(fā)板上的無線網(wǎng)卡很多是同時支持 AP 和 STA 模式的也就是板和手機可以組成一個獨立的 WiFi 熱點網(wǎng)絡(luò)。在戶外沒有路由器的時候可以讓板子開一個 AP手機連上板的 WiFi 熱點就能直接看視頻流。這種無基礎(chǔ)設(shè)施的玩法在無人機圖傳、車載監(jiān)控等場景特別實用而且因為跳過了路由器轉(zhuǎn)發(fā)數(shù)據(jù)路徑更短延遲反而更低。4.2 TCP 還是 UDP這是個問題推流傳輸層協(xié)議的選擇同樣關(guān)鍵。GStreamer 里如果推 RTSP底層默認走 TCP可靠傳輸?shù)貍鳈C制會帶來額外延遲如果要低延遲可以用 UDP 直推不可靠傳輸丟包就直接丟幀但不卡頓。TCP 和 UDP 在視頻推流場景下的表現(xiàn)差異非常大。TCP 雖然不會丟包但一旦網(wǎng)絡(luò)出現(xiàn)瞬時擁塞TCP 的擁塞控制算法會主動降低發(fā)送速率導(dǎo)致視頻延遲節(jié)節(jié)攀升畫面雖然不花屏但越來越卡頓其實是延遲越來越大。UDP 則不會做這種退避丟掉的包直接丟棄播放端畫面雖然可能偶發(fā)花屏、馬賽克但時間線上是實時的不會有延遲持續(xù)積累的問題。我的經(jīng)驗是內(nèi)網(wǎng)可控環(huán)境用 UDP廣域網(wǎng)環(huán)境用 TCP。內(nèi)網(wǎng)丟包率極低UDP 完全夠用公網(wǎng)上丟包不可避免TCP 重傳至少保證畫面完整延遲高一點也能接受。4.3 碼率匹配策略別讓編碼輸出和網(wǎng)絡(luò)帶寬打架很多人做推流時只關(guān)注編碼參數(shù)忽略了網(wǎng)絡(luò)帶寬這個木桶短板。RK3588 的 mpph264enc 設(shè)置的固定碼率在 2Mbps但如果 WiFi 的有效吞吐只有 1.5Mbps那畫面必然卡頓。這里建議在應(yīng)用層做一層自適應(yīng)碼率控制定期檢測網(wǎng)絡(luò)的往返時延RTT和發(fā)送隊列的堆積情況如果 RTT 持續(xù)偏高就把編碼器的bitrate參數(shù)動態(tài)調(diào)低例如從 2Mbps 降到 1.2Mbps讓畫面更流暢。在 GStreamer 里可以通過mpph264enc的bitrateproperty 動態(tài)設(shè)置gst-launch-1.0 v4l2src device/dev/video0 ! \ video/x-raw,width1280,height720,framerate30/1 ! \ videoconvert ! video/x-raw,formatI420 ! \ mpph264enc bitrate1200000 ! \ h264parse ! rtph264pay config-interval1 pt96 ! \ udpsink host192.168.1.100 port50004.4 網(wǎng)絡(luò)緩沖區(qū)的隱藏雷區(qū)還有一個坑我從沒見文檔里寫明過GStreamer 的udpsink插件默認有一個發(fā)送緩沖區(qū)如果網(wǎng)絡(luò)擁堵導(dǎo)致數(shù)據(jù)堆積緩沖區(qū)會被填滿然后udpsink會開始丟包。這種行為本身沒問題但會導(dǎo)致畫面突然出現(xiàn)大范圍花屏。解決辦法是通過udpsink的max-lateness和qos參數(shù)控制發(fā)送節(jié)奏讓過期的幀直接丟棄而不是堆積等待。加入 QoS服務(wù)質(zhì)量機制后播放端收到的幀是最新鮮的延遲會明顯下降代價是網(wǎng)絡(luò)差時幀率會掉。命令行加參數(shù)的方式udpsink host192.168.1.100 port5000 qostrue max-lateness10000000這里的max-lateness單位是納秒10000000納秒就是 10ms超過這個時間的幀直接丟。經(jīng)過這樣調(diào)整后WiFi 環(huán)境下的畫面流暢度和延遲一致性提升很明顯。5. 完整代碼實現(xiàn)推流主程序的架構(gòu)設(shè)計和關(guān)鍵模塊拆解前面講了不少概念和命令行方案下面寫一個稍微體面的 C 程序把這些要素整合起來。這個程序不依賴 GStreamer 的命令行而是直接用 V4L2 采集 RKMPP 硬編碼 RTP 打包可以理解成一個精簡版的推流器。5.1 程序整體架構(gòu)整個推流程序分四個線程采集線程V4L2 循環(huán)取幀放進幀隊列。編碼線程從幀隊列取出原始幀交給 RKMPP 硬編碼為 H.264放進編碼幀隊列。發(fā)送線程從編碼幀隊列取 H.264 數(shù)據(jù)封裝成 RTP 包通過 UDP socket 發(fā)出。控制線程響應(yīng)命令行輸入如修改碼率、打印狀態(tài)實現(xiàn)簡單的運行管理。用多線程而非單線程循環(huán)是因為采集、編碼和網(wǎng)絡(luò)發(fā)送三個環(huán)節(jié)的速度不恒等如果串行執(zhí)行任何一環(huán)變慢都會拖垮整條鏈路。用隊列解耦之后即使網(wǎng)絡(luò)短暫擁塞編碼線程也可以繼續(xù)工作把數(shù)據(jù)積壓在編碼幀隊列里一旦網(wǎng)絡(luò)恢復(fù)發(fā)送線程能快速追上進度。5.2 關(guān)鍵結(jié)構(gòu)體和隊列封裝#include pthread.h #include semaphore.h #include stdint.h #include rga/RgaApi.h #include rockchip/rk_mpi.h #define MAX_QUEUE_SIZE 8 typedef struct { void *data; size_t size; uint64_t pts; } frame_t; typedef struct { frame_t frames[MAX_QUEUE_SIZE]; int head; int tail; int count; pthread_mutex_t lock; sem_t empty_slots; sem_t full_slots; } frame_queue_t; void queue_init(frame_queue_t *q) { q-head 0; q-tail 0; q-count 0; pthread_mutex_init(q-lock, NULL); sem_init(q-empty_slots, 0, MAX_QUEUE_SIZE); sem_init(q-full_slots, 0, 0); } void queue_push(frame_queue_t *q, frame_t *frame) { sem_wait(q-empty_slots); pthread_mutex_lock(q-lock); q-frames[q-tail] *frame; q-tail (q-tail 1) % MAX_QUEUE_SIZE; q-count; pthread_mutex_unlock(q-lock); sem_post(q-full_slots); } int queue_pop(frame_queue_t *q, frame_t *frame) { sem_wait(q-full_slots); pthread_mutex_lock(q-lock); if (q-count 0) { pthread_mutex_unlock(q-lock); return -1; } *frame q-frames[q-head]; q-head (q-head 1) % MAX_QUEUE_SIZE; q-count--; pthread_mutex_unlock(q-lock); sem_post(q-empty_slots); return 0; }用信號量 互斥鎖組合的方式實現(xiàn)了一個經(jīng)典的有界阻塞隊列。這里沒有用無鎖隊列因為賽道上這幾個線程的數(shù)據(jù)量并不算極端加鎖完全可以接受。如果將來要做 4K 60fps 那種高吞吐場景再考慮無鎖隊列或者環(huán)形緩沖區(qū)也不遲。5.3 采集線程的實現(xiàn)采集線程就是把之前那段 V4L2 代碼放到線程函數(shù)里然后每取到一幀塞進raw_frame_queue。void *capture_thread(void *arg) { // 參數(shù)設(shè)備路徑幀隊列指針 char *dev_path ((char **)arg)[0]; frame_queue_t *q (frame_queue_t *)(((void **)arg)[1]); int fd open(dev_path, O_RDWR | O_NONBLOCK, 0); if (fd 0) { perror(open device failed); return NULL; } // 設(shè)置 1080p YUYV 格式 struct v4l2_format fmt; memset(fmt, 0, sizeof(fmt)); fmt.type V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.width 1920; fmt.fmt.pix.height 1080; fmt.fmt.pix.pixelformat V4L2_PIX_FMT_YUYV; fmt.fmt.pix.field V4L2_FIELD_NONE; xioctl(fd, VIDIOC_S_FMT, fmt); // 讀回實際格式并檢查 struct v4l2_format actual; memset(actual, 0, sizeof(actual)); actual.type V4L2_BUF_TYPE_VIDEO_CAPTURE; xioctl(fd, VIDIOC_G_FMT, actual); if (actual.fmt.pix.width ! 1920 || actual.fmt.pix.height ! 1080) { fprintf(stderr, Warning: actual format is %dx%d\n, actual.fmt.pix.width, actual.fmt.pix.height); } // 申請緩沖區(qū)、mmap、QBUF 等同前文示例代碼 // 采集循環(huán) struct v4l2_buffer buf; for (;;) { fd_set fds; FD_ZERO(fds); FD_SET(fd, fds); struct timeval tv {2, 0}; select(fd 1, fds, NULL, NULL, tv); memset(buf, 0, sizeof(buf)); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; if (xioctl(fd, VIDIOC_DQBUF, buf) 0) { continue; } frame_t frame; frame.data malloc(buf.bytesused); memcpy(frame.data, buffers[buf.index].start, buf.bytesused); frame.size buf.bytesused; frame.pts (uint64_t)((double)clock() / CLOCKS_PER_SEC * 1000); queue_push(q, frame); xioctl(fd, VIDIOC_QBUF, buf); } }這里注意我從 mmap 緩沖區(qū)里memcpy了一份數(shù)據(jù)到堆內(nèi)存然后才入隊。為什么不直接把 mmap 緩沖區(qū)地址傳下去因為緩沖區(qū)在 DQBUF 之后再次 QBUF 時硬件可能立刻往里寫下一幀如果編碼線程還在讀這塊內(nèi)存就會產(chǎn)生數(shù)據(jù)競爭。要么加鎖保護要么拷貝一份我選擇了性價比更高的拷貝方式——內(nèi)存占用多一點但邏輯簡單安全。5.4 編碼線程調(diào)用 RKMPP 硬編碼RKMPPRockchip Media Process Platform是 Rockchip 官方提供的多媒體編程接口。相比直接用 V4L2 的VIDIOC_ENCODER_CMD或者 GStreamer 插件RKMPP 的 API 更貼近底層適合做精細控制。編碼線程的核心代碼void *encode_thread(void *arg) { frame_queue_t *input_q (frame_queue_t *)(((void **)arg)[0]); frame_queue_t *output_q (frame_queue_t *)(((void **)arg)[1]); MppCtx ctx; MppApi *mpi; mpp_create(ctx, mpi); mpp_init(ctx, MPF_CTX_ENC, MPP_VIDEO_CodingAVC); MppEncPrepCfg prep_cfg; memset(prep_cfg, 0, sizeof(prep_cfg)); prep_cfg.width 1920; prep_cfg.height 1080; prep_cfg.format MPP_FMT_YUV420SP; prep_cfg.frame_rate 30; mpi-control(ctx, MPP_ENC_SET_PREP_CFG, prep_cfg); MppEncCodecCfg codec_cfg; memset(codec_cfg, 0, sizeof(codec_cfg)); codec_cfg.codec_type MPP_VIDEO_CodingAVC; codec_cfg.h264.profile 100; codec_cfg.h264.level 40; codec_cfg.h264.cabac_en 1; codec_cfg.h264.cabac_idc 0; codec_cfg.h264.trans_8x8 1; mpi-control(ctx, MPP_ENC_SET_CODEC_CFG, codec_cfg); MppEncRcCfg rc_cfg; memset(rc_cfg, 0, sizeof(rc_cfg)); rc_cfg.rc_mode MPP_RC_CBR; rc_cfg.bps 2000000; rc_cfg.bps_max 2500000; rc_cfg.bps_min 1500000; mpi-control(ctx, MPP_ENC_SET_RC_CFG, rc_cfg); // 幀數(shù)據(jù)搬運到 MPP 緩沖區(qū)并編碼 frame_t raw_frame; while (!stop_flag) { if (queue_pop(input_q, raw_frame) 0) continue; // 將 YUYV 轉(zhuǎn)為 NV12RKMPP 輸入格式 // 這里也可以用 RGA 硬件加速下文會提到 uint8_t *nv12_data convert_yuyv_to_nv12( (uint8_t *)raw_frame.data, 1920, 1080); // 申請 MPP 編碼使用的輸入包 MppPacket packet NULL; mpp_packet_init(packet, nv12_data, 1920 * 1080 * 3 / 2); mpi-encode_put_packet(ctx, packet); MppPacket out_packet NULL; mpi-encode_get_packet(ctx, out_packet); if (out_packet) { frame_t enc_frame; enc_frame.data malloc(mpp_packet_get_size(out_packet)); memcpy(enc_frame.data, mpp_packet_get_data(out_packet), mpp_packet_get_size(out_packet)); enc_frame.size mpp_packet_get_size(out_packet); enc_frame.pts raw_frame.pts; queue_push(output_q, enc_frame); mpp_packet_deinit(out_packet); } free(nv12_data); free(raw_frame.data); mpp_packet_deinit(packet); } mpp_destroy(ctx); return NULL; }5.5 發(fā)送線程RTP 封包和 UDP 發(fā)送RTP 封包這部分H.264 的 NAL 單元如果大于 MTU通常 1500 字節(jié)就需要做分片F(xiàn)U-A否則播放端無法正確重組。這里實現(xiàn)一個簡化的分包邏輯void send_h264_rtp(int sockfd, struct sockaddr_in *dst, uint8_t *nal_data, size_t nal_size, uint32_t *timestamp) { // 跳過 NAL 起始碼 00 00 00 01 或 00 00 01 uint8_t *nal_start nal_data; while (nal_start nal_data nal_size - 4) { if (*(uint32_t *)nal_start 0x00000001 || *(uint32_t *)nal_start 0x00000100) { break; } nal_start; } size_t header_size (nal_start[2] 1) ? 3 : 4; uint8_t *payload nal_start header_size; size_t payload_size nal_size - (payload - nal_data); uint8_t nal_header payload[0]; uint8_t nal_type nal_header 0x1f; if (payload_size MAX_RTP_PAYLOAD) { // 單包封裝 uint8_t rtp_buf[1500]; rtp_buf[0] 0x80; rtp_buf[1] 96; // payload type PT96 rtp_buf[2] (uint8_t)((*timestamp) 8); rtp_buf[3] (uint8_t)(*timestamp); rtp_buf[4] 0x00; rtp_buf[5] 0x00; rtp_buf[6] 0x00; rtp_buf[7] 0x01; // SSRC memcpy(rtp_buf 12, payload, payload_size); sendto(sockfd, rtp_buf, 12 payload_size, 0, (struct sockaddr *)dst, sizeof(*dst)); } else { // FU-A 分片封裝 uint8_t fu_indicator (nal_header 0xe0) | 28; uint8_t fu_header; uint8_t rtp_buf[1500]; size_t offset 0; int first 1; while (offset payload_size) { size_t chunk_size payload_size - offset; if (chunk_size MAX_RTP_PAYLOAD - 2) chunk_size MAX_RTP_PAYLOAD - 2; rtp_buf[0] 0x80; rtp_buf[1] 96; rtp_buf[2] (uint8_t)((*timestamp) 8); rtp_buf[3] (uint8_t)(*timestamp); // ... 填充 RTP header fu_header (nal_type 0x1f); if (first) fu_header | 0x80; if (offset chunk_size payload_size) fu_header | 0x40; rtp_buf[12] fu_indicator; rtp_buf[13] fu_header; memcpy(rtp_buf 14, payload offset, chunk_size); sendto(sockfd, rtp_buf, 14 chunk_size, 0, (struct sockaddr *)dst, sizeof(*dst)); offset chunk_size; first 0; } } }5.6 完整示例代碼倉庫結(jié)構(gòu)這個程序如果完整寫完代碼量在 500 行左右。一個合理的工程目錄結(jié)構(gòu)可以是rtsp_streamer/ ├── Makefile ├── src/ │ ├── main.c # 主函數(shù)、線程創(chuàng)建 │ ├── v4l2_capture.c # 采集模塊 │ ├── encoder_mpp.c # RKMPP 編碼模塊 │ ├── rtp_sender.c # RTP 打包發(fā)送模塊 │ └── queue.c # 幀隊列 └── include/ └── streamer.h # 公共頭文件6. 實測結(jié)果延遲、CPU 占用和畫面質(zhì)量表現(xiàn)寫代碼是一回事跑起來看到真實數(shù)據(jù)是另一回事。我在 RK3588 開發(fā)板上做了一輪完整的壓力測試從推流延遲、CPU 占用、畫面質(zhì)量三個維度記錄數(shù)據(jù)以下結(jié)果供你參考。測試環(huán)境RK3588 開發(fā)板8GB RAM板載 WiFi 6 模塊連接 5GHz 路由器接收端為一臺 PC 上的 VLC通過 WiFi 連接同一個路由器。攝像頭為 1080p30 USB UVC 攝像頭。6.1 延遲測試用秒表對著屏幕錄制分別觀察實際畫面動作和 VLC 顯示畫面的時間差推流方式平均延遲最大延遲備注GStreamer UDP 硬編碼180ms350ms流暢偶發(fā)小卡頓GStreamer TCP RTSP 硬編碼450ms1200ms畫面完整延遲波動大FFmpeg RTSP 軟編碼800ms2500ms延遲最高CPU 占用高GStreamer UDP 方案在延遲表現(xiàn)上一騎絕塵這也是為什么很多低延遲圖傳方案傾向于走 UDP RTP 的原因。6.2 CPU 占用測試用top和mpstat觀察系統(tǒng)負載場景CPU 平均占用A76 核心負載A55 核心負載空閑僅系統(tǒng)2%低低GStreamer 硬編碼推流12% - 18%中等低FFmpeg x264 軟編碼推流55% - 70%高中硬編碼的優(yōu)勢非常明顯RK3588 的 VPU 把最重的編碼工作接管了A76 核心只需要跑 V4L2 采集、格式轉(zhuǎn)換和 RTP 打包這些輕量任務(wù)。6.3 畫面質(zhì)量主觀評價在 2Mbps 固定碼率下1080p30 的畫面在室內(nèi)靜止場景幾乎無可見噪點文字邊緣清晰。運動場景下比如快速揮手或者走動畫面會有輕微馬賽克但整體可接受。如果改成動態(tài)碼率VBR碼率上限放寬到 4Mbps運動場景的馬賽克會顯著減少代價是 WiFi 吞吐壓力增大。7. 踩坑記錄V4L2 采集和 RKMPP 編碼對接時我遇到過的 5 個大坑這個項目看著代碼量不大但中間踩的坑絕對夠?qū)懸黄獑为毜呐佩e筆記了。我把印象最深的幾個問題列出來希望能幫你少走彎路。7.1 格式轉(zhuǎn)換瓶頸YUYV 轉(zhuǎn) NV12 的 CPU 耗時過高采集端拿到的是 YUYV 格式RKMPP 編碼器輸入一般是 NV12 格式Y(jié)UV420SP中間必須做一次轉(zhuǎn)換。我最初用純 C 寫了一個轉(zhuǎn)換函數(shù)實測 1080p 一幀在 RK3588 上要花 8 到 10ms雖然單看還行但疊加上采集、編碼、發(fā)送之后整個鏈路延遲就上去了而且 CPU 占用率明顯升高。后來改用 RK3588 的 RGA 硬件加速模塊librga做格式轉(zhuǎn)換耗時直接降到 1ms 以下CPU 占用幾乎為零。如果你在 RK3588 上做視頻應(yīng)用記住能用硬件加速的轉(zhuǎn)換和縮放別用 CPU 硬湊。RGA 的調(diào)用方式和 DMA 類似拷貝圖像數(shù)據(jù)的同時指定源格式和目標(biāo)格式即可。注意RGA 的驅(qū)動在不同內(nèi)核版本上 API 略有差異編譯前確認一下你的板子內(nèi)核版本對應(yīng)的 librga 版本不然編譯報錯或者運行時報RGA init failed會讓人頭大。7.2 mpph264enc 硬編碼器在低碼率下出現(xiàn)花屏這是一個讓我排查了兩天的問題碼率設(shè)置到 1Mbps 以下時H.264 硬編碼輸出的畫面會周期性出現(xiàn)橫條紋花屏。最開始以為是 WiFi 丟包但本地錄制也有這個問題。后來查文檔和社區(qū)發(fā)現(xiàn)是 RKMPP 編碼器對低碼率場景下的參考幀管理策略有問題解決辦法是調(diào)整 GOPGroup of Pictures大小把默認的 2 秒一個 I 幀改成 1 秒一個 I 幀gst-launch-1.0 v4l2src device/dev/video0 ! \ video/x-raw,width1280,height720,framerate30/1 ! \ videoconvert ! video/x-raw,formatI420 ! \ mpph264enc bitrate800000 gop30 ! \ h264parse ! rtph264pay config-interval1 pt96 ! \ udpsink host192.168.1.100 port5000gop30表示每 30 幀一個關(guān)鍵幀也就是 1 秒一個 I 幀。I 幀頻率增加會略微降低壓縮率但能顯著改善低碼率下的花屏現(xiàn)象。7.3 udev 權(quán)限問題非 root 用戶打不開 /dev/video0開發(fā)板到手后我用普通用戶運行推流程序一直報open video device failed: Permission denied。查了一圈發(fā)現(xiàn)默認 udev 規(guī)則沒有給 video 設(shè)備添加 user 權(quán)限。解決方法是在/etc/udev/rules.d/下新建規(guī)則文件KERNELvideo*, SUBSYSTEMvideo4linux, MODE0666然后重啟 udev 或重插攝像頭。這個坑幾乎每個做嵌入式視頻開發(fā)的人都會遇到直接加sudo chmod 666 /dev/video0能臨時解決但重啟就失效用 udev 規(guī)則是正解。7.4 select 超時之后攝像頭驅(qū)動掛死的恢復(fù)策略在我的采集程序里如果攝像頭被意外拔出USB 接觸不良select()會一直超時即使重新插上驅(qū)動狀態(tài)也未必能自動恢復(fù)。我最后實現(xiàn)的策略是連續(xù) 10 次 select 超時后主動關(guān)閉 fd 并重新打開/dev/video0重新走一遍格式設(shè)置和緩沖申請流程。這個軟重啟邏輯聽起來很粗暴但實測非常有效在長時間運行的設(shè)備上能避免 99% 的攝像頭失聯(lián)問題。7.5 RKMPP 輸入幀尺寸對齊問題RKMPP 編碼器對輸入圖像的寬高有對齊要求一般要求 16 像素對齊。如果攝像頭輸出的分辨率是 1920x1080對齊沒問題但如果換成 640x480正好也對齊反而是一些分辨率為 1280x720 或者 2592x1944 這樣的尺寸偶爾會觸發(fā)對齊異常。程序在啟動時最好先查一下編碼器支持的對齊要求或者直接把輸入裁剪/縮放到一個安全的對齊分辨率。RGA 硬件縮放這時候就派上用場了縮放的同時還能完成格式轉(zhuǎn)換一舉兩得。8. 進階玩法在 RK3588 上給視頻流加上 AI 目標(biāo)檢測聊完基礎(chǔ)推流最后說一個非常自然的擴展方向——RK3588 自帶 NPU很多人拿到這塊板子不僅是為了做普通攝像頭推流還想在端側(cè)做 AI 分析比如檢測人體、車輛然后在檢測到目標(biāo)時才觸發(fā)推流或者標(biāo)記畫面區(qū)域。RK3588 的 NPU 支持 RKNN 格式的模型常見的 YOLOv8 等檢測模型可以轉(zhuǎn)換成 RKNN 在 NPU 上運行。部署流程大概是在 PC 上訓(xùn)練或下載預(yù)訓(xùn)練模型如 YOLOv8n。用rknn-toolkit2把 PyTorch 或 ONNX 模型轉(zhuǎn)換成 RKNN 模型。板子上調(diào)用 RKNN Runtime C/Python API 對視頻幀做推理。在采集線程和編碼線程之間插入一個AI 檢測節(jié)點檢測結(jié)果可以疊加到畫面或者作為觸發(fā)條件。將 AI 推理嵌入到 GStreamer 管線里可以自定義一個 GStreamer 插件也可以簡單地在應(yīng)用層做取一幀 → 推理 → 有目標(biāo)才編碼推流。后者簡單直接適合快速驗證前者性能更好、延遲更低適合正式產(chǎn)品。這里有一個設(shè)計經(jīng)驗推理頻率不需要和幀率一致。比如視頻是 30fps但檢測可以每 5 幀做一次即 6fps 的檢測幀率對大多數(shù)監(jiān)控場景完全夠用。這樣可以大幅降低 NPU 功耗和發(fā)熱對那些用電池供電的移動設(shè)備尤為重要。實測在 RK3588 上跑 YOLOv8n輸入 640x640NPU 推理單幀大約 20ms 到 30ms按 6fps 的策略NPU 占用率不到 20%CPU 也完全不受影響推流和檢測并行毫無壓力。我在實際使用中發(fā)現(xiàn)把 AI 檢測疊加到推流鏈路之后最值得優(yōu)化的不是推理速度而是檢測結(jié)果的時空平滑。直接對每一幀獨立檢測會導(dǎo)致目標(biāo)框閃爍跳躍觀感很差。最簡單的平滑策略是用卡爾曼濾波或指數(shù)移動平均EMA對目標(biāo)框的坐標(biāo)做低通濾波。這個 trick 能讓目標(biāo)框貼合目標(biāo)運動軌跡效果提升非常明顯而計算成本幾乎可以忽略。另一個體會是端側(cè) AI 檢測的價值不只是識別更是決策。檢測到目標(biāo)之后可以聯(lián)動其他動作比如有陌生人進入時立刻提高碼率、切換到高清流并開始本地錄像平時則用低碼率流維持基本監(jiān)控。這種按需分配資源的設(shè)計讓有限的 WiFi 帶寬和板端算力都花在刀刃上。最后再分享一個小技巧如果把推流程序和 AI 檢測程序做成兩個獨立進程運行時的調(diào)試會輕松很多——檢測模型版本升級不會影響推流穩(wěn)定性推流異常也不至于讓 AI 進程一起崩掉。進程間通信用共享內(nèi)存?zhèn)鲙阅軗p失也很小。這種模塊獨立部署的思路和大系統(tǒng)里的微服務(wù)架構(gòu)是一個意思只不過在嵌入式場景下我們要用更輕量的方式實現(xiàn)而已。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠干在线| 99在线观看免费精品视频| 综合五月婷婷| 久99| 成人无码髙潮喷水A片| 婷婷精品综合| 成人丁香五月| 能看的AV网站| 久久九九囯产| 香蕉国产2013| 久久奄也去色色网站| 色色欧美色色| 影音先锋偷偷色男人站| 欧洲激情网站| 性爱技巧五月| 婷婷五月色情天| 激情床戏| 久久人妻少妇嫩草AV| 九九在线免费观看| 欧美色色干| 色色色色色色色色综合网| 婷色五月| www.99视频| 亚洲人妻av| 丁香婷婷激情综合五月激情 | 久久婷婷五月综合色区| 中文资源在线a | 精品视频这里只有精品| 色色色国产| 婷婷激情社区| 色色色无码| WWW免费视频碰碰碰碰| 欧美色图天堂网| 亚洲无码99| 五月天性色| 国语对白性爱视频播放| 五月天色色婷婷| 99这里| 久久五月激情| 九九九九九无码| 热五月婷婷| 久9热| 97干视频在线| 色婷婷五月天成人网| www.lingjunshare.com| 婷婷伊人无码| 99日本精品视频热| 香蕉操亚洲| 9久热精品在线视频| 久久伊人五月天| 操操自拍| 九九热AV| 激情婷婷丁香| 亚洲精品一区中文字幕乱码| 99精在线| 99久久婷婷国产综合精品电影| 99日本精品视频热| 色五月在线播放| 99精品热视频| 亚洲激情综| 99热99热99热99热| 91精品电影18T| 色屌丝中文字幕| 国产精品色色| 五月天婷婷综合免费| 9热精品| 18久久| 99re6在线视频精品免费| 一起草无码| 婷婷五月天情色| 色五月在线播放| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 99这里有精品久久97| 五月婷婷黄色| 久久9999| 99婷婷五月天| 欧美激情五月天婷婷| 久久狠色噜噜狠狠狠狠97| 色色五月天丁香婷婷| 色噜噜97视频在线观看| 狠狠人人| 色五月视频,小说| 久久综合伊人综合在线| 色婷婷激情四射视频| 99热这里只有精品一区| 狠狠爱综合| 亚州美女| 8区视频在线| 婷婷影院欧美| 99精品一二三四视频| 久久久99久久| 丁香五月成人av| av中文在线| 影音先锋一区二区三区| 中文av网站| 久久五月天激情| 最近中文字幕2019视频1| 久久女婷| 97色精品视频| 免费视频无码| 狠狠色综合网| 亚洲综合色成丁香五月色| 日韩精品无码AV| 婷婷亚州综合| 天天插天天射天天干| 五月婷婷在线视频免费观看| www.狠狠| 久色| 91久久九| 秋霞A V毛片| 精品综合久久久久久五月天| 丁香婷婷视频| 五月丁香六月欧美综合网站| 久久色9| 久久99最新| 99精品视频网| 色啪网| enecarbon-materials.comWu染请涟系Bao护@wip1688| 婷婷丁香久久| 99精品国产热久久91色欲| 五月丁香WWW| 人人人人人人人草| 99视频| 综合久久六月| www.色色色色| 99久久99九九99九九九| 异能之下短剧免费观看全集| 国产精品视频免费看| 在线中文AV| 9191avse| 99色在线观看| 丁香五月婷婷久久综合激情网 | 黄网在线免费观| 色狠狠五月天| 五月丁香影视| 婷婷色啪| 99re思思久久| 综合激情伊人影视在线| 日本狠狠干| 国产综合网在线| 久热免费视频| 日韩在线一级| 亚洲国产色色| 日本三级第一页| 深爱五月激情网| 久久9精品| 亚洲乱码日产精品BD| 日本啪啪网| 婷婷狠狠干| 成人五月天。COM| 伊人久久大香线蕉av最新| 午夜丁香婷婷| 六月丁香啪啪啪| 婷婷五月天激情诱惑| 激情亚洲五月| 婷婷在线五月天观看| 99热这里是精品| 97人妻碰碰中文无码久热丝袜| 亚洲操精品| 激情五月,激情综合网| 超碰在线网站| AV在线免费网站| 婷婷国产成人| 丁香五月 无码| 、激情六月天| 99视频在线观看地址| 丁香无五月网| chaopeng在线人人| 色婷婷丁香五月天| 日韩av在线播放综合网| 欧美这里只有精品| 河北真实伦对白精彩脏话| 久色视频首页| 六月婷婷视频| 久久久久久人妻| mmm1717.6dbm人人爱人人操| 操b视频在线观看一区二区| 六月合五月婷| 99五月丁香丁| 久久免费试看120秒| 99视频在线精品| 欧美在线看| 五月丁香六月激情在线| 婷婷婷婷婷婷婷五月丁香| 色色色色色综合| 大香蕉婷婷色| 一本伊人色婷| 黄久久久| 1024日韩| 国产美女视频久| 性色人人爽| 婷婷无码视频| 五月婷婷六月综合| 99热综合网| 欧美色婷婷| 久久婷婷五月综合色丁香| 久色88| 激情五月激情综合网| 色婷婷97| 亚洲天堂无码| 婷婷丁香红五月91C| 亚洲va在线∨a天堂va欧美va| 婷婷天天五月天| 丁香五月欧美色综合| 激情99热| 91久久婷婷| 色色999三级片| AV在线资源| 99亚洲欧洲| 色婷婷丁香九月| 久久在线视频免费观看| 日韩黄黄| 五月天婷婷久久| 欧美、日韩、中文、制服、人妻| 五月婷婷丁香大陆免费| 五月天天堂久久| 九九9久九9国产视频| 可以免费观看的AV| 精品无码99| 97天堂| 亚洲情欲久久| 9色在线视频| 亚洲性色XXXXX| 亚洲视频在线网| 欧美色图天堂网| 天天天天天天天干| 久久久久久久丁香五月天婷婷| 久久婷婷视频| 五月丁香色综合| 色五婷婷在线视频| 丁香五月在线| 五月激情六月宗合| 五月丁香黄色| 激情网色五月| 最新婷婷五月丁香| 99热最新国内| 色婷婷综合视频| 色婷婷的五月天| 丁香色啪综合| 这里只有精品视频一区| 日韩乱玛久久| 五月天久久网站| 四色 爱 婷婷 精品 亚洲 五月天| 黄网网站在线播放| 这里只有精品视频222| 东北黄色一级| 久9无码视频| 久久精品五月| 色婷婷免费观看| 99九精品| 久久色情| 都市激情蜜桃婷婷五月天| 婷婷五月亚洲综合| 天天干天天日蜜臀av| 久久久五月天| 99热个人在线| 亚洲天堂青草| 超碰在线观看9| 色五月婷婷综合在线| 97干视频在线| 亚洲中文丁香| 青青草日本亚洲| 五月婷婷深深爱| 久久婷婷激情四射五月天| 丁香花狠狠婷婷亚洲中文字幕| 97色五月丁香婷婷| 五月婷婷六月丁香首页| 日本99视频| 色色操| 99er这里只有精品视频| 午夜丁香六月婷| 白天AV月月| 亚洲操逼网| 九九热这里只有精品23| 五月永久激情| 丁香五月色| 色综合久久44| 国产FREESEXVIDEOS性中国| 色综合久久久久| 日韩成人网址| 色婷婷AV久久| 99在线播放视频| 热九九在线| 色综合爱综合| 免费亚洲婷婷| 人妻丰满精品一区二区A片| 色五月情| 99干视频| 五月丁香色婷婷基地| 五月色婷婷综合色| 色爱五月天| AV在线大香蕉| 九色视频九色九色91jiuseshipin| 91久女| 久久久久久久久久久月丁| 婷婷综合色图| 永久地址 色| 久久草中文日韩欧美| 久久精品性爱| 日韩欧美性爱| 日韩一区二区在线播放| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 777精品久无码人妻蜜桃| 五月婷婷丁香日韩在线| 大香蕉综合| 久热99| 成年人99热| 超碰猛烈的性猛交| 狠狠婷婷色| 日本WWW九九九| 天天爱天天日| 99久久99九九99九九九| 五月香蕉网| 欧美激情五月天婷婷| www激情| 久久久免费精彩视频| 98色丁香五月婷婷综合网| 婷婷欧美激情综合| 99热偷拍| 色婷久九| 99热这里有精品| 超碰v| 91 久热| 久久久人妻不卡| 色偷偷狠狠| 日本狠狠干| 午夜丁香六月婷| 亚洲综合网激情五月天| 婷婷午夜天| 9色免费网| 99人这里只有精品| 激情综合亚洲| 丁香五月天欧美成人| 天天在线XXX| 日韩丁香涩| 丁香 婷婷 激情 综合 五月| 亚洲综合色婷婷| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷五月伦理| 热热色色五月天婷婷| 东京热免费视频| 99综合视频| 99精品网址| www开心激情网| 亚洲精品婷婷| 久久久久久xxxxx| 色婷网| 亚洲 视频 导航 一区| 久久精品66| 香蕉久久国产AV一区二区| 啪啪色激情五月天| 婷婷丁香六月天| 亚洲精品无码久久| 天天干夜夜想| 99热这里只有精品21| 五月天色丁香| 秋霞午夜理论 | 99精品丁香五月| 狠狠擼综合| 色情综合| 伍月激情天| 午夜天堂一区人妻| 五月天婷婷青青草| 91干在线视频| 色婷五月天| 性爱人人网| 午夜婷婷久久 | 另类综合婷婷五月天欧美视频| 七七婷婷综合| 四月丁香五月婷婷久久| 性视频久久| 高清不卡一区| 精品婷婷五月视| 久久99最新地址| 国产精品久久久60086| 4399无码视频二区| 天天综合色丁香| 狼友视频在线观看18| 日本超碰在线| 五月丁香亚洲综合网| co超碰在线观看| 五月天亭亭俺也| 黑人无码一区| 久久久无码精品成人A片小说 | 久久九九爽| 久久精彩免费视频精彩免费视频| 成人电影一区| 99热这里只有精品55| 99热欧美| 亚洲精品第一国产综合亚AV | 九九亚洲天堂| 婷婷五月天网| 激情综合网五月天天| 1024操逼| 成人AV免费观看| wwW天天干| 五月伊人91| 可以免费观看的AV| 狠狠狠激情网| 天天色天天射天天日| 人妻熟人中文字幕一区二区| 五月婷婷六月丁香玖玖玫瑰91| 五月天色色网站| 国产精品久久久久久久久久免费| 99国产精品久久久久久久久久久| 五月激情综合婷婷| www.久久爱.com| 色五月综合网| 激情五月天综合网| 激情五月天www| 91vip在线观看| 五月成人丁香av91| 五月天成人小说| 亚洲狠狠操| www99精品| 久99久视频| 亚洲AV综合网| 久久五月人人摸| 一区二区传媒视频| 国产精品VIDEOSSEX久久发布| 伊人久久五月天综合| 欧美A级成人婬片免费看理论| 五月丁香综合影院| 亚洲成人噜噜| 日本一级一级一级一级| 99爱视频| 狠狠干综合网| 五月成人网天天| 色欲久久综合| 色色九九五月天 | 97色色视频| 天天色噜| 色婷婷成人| 久久久久久草黄色片AV在线观看| 一起草Av| 色哟哟www| 久久密臀婷婷| 亚洲五月六月婷婷| 亚洲精品国产熟女久久久| 99无码超碰| 可以免费看的AV网站| 天天天操天天天爰| 午夜理论片最新午夜理论剧| 久久永久网址| 亚洲激情AV| 婷婷97碰碰| 国产永久一黄| 日本人妻操| 婷婷色色欧美综合网| 久久精彩视频| 99热综合| 五月天综合网| 色五月婷婷网| 成人国产欧美大片一区| 亚洲欧美在线观看| 日韩在线观看网址| 激情五月天久久| 一起草AV入口| 午夜伊人大香蕉| 欧美成人AAA片一区国产精品| 三级三久久线久久99久目本WW| 五月丁香综合激情网| 婷婷五月丁香色综合| 丁香婷婷激情五月天无毒不卡蜜桃| 3www激情| 色五月婷婷亚洲最大| 婷婷色成人| 丁香九月婷婷色| 天天操天爱综合| 五月天黄色激情小说| 五月天中文字幕在线婷婷| 中文不卡一二三区| 少妇人妻综合色6699| 婷婷六月五月天综合| 天天日天天日天天搞| 六月丁香激情网| 婷婷射丁香| 色婷婷五月天久久| www.99久久久| 欧美经典片免费观看大全| 无码人妻少妇色欲AV一区二区| 国产成人精品一区二区三区视频 | 色开心五月丁香| 色综合久久无码| 91好好热日本在线| 大香蕉九九| 久久五月六月| 丁香六月成人| 91一起操| 亚洲午夜成人av电影网| 亚洲成片在线观看| 五月婷婷丁香啪啪| 色播丁香婷婷五月激情| 操97免费超级视频| 色噜噜狠狠色综无码久久合欧美| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 色五月天激情| 亚洲视频操| 天天激情站| 国产69久久久欧美黑人A片| 不卡在线视频| 六月丁香色色| 欧洲亚洲欧洲99久久| 噜噜狠狠色综无码久久合欧美| 激情综合在线观看| 大香蕉久久视频久久视频 | 少妇高潮呻吟A片免费看软件 | 久久婷婷丁香| 五月婷婷就去色| 色色色免费视频| 久久久久9| 亚洲国产精品VA在线看黑人| 色婷婷综合成人| 九九视频精品这里只有| 噜噜噜久久| 五月婷婷丁香六月| 欧美在线97| 久久五月天黄色五月天色网址| 婷婷五月天堂| 中文字幕 中文字幕明步| 婷婷五月中文字幕| 99热在线这里只有精品| 热久久这里只有精品| 五月色情精品| WWW.桔色成人.COM入口| 国产一级片| 一本婷婷丁香久久 | 激情五月天的婷婷| 五月天婷婷深深爱| 丁香婷婷激情| 超碰com| 五月激情综合深爱| 1000部毛片A片免费观看| 色情五月天。| www夜夜操com| 九色综合网| 久久婷婷六月天| 婷婷五月激情网| 狠狠噪| 在线国产精品色| 看全色黄大色大片| 99热一本久道| 久久色五月天激情小说| 七月丁香五月婷婷在线| 99热精品少| 另类视频综合| 色色免费网站| 色九月婷婷综合| 人人操91色| 五月婷婷开心六月激情小说| 人妻体体内射精一区二区 | 欧美综合丁香网| 亚洲久久激情| 五月婷亚洲精品AV天堂| 丁香伊人网| 五月婷婷色白丝| 婷婷五月天偷拍| 男人操女人高潮91视频| 六月丁香深深爱| 六月天婷婷| 91美女被操| 六月婷婷综合激情| 9l视频自拍9l九色9l成人| 免费不卡狠操美女视频网 | 天天干天天操天天爱| 99这里只有精品| 天天曰夜夜爽| 激情99| 丁香五月天欧美成人| 精品乱码久久久久| 情婷婷五月天在线| 日日噜噜夜夜狠狠久久丁香五月| 大伊久久| 超碰在线播放免费观看| 九九热最新| 99日精品视频| 色色射| 在线观看五月婷婷网| AV操操操| 五月丁香六月欧美综合| av免费在线看不卡无毒| 国产色色色色| 91成人看片| 色婷婷色99国产综合精品| 久99热| 九九热精品视频在线观看| 狠狠人妻久久久久久综合丁香| 国产SUV精品一区二区883| www.五月婷婷久久.com| 超碰A V在线| 丁香五月六月综合激情| 成人视频一区| 精品少妇人妻AV无码专区偷人 | 99热这里只有免费精品| 91人人澡人人爽人人看| 99爱视频在线| 亚洲精品五月| 97久久五月丁香婷婷| 91偷拍视频| 丁香婷婷综合五月天| 91色呦哟| 人人97碰| 五月丁香六月婷婷免费视频| 激情骚五月| 色爱亚洲| 思思热精品在线观看| 久久婷婷五月综合啪| 六月综合婷婷开心伊人| 欧美成人精品一区二区| 色婷| AA片在线观看视频在线播放| 无码色色色| 激情小说五月天社区丁香| 久久se 综合网| h亚洲| 午夜美女人啪最红院| 色色综合五月| 天天干天天插| 免费看成人747474九号视频在线观看| 婷婷色无码| www.com色播五月天| 99热手机在线精品| 九九热最新视频| 激情的五月婷婷蜜桃| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 五月天婷婷爱| 99热99精品在线观看| 色~性~乱~伦~噜| 激情婷婷六月| 五月天无码| 午夜av网| 91男人操女人视频| 色五月天婷婷| 亚洲成人av在线播放| 婷婷瑟五月天久久综合| 久久性视频| 99热97美女| 操一区| 丁香五月影视| 色五月激情| 影音先锋 婷婷| 亚洲色综合| 五月天久久激情| 亚洲成人无码专区| 激情六月婷婷| 久久99网| 啊v视频在线观看| 婷婷丁香18| 五月丁香六月综合激情网| 五月丁香日本一抹本| 综合久久影院| 夜夜夜夜夜骑撸| 五月丁香婷婷久久| va婷婷在线| 丁香六月综合激情| 欧美97色| 色色五月丁香| 婷婷精品| 天堂婷婷五月在线| 99精品视频免费在线播放| 9人人操人人看| 人人插9| 97精品综合久久内射| 天天干天天av天天射| 无码AV久久久久久久久| 另类少妇人与禽zOZZ0性伦| 91狠狠色丁香婷婷综合久久| 丁香婷婷色五月| 五月丁香影院| 久色视频| 激情99| 大香蕉人妻| 九九热精品视频在线观看| 激情小说五月天| 99视频| 狼人久草| http://www.com久久久精品一区| 婷婷五月天天| 婷婷酒色网| 9热久久在线| 99精品视频推荐| 99久精品| 五月婷色色| 欧美五月丁香在线| 五月综合亚洲| 黄色激情五月天| 99视频在线| 久9免费视频| 婷婷五月电影| 婷婷中文字幕| 亚洲av| 激情超碰网| 3p久久| 激情综合网五月在线播放| 九九人妻福利| 五月激情基地| 激情亭亭五月| 天天干天天拍| 丁香五月婷婷社区| 婷婷五月中文字幕| 综合丁香婷婷五月天| 色五月婷婷大| 爱婷婷都市激情| 99热亚洲精品| 久99久视频精品| 2016日日夜夜操| 人妻久久久久| 深爱激情六月| 久久99网| ww超碰在线| 亚洲另类在线观看| 五月花婷婷丁香| 五月久久婷婷天堂视频| 99久热| 99er热精品视频| 人人爽人人射-美女久久久久久久久久-成人AV | 久久这里99| 可以看的av| 亚洲成人综合在线| 99久久色| 最新激情五月天| 婷婷丁香五月婷婷| 亚洲无AV在线中文字幕| 偷拍91九色| 婷婷丁香五月天色区| 九九在线精品| 丁香婷婷成年| 婷婷五月天色色| www,av好吊操| 色婷婷五月天| 色播五月综合网| 综合激情五月丁香| 婷婷六月色开| 人人草碰| 热久久视频99| www.色婷婷| 97操碰在线视频| 色青五月天| 国产欧洲欧洲精品久久| 激情亭亭五月| 伊人五月天婷婷| 日韩人妻无码专区| 性爱网五月天| 国产va视频| 成人无码免费一区二区中文| 色五月天天在线观看资源站| 中文字幕av在线播放| 任你弄在线视频免费| 五月色丁香综合| 色色色色色色色色五月先| 97久久精品视频| 日韩av大全| 丁香五月人妻| 九热视频| 亚洲99综合| 精品久久婷婷| 五月天综合视频网| 亚洲成人电影在线免费观看| 婷婷激情蜜桃玖玖丁香| 丁香五月成人| 婷婷五月天播| 久热免费| 五月天激情综合在线| w婷婷五月婷婷w| 五月色亚洲| 五月丁香六月婷婷网| 精品9久| 色五月婷婷婷婷| 国产美女无遮挡裸体毛片A片| 亚洲一个色| 激情婷婷| www.久久| 五月天婷婷基地| 金桔一区二区ab地址| 99久久婷婷国产综合精品草原| 丁香 久久| 婷婷五月综激情| 狠狠干综合网| 97视频久久| 日本色天堂| 97香蕉碰碰人妻国产欧美| 99热在线观看精品| 9l视频自拍9l九色成人| 99黄色性生活| 人妻久久久久久| av 一区三区四区| 欧美一级色| 狠狠肏综合网| 免费在线观看av网站| 99re鈥哸鈥唙| 97欧美在线| 亚洲永久免费| 色激情综合狠狠婷婷| 欧美大肥婆大肥BBBBB| 米奇激情婷婷| 五月丁香色色色| 91se在线观看| 久久婷五月| 国产精品18久久久| 国产精品视频久久99| 五月婷综合激情| 色综合大香蕉| 夜夜躁狠狠 | 人妻啪啪啪| 婷婷六月插屄激情| 丁香五月婷婷激情中文| 色欲婷婷五月天丁香| 99,色| 95精品区一区二| 五月丁香六月色| 大香蕉婷婷| 99视频| 五月丁香综合| 色综合久久五月| 五月婷婷性爱网| 大香蕉啪啪| www。五月天。com| 激情图片99| 激情综合色| 夜夜撸天天操| 婷婷五月天最新综合你懂的 | 日本丰满久久| 久久婷婷啪啪视频| 欧美噜一噜| 欧美图片丁香五月天| 九九亚洲| 狠狠干在线| 色天天久婷婷| 精品网站:999WWW| 午夜不卡久久精品无码免费| 先锋资源91| 欧美毛片www| 另类激情四射| 久久五月婷婷综合网| 丁香五月91| 99国产性感视频| 91chinese在线| 色五月天 丁香| 99色性爰网络| 亚洲中文乱字字幕在线永久| 亚洲激情99| 久久久五月婷婷| 666555。COm毛片| 亚洲AV综合在线观看| 婷婷激情五月综合丁| 丁香婷婷五月综合色情| 大香蕉天堂色| 成人无码精品1区2区3区免费看| 第四色五月婷婷| 五月丁香久久呀| 综合色色网| 伊人大蕉香| 国产精品久久久久久久久久| 热九九精品| 五月丁香六月在线| 操日本人妻视频| 婷婷色播色五月五色五月天色妇| www.色情五月天.com| 色欧美一级| 婷婷丁香六月| 丁香六月婷婷久久综合| 天天舔天天爽| 五月婷婷婷自由综合| 99'无码| 91九色国产| 天堂爱啪啪| 激情五月天福利| 久久五月婷6 9| 午夜丁香| 夜夜谢天天干| 色狠狠综合| 婷婷五月激情的图片| 91精品综合久久久久久五月丁香| 五月丁香六月激情狠狠| 亚洲精品操一操、噜一噜、摸一摸、爽| 91人人网| 97日在线视频| 欧美WW在线网| 人人干人人操外国| 日韩天堂久久| 在线不卡的视频| 九久九精品| 97超级啪啪在线观看| 激情婷婷狠狠干综合| 国产精品久久久久久久久久| 少妇人妻人伦A片| 色噜噜狠狠色综合日日| 91超级碰碰碰| 丁香网站| 在线视频区| 色色五月婷婷狠狠| 久久婷综| 丁香五月 性爱| 超碰人人妻| 殴美97色| 久久 无毛。| 五月天婷婷基地综合网| 日韩 中文 欧美| 色琪琪一综合久久激情五月视频| 色伊人婷婷| 亚洲AV成人片无码网站| 亚洲sesesese| 色狠狠999综合网| 久久只有精品| 欧美毛片www| 亚洲人成人五月天| 五月丁香中文| 久久资源网五月婷| 色色a| 强辱丰满人妻HD中文字幕| 伊人丁香五月天丁香在线婷| 狠狠色综合图片| 久99久视频精选| 一本色道久久88加勒比—| 大香蕉五月丁香| 激情六月下句是什么| www.人人操人人看人人想人人摸 人人人人操,COM| 五月婷婷 六月丁香| 亚洲、热| 人妻少妇色综合| AAA久久久| 色婷婷丁香五月| 久草婷妨| 久99久精品视频| 亚洲五月天第一综合干| 偷拍视频五月天| 久色| 另类小说五月天| 久久久久久18| 六月丁香婷婷视频综合在线观看| 五月五丁香婷婷| 天天日夜夜爽| 97人人射| 97日日碰碰| 久久黄A片| 天天日天天干天天插天天射| 成人在线综合| 久久精品99国产精品日本| 丁香五月激情欧美| 99色这里| 丁香五月区| 欧美精品999| 丁香五月婷婷色综合| 手机旧版看人妻1025| 狠狠干天天内射| 五月开心深爱激情网| 大香蕉五月丁香| 国产免费性爱| 另类激情五月| 5月丁香六月婷婷| 91久热| 天堂网操| 天天搞夜夜叫| 99热8| 国产偷人爽久久久久久老妇APP| 日本毛片内射| 欧美五月丁香在线观看| 粉嫩av懂色av蜜臀av熟妇| 玖玖色综合色| 国产99热| 亚洲色综合性| 五月丁香六月婷婷视频| 99爱在线精品视频免费观看| 日本在线免费中文com.| 精品久久99码| 人与禽A片啪啪| 日韩一级片| 99热这里只有精品中文字幕| 精品夜夜澡人妻无码AV| 久草A片| 婷婷五月天激情亚洲小说| 五月色综合| 五月丁香综合色婷婷| 激情六月天婷婷| 五月天中文字幕在线婷婷| 婷婷中文字幕网| 色噜噜狠狠色综合日日| 五月婷婷69| 人人干天天舔| 日韩性爱无码| 婷婷五月丁香五月| 丁香五月婷婷亚洲色图| 狠狠狠狠狠狠狠狠草| 久久婷婷五月综合色丁香| 日日日日日| 97色永久免费视频| 五月激情基地| 六月丁香婷婷色狠狠久久| 91综合色噜噜| 久久xx| www.99热在线| 五月丁香在线偷拍视频| 久久久.COM| 人五月天婷婷喷水| 久久婷婷五月综合| 婷婷五月天成人| 久久伊人日日夜夜| 中文字幕成人| av第一二区| 五月天婷婷综合色| 开心激情网五月天| 五月天婷婷综合免费| 五月综合777| 久久婷五月| 色色丁香五月| 伊人网色婷婷五月天| 亚洲激情婷婷| 日韩在线观看亚洲| 亚洲人妻五月丁香婷婷| 97丁香花五月天激情小说| 99热精品观看| 开心久久网婷婷| 日本激情综合| 亚洲精品字幕在线观看 | 99久久五月婷婷| 国产精品涩涩涩视频网站| 九九黄色网| 99精品国产在热久久婷婷| 狠狠狠狠狠草| 色五月亚洲五月天| 性色人人爽| 久久多色| 五月丁香色婷基地综合久久| 99热九九九九| 五月成人丁香av91| 国产婷婷色综合AV蜜臀AV | 97婷婷色| 伊人婷婷五月天| 色色色色色色色色五月先| 欧美日韩aaa| 婷婷五月丁香伊人| 可以直接看的AV网站| 丁香久色| 蜜臀av无码久久久久久久久| 亚洲九区| 色99视频| 另类天堂| 久久综合九九| jiqingtaose五月天| 欧美久久网| 超碰资源在线| 天天综合久久| 在线资源av-超碰中文在线-成人AV| 亚洲精品另类| 色久一| www.久9| 丁香五月777| 99久久精品国产色欲| 4399高清无码视频| 久99久视频免费观看| 国产黄色一级片| 秋霞日本免费毛片A片| 97黑人精品区| 久久9精品视频| 97资源欧美日韩大香蕉超碰一区| 96精品久久久久久久久| 五月婷婷人人人操| 婷婷99狠狠躁天天| 久热欧美| 成人做爰A片免费看网站找不到了| 亚洲婷婷在线播放十月| 在线视频色五月| 色情丁香五月天| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 91精品综合久久久五月天| 色九九一二| 狠狠色网| 丁香六月婷婷久久高清| 91色综合| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 婷婷激情五月天亚洲综合| 9999色色色色| 五月天涩涩| 五月婷婷色| 97碰久久| 久热9| 色五天综合| 婷婷色色宗合网| jiujiujiuwuyuetian| 日夜操B| 亚洲第一色色色| 五月丁香六月婷婷综合伊人| 99热在线精品观看| 日本一级特黄大片AAAAA级| 久热婷婷| 国产成人精品一区二三区熟女在线| 婷婷色五月91啪啪| 激情丁香五月AV| WWW.99热| 色婷婷色五月丁香| 五月激情小说网| 在线婷婷| 亚洲乱码日产精品BD| 无码人妻一区二区一牛影视| 98永久精品| 天天做天天爱天天日| 色情久久久| 99久精品视频| 激情五月天综合网| 色播激情婷婷| 丁香五月欧美激情| 很很操很很操| 色五月激情网| 婷婷俺去也| 99精品视频播放| 超碰91人人操| 色五月天成人在线| 玖玖婷婷色五月| 99这里有精品视频| 91性人人| 五月激情丁香六月狠狠干| 综合激情深爱| 婷婷在线精品| 日韩黄色中文字幕| 性爱五月丁香| 精品久久人妻热| 丁香五月人妻| 超碰在线91| 停停综合色色| 99热思思在线观看| www.99热这里精品| 伊人婷婷五月天| 成人在线观看一区| 五月婷婷开心色伊人| 色五月av| 国产午夜精品一区二区三区嫩草| 天天干天天操天天射 | 久久丁香五月天| 岛国午夜视频| 第二色AⅤ| 六月婷婷五月丁香| 亚洲 在线 另类| 91大神操美女| 丁香五月婷婷色播艳门照| 99色在线视频| 成人在线日韩欧美| 五月天成人在线| 五月天啪啪| 色婷婷四虎| 噜色精品| 久久久com| 久久99jiu9| 色青青视频| 日韩中文欧美| 久久五月天网| 午夜婷婷五月天在线| AV性爱网| 亚洲熟女乱色综合亚洲网站| 亚洲综合色丁香婷婷六月| 26uuu精品国产| 五月丁香综合影院| 五月天激情久色| 激情丁香五月| 亚洲欧洲国产精品| 五月婷婷真爱激情网| 乱精品一区字幕二区| 日本色色图| 久久超视频| 91精品视频男人的天堂| www.五月天。com| 色婷婷六月天| 色五月成人| 亚洲午夜电影| 9久久久久| 伍月婷丁香花全集| 天天日夜夜| 超碰超碰在线| 五月丁香啪啪| 99re资源在线视频导航| 日日噜噜久久婷婷五月天 | 极品 少妇 内射| 婷婷五月天AV| 婷婷色在线观看| 亚洲成人AV在线播放| 激情碰碰碰| 久久久久久综合五月婷婷| 五月天激情网图片| 亚洲日本激情| 狠狠色婷婷7777久| 91色在线| 亚洲综合色网| 77777亚洲午夜久久| 五月婷婷说| av在线免费播放观看| Va另类视频| 亚洲色无码A片一区二区麻豆| 久久99最新| 亚洲亚洲人成综合网络| 91精品熟女| 五月天激情国产综合婷婷婷| 五月天婷婷综合久久| 思思久久精品| 亚洲人成网亚洲欧洲无码久久| 99精品视频网站| 91狠狠色丁香婷婷综合久久精品| 六月婷婷激情| 国产 码在线成人网站| 思思热精品在线视频| wwwss在线观看| 婷婷五月天av| 欧美va视频不用播放器的va视频网| 久久免费精彩视频| 狠狠色官网| 在线播放人妻| 噜噜噜噜噜色| 91亚洲免费片| 99色视频| 在线另类视频| 99无码视频| 五月天婷婷一起草| 极品人妻VIDEOSSS人妻| 婷婷五月丁香伊人网| 91综合视频丁香| 色婷婷六月丁香综合欲精品| 日本情色一区二区| 棕合影院色色| 大香蕉久久伊人婷婷五月丁香| 大香蕉AV在线| 亚洲色情激情丁香五月| 亚洲精品第一色色色色色色| 5月丁香六月婷婷| 综合九九久久| www.精品99| 六月丁香婷婷视频综合在线观看| 天天爽天天爽| 婷婷五月天资源| 五月婷婷导航| 五月天丁香网| 狠狠肏综合网| 久久久久久9热不雅视频| 日本美女五月天| 99久re热视频精品98| 婷婷色综合| 狠狠插日日干撸| 成人免费在线电影| 丁香五月婷婷六月| 婷婷激情五月综合基地| 噜噜五月天综合| 婷婷五月丁香久久| 就99这里只有精品| 97男人天堂| 无码人妻激情| 丁香五月综合福利视频导航| 亚洲99一级无嗎特制在线| AV在线大香蕉| 男人综合网| 东北黄色一级| 99热在线观看免费精品| 精品三区影院| 欧美精品啪啪| 人妻丰满精品一区二区A片| 五月婷婷色激情| 久99视频| 日本在线播放97| 中文字幕,综合,91| 精品婷婷五月天| 婷婷丁香www视频日本韩国| www夜夜操| 五月婷婷 激情五月| 怡红院 久久| 特黄三级又爽又粗又大| 色五月激情| 五月丁香六月婷婷综合网站 | 99A级片| 欧美性猛交99久久久久99按摩| 久久hd|