国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

RTSP服務(wù)器源碼實戰(zhàn):C語言實現(xiàn)協(xié)議狀態(tài)機與RTP打包

RTSP服務(wù)器源碼實戰(zhàn):C語言實現(xiàn)協(xié)議狀態(tài)機與RTP打包 簡介這是一份RTSP服務(wù)器C語言實現(xiàn)源碼及配套分析資料適合網(wǎng)絡(luò)編程初學(xué)者、流媒體開發(fā)者以及希望深入理解RTSP協(xié)議原理的工程師。資源共包含414個文件以167個C源碼文件、45個頭文件為主輔以Makefile、編譯生成的庫文件與目標文件等整體約1.26MB結(jié)構(gòu)緊湊便于對照學(xué)習(xí)協(xié)議實現(xiàn)與工程組織。目前已有1059人瀏覽學(xué)習(xí)。資料完整梳理了RTSP基礎(chǔ)、會話管理、請求處理、RTP/RTCP傳輸及多線程同步等關(guān)鍵模塊配合源碼注釋可幫助讀者掌握服務(wù)器初始化、DESCRIBE/SETUP/PLAY等請求流程并理解SDP生成與狀態(tài)機管理思路適合作為網(wǎng)絡(luò)服務(wù)開發(fā)的實戰(zhàn)參考。 接觸過音視頻傳輸?shù)呐笥褢?yīng)該對RTSP不陌生。這個協(xié)議從誕生到現(xiàn)在一直是IP攝像頭、流媒體服務(wù)器、安防平臺這些領(lǐng)域的事實標準。我之前因為項目需要在嵌入式板子上用C語言從頭寫過一版RTSP服務(wù)器也仔細讀過live555、GStreamer里rtspbin的實現(xiàn)思路這里把源碼層面的關(guān)鍵設(shè)計、協(xié)議狀態(tài)機的處理、還有那些文檔里不會寫的坑一次性講清楚。這篇文章適合正在看RTSP相關(guān)源碼的人也適合準備自己動手實現(xiàn)一個輕量級RTSP服務(wù)的開發(fā)者。1. RTSP協(xié)議核心源碼落地前必須搞懂的三個概念RTSPReal Time Streaming Protocol本身并不傳輸媒體數(shù)據(jù)它更像是一個“流媒體會話的遙控器”。源碼里所有邏輯歸根結(jié)底都圍繞三個概念展開URL會話管理、狀態(tài)機流轉(zhuǎn)、SDP媒體協(xié)商。不管你讀的是live555還是自己寫的代碼這三個點貫穿始終。1.1 URL定位與會話管理RTSP的請求行長這樣DESCRIBE rtsp://192.168.1.10:554/live/ch01 RTSP/1.0。這個URL不是隨便寫的它在源碼里會被解析成兩部分服務(wù)器IP和端口以及媒體路徑。比如/live/ch01可能對應(yīng)一個H.264攝像頭通道也可能對應(yīng)一個本地文件。在C語言實現(xiàn)里常見做法是用一個結(jié)構(gòu)體維護會話列表。參考live555的ServerMediaSession它本質(zhì)是一個雙向鏈表節(jié)點字段大概有sessionId服務(wù)端生成的唯一標識客戶端后續(xù)請求都帶著它媒體路徑streamName對應(yīng)URL里的路徑部分傳輸模式TCP還是UDP單播還是組播SDP描述指針等DESCRIBE請求來了直接序列化返回引用計數(shù)多個客戶端看同一路流時基礎(chǔ)流對象會被共享源碼里比較關(guān)鍵的是sessionId的生成策略。并發(fā)高的時候遞增數(shù)字很容易撞車我一般用時間戳加隨機數(shù)拼一個十六進制字符串再加一個全局自增序列做保底這樣既不會重復(fù)也方便日志里排查是哪一路會話。live555里用的是隨機數(shù)加地址組合效果類似。1.2 狀態(tài)機每個請求都在推動狀態(tài)流轉(zhuǎn)RTSP的狀態(tài)機看起來簡單但源碼里容易寫得特別散因為每個方法OPTIONS、DESCRIBE、SETUP、PLAY等都在改狀態(tài)。最核心的流轉(zhuǎn)路徑是初始化客戶端發(fā)OPTIONS探路服務(wù)器回支持哪些方法DESCRIBE服務(wù)器返回SDP描述媒體格式、編碼、端口信息SETUP指定傳輸方式TCP/UDP服務(wù)器分配RTP/RTCP端口建立傳輸通道PLAY開始推流服務(wù)器按幀率往客戶端發(fā)RTP包PAUSE/TEARDOWN暫?;蚪K止會話釋放資源源碼實現(xiàn)時我習(xí)慣用一個枚舉狀態(tài)變量每次方法處理完直接更新狀態(tài)比如typedef enum { RTSP_STATE_INIT, RTSP_STATE_READY, RTSP_STATE_PLAYING, RTSP_STATE_PAUSING } RtspState;SETUP成功后才能PLAYPLAY狀態(tài)下再收到SETUP要考慮返回455 Method Not Valid In This State這是RFC 2326里明確規(guī)定的。很多新手寫的代碼沒做狀態(tài)校驗順序亂了也不報錯結(jié)果客戶端表現(xiàn)時好時壞其實就是狀態(tài)機沒管住。1.3 SDP媒體能力的“簡歷”SDPSession Description Protocol是RTSP和媒體之間的一座橋。服務(wù)器支持什么編碼、什么分辨率、什么采樣率全都在SDP里寫明白。DESCRIBE請求的響應(yīng)體就是一段文本SDP客戶端解析它來決定怎么解碼、怎么渲染。C源碼里SDP通常不是運行時動態(tài)生成的而是根據(jù)媒體源信息拼出來的。常見字段包括v0版本o 會話標識s 會話名稱cIN IP4 192.168.1.10連接信息多播場景必填t0 0活動時間mvideo 0 RTP/AVP 96視頻軌道端口0表示跟隨SETUP協(xié)商artpmap:96 H264/90000編碼格式和時鐘頻率afmtp:96 packetization-mode1H.264打包參數(shù)acontrol:trackID1該軌道的控制URL一個容易被忽略的細節(jié)是acontrol字段。如果客戶端發(fā)來的SETUP是rtsp://ip/live/ch01/trackID1服務(wù)器要能從URL里解析出trackID再映射到具體的媒體子會話。C語言里用strstr或者sscanf提取即可但要注意邊界避免讀到越界內(nèi)存。2. 源碼框架拆解目錄結(jié)構(gòu)與線程模型設(shè)計拿到一份RTSP服務(wù)器源碼第一件事不是讀代碼是看目錄結(jié)構(gòu)和線程模型。這決定了整個項目的復(fù)雜度走向也直接關(guān)系到你后續(xù)加功能的時候是游刃有余還是焦頭爛額。2.1 一個可維護的目錄結(jié)構(gòu)長什么樣我參考過一個輕量級RTSP服務(wù)器的開源項目它的目錄劃分很清晰直接抄過來就很順手rtsp_server/ ├── include/ // 公共頭文件協(xié)議定義、數(shù)據(jù)結(jié)構(gòu) │ ├── rtsp.h // RTSP請求/響應(yīng)的核心結(jié)構(gòu)體定義 │ ├── rtsp_server.h // 服務(wù)器主接口 │ └── rtp.h // RTP打包相關(guān)接口 ├── src/ │ ├── rtsp.c // 請求解析、方法分發(fā)、狀態(tài)機 │ ├── rtp_h264.c // H.264負載打包、時間戳處理 │ ├── sdp.c // SDP構(gòu)建 │ ├── session.c // 會話管理 │ └── main.c // 啟動入口 ├── Makefile └── README.md如果你讀的源碼把請求解析、SDP生成、RTP打包全部塞進一個幾千行的rtsp.c里那后期維護會非常痛苦。我的習(xí)慣是每個源文件只專注一件事頭文件里只暴露必要的接口內(nèi)部實現(xiàn)全用static函數(shù)隱藏起來。這樣別人讀你的代碼或者你自己一個月后回來看都不至于一臉懵。2.2 線程模型單線程還是多線程RTSP服務(wù)器的并發(fā)模型基本兩類每連接一線程簡單來一個客戶端創(chuàng)建一個線程會話結(jié)束就回收單線程事件循環(huán)用select/poll/epoll管理所有socket非阻塞處理我之前在嵌入式平臺上用過一個線程池模型思路是主線程負責(zé)accept然后把連接描述符丟進一個隊列工作線程從隊列取任務(wù)。這樣避免了高頻創(chuàng)建銷毀線程的開銷也能控制最大并發(fā)數(shù)。實際測試下來在不支持epoll的老式Linux內(nèi)核上用poll加線程池也能輕松支撐二三十路并發(fā)對大多數(shù)安防場景完全夠用。RTP推流這部分我建議單獨一個線程去干不要和RTSP控制請求混在一起。因為RTP是定時發(fā)送高頻操作如果和控制請求共享線程一個慢客戶端或者網(wǎng)絡(luò)抖動可能導(dǎo)致后續(xù)所有請求都堵住。分離之后控制會話和媒體發(fā)送互不干擾。源碼里通常是一個會話對應(yīng)一個RTP發(fā)送緩沖區(qū)和獨立線程或者多個會話共用一個發(fā)送線程通過定時器輪詢就緒的幀。2.3 socket初始化源碼里你一定會遇到的幾組調(diào)用服務(wù)器啟動的第一步就是創(chuàng)建監(jiān)聽socket。代碼看起來差不多但有幾個參數(shù)值得留意int listen_fd socket(AF_INET, SOCK_STREAM, 0); int reuse 1; setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof(reuse)); struct sockaddr_in addr; memset(addr, 0, sizeof(addr)); addr.sin_family AF_INET; addr.sin_addr.s_addr htonl(INADDR_ANY); addr.sin_port htons(server_port); bind(listen_fd, (struct sockaddr *)addr, sizeof(addr)); listen(listen_fd, 64);SO_REUSEADDR這個選項是必須的。否則服務(wù)重啟時上一次還沒完全釋放的四元組會導(dǎo)致bind失敗報Address already in use排查起來很坑。mei錯就是那種你明明kill了進程端口還是被占用的詭異問題。需要I/O多路復(fù)用的時候用epoll還是select取決于平臺。Linux下優(yōu)先epoll沒有的話退回到select。C源碼里這一層最好封裝一下做一個事件驅(qū)動的統(tǒng)一接口底層用宏區(qū)分平臺這樣代碼跨平臺遷移的時候不用改上層邏輯。3. 核心模塊的實現(xiàn)細節(jié)與關(guān)鍵代碼解讀這一步是源碼分析的重頭戲。很多初學(xué)者看RTSP源碼會卡在RTP打包這一塊覺得位操作太多、晦澀難懂。實際上RTP打包是有規(guī)律可循的理解了一路打包的邏輯其他編碼格式只需要改負載類型和分片策略。3.1 解析RTSP請求字符串處理要穩(wěn)準狠RTSP請求是文本協(xié)議按行分隔。第一行是請求行C源碼里解析的過程其實就是按\r\n切分然后按空格拆出方法、URL、版本號。我見過最穩(wěn)妥的實現(xiàn)是用循環(huán)加指針移動的方式逐字符掃描內(nèi)存而不是依賴strtok因為strtok會修改原字符串而且不可重入。解析的偽代碼思路// 讀取一行的數(shù)據(jù)不含換行符存入line // 用sscanf(line, %s %s %s, method, url, version) 提取三要素 // 然后循環(huán)讀取Header按冒號分割key和value // 直到遇到空行整個Header解析結(jié)束 // 如果有Body繼續(xù)按Content-Length讀取關(guān)鍵點是Content-Length很多RTSP請求尤其ANNOUNCE或者帶SDP的請求會帶body如果只按行讀漏了body會導(dǎo)致請求不完整。讀取時要注意處理粘包一個TCP包可能包含多個RTSP請求用正則或者循環(huán)把數(shù)據(jù)全讀完才能走下一個。Header解析完后C源碼里通常用一個函數(shù)指針表來分發(fā)方法typedef int (*rtsp_handler)(RtspContext *ctx); static const struct { const char *method; rtsp_handler handler; } handlers[] { {OPTIONS, handle_options}, {DESCRIBE, handle_describe}, {SETUP, handle_setup}, {PLAY, handle_play}, {PAUSE, handle_pause}, {TEARDOWN, handle_teardown}, {GET_PARAMETER, handle_get_parameter}, };查表分發(fā)的好處是加新方法只需要注冊一個函數(shù)不需要改一大串if else。源碼的可維護性就是這么一點點摳出來的。3.2 SETUP處理與RTP端口分配SETUP是RTSP交互中最核心的一步??蛻舳藭l(fā)來類似這樣的請求頭Transport: RTP/AVP;unicast;client_port6970-6971這表示客戶端期望用UDP方式接收RTP接收端口是6970RTCP端口是6971。服務(wù)器需要解析出這條Transport然后做兩件事第一決策傳輸模式。如果服務(wù)器支持UDP就直接用客戶端指定的端口往目標IP發(fā)RTP包。如果不支持UDP或者網(wǎng)絡(luò)環(huán)境不允許比如經(jīng)過NAT就要200響應(yīng)里返回Transport: RTP/AVP;unicast;client_port6970-6971;server_port8000-8001告知服務(wù)器對應(yīng)的RTP和RTCP端口。第二如果有多個track比如一個視頻軌一個音頻軌每個track需要獨立SETUP。服務(wù)器這邊要為每個track分配獨立的RTP會話session id相同但track id不同端口對各自獨立。這塊在C代碼里有一個隱蔽bug的高發(fā)點socket的創(chuàng)建時機。很多新手會在SETUP階段才去創(chuàng)建RTP sockets這沒問題但要考慮失敗的情況。如果UDP端口綁定失敗整個SETUP應(yīng)該返回錯誤響應(yīng)而不是讓客戶端以為成功了然后收不到包。我習(xí)慣把socket創(chuàng)建和綁定的結(jié)果作為SETUP成功的前置條件任何一個失敗直接返回500 Internal Server Error。3.3 RTP打包時間戳和序列號是靈魂RTP頭有12字節(jié)固定部分其中兩個字段至關(guān)重要sequence number和timestamp。sequence number每個RTP包加1用于檢測丟包和亂序timestamp由采樣時鐘驅(qū)動用于接收端正確播放節(jié)奏對H.264來說timestamp的遞增單位是90000。為什么是90000因為RTP對視頻的默認時鐘頻率是90kHz一秒鐘有90000個時鐘周期。假設(shè)視頻幀率是25fps那每幀的時間戳增量就是90000 / 25 3600。這個計算一定要準確否則客戶端播放會出現(xiàn)快放、慢放或者音畫不同步。看一段標準的時間戳遞增代碼uint32_t rtp_timestamp 0; uint32_t ts_increment 90000 / fps; // 例如 90000/25 3600 while (frames_remain) { // 讀取一幀H.264數(shù)據(jù) // 打包成一個或多個RTP包 rtp_timestamp ts_increment; }如果視頻源是VFR可變幀率就不能簡單按固定增量算要基于解碼時間戳PTS/DTS來換算。C源碼里一般會傳一個pts值進來rtp_timestamp pts * 90000 / 1000000其中pts單位是微秒。3.4 H.264分包NALU太大怎么塞進MTU一幀H.264的裸數(shù)據(jù)可能幾百KB但RTP包最大也就是以太網(wǎng)MTU減掉IP頭和UDP頭之后的大小約1400字節(jié)。所以源碼里必須做分片。H.264 RTP打包有三種模式單NALU模式NALU小于MTU直接加12字節(jié)RTP頭然后填NALU內(nèi)容FU-A分片NALU太大拆成多個分片每個分片用FU indicator和FU header標記STAP-A聚合多個小的NALU合到一個RTP包里源碼里最常實現(xiàn)的是FU-A分片。分片的邏輯可以用下面這個流程概括。NALU的第一個字節(jié)包含三部分NRI前三位、Type后五位。對于H.264type取值1-23是普通NALU24-27是聚合包和分片包的標志28就是FU-A。處理FU-A時要生成兩個新的字節(jié)FU indicator (NALU頭的高3位保留) | 28表示這是分片F(xiàn)U header 1起始位S 0結(jié)束位E NALU type的低5位起始分片的FU header的S位置1結(jié)束分片的E位置1中間的S和E都為0。C代碼里一個簡單的分片循環(huán)長這樣int fu_payload_size 1400 - 2 - 12; // RTP頭12字節(jié) FU indicator/FU header 2字節(jié) uint8_t *rtp_payload rtp_packet RTP_HEADER_LEN; rtp_payload[0] (nalu[0] 0xE0) | 28; // FU indicator rtp_payload[1] nalu[0] 0x1F; // FU header先不加S/E int offset 1; while (remaining fu_payload_size) { rtp_payload[1] ~0x80; // 清除S位 rtp_payload[1] ~0x40; // 清除E位 if (offset 1) rtp_payload[1] | 0x80; // 第一個分片S位置1 memcpy(rtp_payload 2, nalu offset, fu_payload_size); // 填充RTP頭發(fā)送 offset fu_payload_size; remaining - fu_payload_size; } // 最后一個分片 rtp_payload[1] | 0x40; // E位置1 memcpy(rtp_payload 2, nalu offset, remaining);這個位運算的邏輯不復(fù)雜但極其容易寫錯。我的經(jīng)驗是先把FU header的值打印出來對照Wireshark看一遍確認S和E位是否正確再做大批量數(shù)據(jù)傳輸測試。否則調(diào)試的時候丟包斷流排查到懷疑人生。3.5 會話資源釋放源碼里最容易泄漏的地方C語言項目逃不開的話題就是資源管理。RTSP服務(wù)器的會話生命周期里涉及到的資源包括socket fd、RTP打包緩沖區(qū)、UDP端口、文件句柄如果讀文件推流、線程句柄。很多源碼會在TEARDOWN時只關(guān)閉socket忘了釋放RTP發(fā)送緩沖區(qū)和端口。更隱蔽的是客戶端直接斷網(wǎng)服務(wù)器遲遲收不到TEARDOWN會話就一直掛著。所以源碼里必須有一個超時機制比如最近一次RTSP請求超過60秒則自動清理會話。我一般在會話結(jié)構(gòu)體里維護一個last_active時間戳每次收到合法請求就更新啟動一個后臺清理線程定時掃描。4. 內(nèi)存與性能優(yōu)化C語言實現(xiàn)里的幾個關(guān)鍵取舍服務(wù)端如果跑在嵌入式設(shè)備上CPU和內(nèi)存都有嚴格限制RTSP服務(wù)器的源碼質(zhì)量直接決定它能不能扛住實際壓力。這塊我踩過不少坑也做過很多性能調(diào)優(yōu)挑幾個最有價值的點分享。4.1 零拷貝地使用發(fā)送緩沖區(qū)一次RTP發(fā)送過程中數(shù)據(jù)從H.264裸數(shù)據(jù)到最終發(fā)送的完整RTP包中間會經(jīng)過多次內(nèi)存拷貝。每拷貝一次就浪費一次帶寬和CPU。優(yōu)化思路是在棧上分配一個固定的發(fā)送緩沖區(qū)把RTP頭先填好然后把NALU的分片直接拷貝到緩沖區(qū)對應(yīng)位置一次sendto搞定。不需要額外malloc也減少了內(nèi)存碎片。示例代碼uint8_t send_buf[1500]; uint8_t *rtp_header send_buf; // 填充RTP頭 rtp_header[0] 0x80; // version 2 rtp_header[1] 0x60 | (payload_type 0x7F); // marker PT rtp_header[2] (seq 8) 0xFF; rtp_header[3] seq 0xFF; // ... uint8_t *payload send_buf RTP_HEADER_LEN; payload[0] fu_indicator; payload[1] fu_header; memcpy(payload 2, nalu_data offset, payload_len); sendto(rtp_sock, send_buf, RTP_HEADER_LEN payload_len, 0, (struct sockaddr *)client_addr, sock_len);這個方案實測在低端ARM板子上CPU占用率比每包malloc低三成以上。而且send_buf在棧上分配不會產(chǎn)生堆碎片長時間運行更穩(wěn)定。4.2 環(huán)形緩沖區(qū)平滑B幀突發(fā)流量視頻編碼器輸出不是均勻的一個GOP里關(guān)鍵幀I幀可能瞬間產(chǎn)生幾十KB的數(shù)據(jù)而普通P幀只有幾KB。如果網(wǎng)絡(luò)發(fā)送速度跟不上就需要一個緩沖區(qū)把數(shù)據(jù)先存起來慢慢發(fā)。我常用的方案是環(huán)形緩沖區(qū)ring buffer。發(fā)送線程往里寫RTP發(fā)送線程從里面取讀寫指針加鎖或者用原子操作控制。緩沖區(qū)大小按最大關(guān)鍵幀的兩到三倍預(yù)留保證峰值不丟幀。C源碼實現(xiàn)可以把緩沖區(qū)設(shè)計成定長數(shù)組加讀寫索引避免頻繁malloc導(dǎo)致性能抖動。需要注意的地方是環(huán)形緩沖滿的時候策略怎么定。丟棄新幀還是丟棄舊幀RTSP推流場景我傾向于丟棄還未發(fā)送的舊幀因為視頻流對實時性要求高發(fā)遲了的幀到了客戶端也來不及解碼渲染不如直接丟掉客戶端頂多卡一下解碼器能自己恢復(fù)。4.3 多路復(fù)用的高并發(fā)策略多路攝像頭接入時RTSP服務(wù)器要同時管理多個會話每個會話有自己的socket和RTP狀態(tài)。最早我寫的版本是每會話一個線程接到4路8路沒問題但到16路以上線程切換開銷就很明顯了。后來改成基于epoll的事件循環(huán)主循環(huán)統(tǒng)一管理所有RTSP控制socket的可讀事件再按會話ID分發(fā)到對應(yīng)的處理函數(shù)。RTP發(fā)送這塊保留一個獨立的發(fā)送線程池負責(zé)所有會話的媒體數(shù)據(jù)發(fā)送。實測下來16路并發(fā)CPU占用比純線程模型低了將近40%。如果你的源碼還不支持epoll調(diào)試的時候建議先用poll因為poll跨平臺性更好邏輯也清晰。先把功能跑通再考慮性能優(yōu)化。5. 實際調(diào)試中踩過的坑與排查技巧實錄源碼寫出來只是第一步調(diào)試才是最頭大的環(huán)節(jié)。我把自己這些年搞RTSP調(diào)試壓箱底的經(jīng)驗總結(jié)了一部分這些都是用時間堆出來的教訓(xùn)。5.1 Wireshark是RTSP調(diào)試第一工具無論你多熟悉源碼網(wǎng)絡(luò)層面的問題必須靠抓包工具來定位。Wireshark對RTSP和RTP都有專門的協(xié)議解析器能直接展示請求響應(yīng)、RTP序號、時間戳和SSRC信息。抓包的時候過濾條件可以用rtsp || rtp或者只看某個IP和端口的流量。排查SDP解析問題的快捷辦法用Wireshark跟蹤TCP流然后導(dǎo)出DESCRIBE的響應(yīng)body對照RFC里的SDP規(guī)范逐行檢查。很多時候就是缺了一個acontrol客戶端就找不到trackIDSETUP直接失敗。5.2 RTP包序號跳變和客戶端卡頓RTP sequence number應(yīng)該每個包1如果有人為重傳或者其他邏輯改了計數(shù)客戶端接收端檢測到跳變會認為丟包觸發(fā)丟包重傳邏輯然后造成更大的混亂。我之前遇到過一個問題H.264的FU-A分片里分片的sequence正確但一個NALU內(nèi)部中間漏發(fā)了一個分片Wireshark里看著序號是連續(xù)的其實數(shù)據(jù)不連續(xù)客戶端解碼出來花屏。排查思路很簡單抓一個完整GOP的包統(tǒng)計每個NALU的分片數(shù)量再用工具重構(gòu)原始H.264流用ffplay或Elecard流分析工具看是否有解碼錯誤。一旦定位到漏發(fā)基本就是memcpy的偏移量算錯了回到源碼里檢查offset維護邏輯。5.3 時間戳不同步導(dǎo)致音畫不一致音視頻雙軌的RTSP服務(wù)器最容易翻車的就是音視頻時間戳基準不一致。視頻的timestamp基準和音頻的timestamp基準是不同的時鐘。RFC里建議都用90kHz但實際攝像頭音頻采樣率是8k或16k換算方式不同很容易出現(xiàn)偏差。我調(diào)試過的攝像機源碼里視頻時間戳用的是PTS乘以90k倍率音頻用的卻是采樣率直接當頻率填進去了。結(jié)果就是音頻比視頻快或者慢播放久了聲音和畫面完全對不上。解決方法是明確一個全局時間基準比如以微秒為單位視頻和音頻都從這個基準換算各自的時間戳增量。源碼實現(xiàn)里用統(tǒng)一的timebase轉(zhuǎn)換函數(shù)保證兩邊算法一致問題自然消失。5.4 客戶端直接斷網(wǎng)導(dǎo)致的端口泄漏手機App端測試的人經(jīng)常直接殺進程這時服務(wù)器收不到TEARDOWN如果代碼里沒有心跳超時機制會話就一直掛著UDP端口一直被占用。積累多了資源耗盡新客戶端連不上。我的做法是給每個會話加一個最近活躍時間戳每次收到RTP/RTSP控制包都更新。然后在一個周期任務(wù)里檢查所有會話超過30秒沒有活躍的自動清理并關(guān)閉對應(yīng)socket。別小看這個機制它直接決定服務(wù)器能不能7x24小時穩(wěn)定運行。5.5 C語言RTSP源碼日常問題速查現(xiàn)象可能原因排查動作服務(wù)啟動報Address already in use未設(shè)置SO_REUSEADDR檢查setsockoptDESCRIBE請求返回但客戶端拿不到SDPContent-Length不對或響應(yīng)頭缺空行Wireshark跟蹤TCP流檢查body能SETUP不能PLAY狀態(tài)機未正確流轉(zhuǎn)或方法分發(fā)表缺失日志輸出當前狀態(tài)和目標狀態(tài)RTP包發(fā)出去客戶端收不到端口不匹配或服務(wù)器地址寫錯抓包確認UDP目標端口畫面花屏或頓挫FU-A分片S/E位錯誤或時間戳跳變用Wireshark導(dǎo)出RTP負載分析序列高并發(fā)CPU飆高每包malloc頻繁或線程切換過多改用棧上緩沖區(qū)/事件循環(huán)模型程序崩潰在rtp打包邏輯指針越界或偏移計算錯誤開啟AddressSanitizer編譯測試6. 從源碼到可商用還需要考慮的幾個擴展方向看RTSP服務(wù)器的C源碼如果只是想看懂某個項目或者應(yīng)付課設(shè)前面五節(jié)已經(jīng)夠用。但如果是想在真實項目里落地商用還有幾個點值得繼續(xù)深入。6.1 認證機制不能只靠舉例簡化的RTSP服務(wù)器源碼經(jīng)常把認證省了全部請求都放行。實際產(chǎn)品里至少要支持RFC 2069定義的Basic認證和RFC 2617的Digest認證。Digest認證的C實現(xiàn)復(fù)雜一點要處理隨機數(shù)、MD5哈希、qop策略這些但安全性比Basic高很多不會明文傳密碼。如果源碼里有認證鉤子建議優(yōu)先把Digest做上。6.2 并發(fā)擴展的消息隊列高并發(fā)場景下解碼線程、RTSP控制線程、RTP發(fā)送線程之間需要消息通信。簡單的共享內(nèi)存加鎖容易在復(fù)雜的時序關(guān)系里出問題。我見過一個性能不錯的源碼實現(xiàn)所有線程之間通過無鎖環(huán)形隊列通信生產(chǎn)者只管寫消費者只管讀用內(nèi)存屏障保證可見性。這樣在四核ARM處理器上跑八路流消息延遲可以穩(wěn)定控制在毫秒級。6.3 轉(zhuǎn)發(fā)與錄像并存很多RTSP服務(wù)器的源碼只做了實時轉(zhuǎn)發(fā)沒有本地存儲。但是真實項目里“邊推流邊錄像”是剛需。實現(xiàn)錄像功能時最簡單的方式是加一個訂閱者機制在RTP打包完成的同時把數(shù)據(jù)投遞給錄像模塊錄像模塊按GOP邊界切分保存為MP4或裸H.264。C語言實現(xiàn)里可以用回調(diào)函數(shù)實現(xiàn)這個鉤子業(yè)務(wù)方只需要注冊一個on_rtp_packet函數(shù)就能在不改動主流程的情況下接入錄像、轉(zhuǎn)碼、AI分析等能力。最后再補充一個我的個人習(xí)慣不管讀誰的RTSP服務(wù)器源碼我會先在本地編譯跑通再看代碼結(jié)構(gòu)再用Wireshark對照協(xié)議特征抓包驗證一遍最后再修改代碼做壓力測試。這套流程走下來源碼里藏的各種細節(jié)基本都能被你挖得清清楚楚。如果你也有自己的調(diào)試心得或者踩過什么有意思的坑歡迎交流。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
大香蕉免| 日本幼女18+| 偷拍新久久| 夜夜夜久久| 婷婷深爱五月| 一级黄色牲爱A级片| 久久久精品| 男人天堂毛片| 久久黄黄黄| 国产精品suv一区| 9色在线| 国产精品久久久久久无码红治院| 久久久久国产精品久久久| 秋霞操逼片| 天天操天天干美女网址导航| 久久久久久久久久精| 亚洲精品色| 91亚洲黑人| 成人日韩欧美| 亚洲另类综合欧美| 99精品丰满人妻无| 日本蜜桃| 91激情国产| 伊人在线大香蕉视频久久| 日韩精品9999| 997色在线| 欧美色图99| 中文字幕av一区二区三区人妻少妇| 美性中文综合网| www久久国产精品| 亚洲日韩精品一区二区| 俺去啦俺来也久久综合| 99999国产精品| 日韩成人电影AV| 亚洲素人网| 亚洲综合九| 亚洲Av噜噜一区二区三区妖精| 久久不卡一区二区 | 伊人国产AV| 色路综合| 欧美日韩 强奸乱伦| 亚洲1区| 情色日播放AV| 国产精品对白自产拍| 亚洲性网| 青木玲在线不卡| 天美一区在线| 亚洲精品一二牛牛| 久久 国产精品 一区| 亚洲中文字幕乱码无码一区二区| 天堂精品一区| 亚洲精品国产熟女| 久久99黄色卞西瓜| 欧美在线电影| 免费簧片在线观看| 求求你操操我| 黄片www视频免费| 伊人影院综合是一个与深夜成人在线| 国产suv精品一区二区四区999| 青青草日本中文字幕| 日韩精品午夜操呦呦不卡影院| 在线午夜成人无码视频| 蜜桃久久一区| 国产精品免费日韩| 国产综合久久久鬼色| 精品一区二区亚洲国产| 日韩二区三四区五区六区在线看| 最近二区三区视频大全| 欧美精品人妻视频| 国产成人精品无码久久| 日韩成人性日韩成人性爱视频在线免费观看| 久久久久久九九九九九九| 九九人妻| 亚洲三区视频| 神马久久久久久| 日韩天天本| 午夜男女爽爽爽在线视频| 日本精品一级二级三级| 欧美色乱| 亚洲人妻精品一区二区| 97超碰欧美手机在线| 99精品伊人| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 中国熟妇| 啊啊啊啊,啊啊好多水| 香港日本韩国人妇99www.wccm20| a级免费在线观看| 亚洲综合另类色图| 久久久九九| 欧美一区二区成人一卡| 青青操在线亚洲视频观看欧美在线 | 欧美 色 亚洲| 婷婷九月丁香| 久久蜜桃一区二区| 黄页网站成人免费| 98超碰欧美| 国产后入清纯| 很很很很操| 熟女天天干| 骚逼高潮久久精品| 五月天婷婷色色| 国产精品久久伊人| 日本天天人人狠狠在线日美女 | 91丨熟女丨丰满熟女| 国产精品成人久久一区二区三区| 大香蕉视频一二三区| 久久国产AⅤ| 精品免费视频国产一区| 欧美激情激情xxxx欧美专区| av三级电影在线播放| 亚洲精品97| 日本一级特级毛片视频| 中国国产精品一区视频| 精品人妻一区| 无码 有码 国产18p| 日韩AV一起草| 国产视频一区二区三区久久亚洲天堂 | 久久区| 五月情色天| 亚洲在饯| 久久久99免费| 岛国视频免费在线观看| 狠狠激情综合狠狠操中文字幕| 人人操,操人人| 中文字幕 国产区| 韩国黄色片精品久久久| 97舔舔| 蜜臀人妻少妇久久在线观看| 啊啊啊啊无码| 91在线视频国产网站| 蜜臀久久99精品久久久久| 成人精品无码| 可以在线观看AV的网站| 日韩一级片| 人妻加勒比东京热| 美骚妇av高清在线| 久久精品人妻一区二区三区| 国产婷婷综合在线观看| 综合久久六月久久婷婷| 亚码激情| 国产精品久久久久久久久久久久久久久| 91超碰在线播放| 午夜啊啊| 成人麻豆av电影网站| 日本黄 R色 成 人网站| 人妻天天爽夜夜爽精品2| 97精品国产精品免费观看| 久肏视频字幕| 国产AV色黄看到爽| 丁香六月啪啪| 东京热精品97综合网| 凹凸 69堂 在线播放| 91综合色噜噜| 国产版a级片直播在线| 亚洲精品久久久久久久久豆丁网| 色臀aV| 少妇一区二区三区| 中文字幕啊啊啊在线观看视频| 欧美成不卡网| 欧美日韩制服| 久久国产热视频97电影| 欧美 熟女 日韩| 久久久夜夜夜| HEYZO高无码国产精品227| 五月天婷婷激情| 后入式在线免费观看60秒| 黑人精品欧美一区二区蜜桃| 自怕偷自怕亚洲精品| 九九碰九九爱97超碰| 亚洲精品天天影视综合网 | 久久宗合97| 亚洲一区二区三区不卡国产欧美| 夂久色| 丝袜视频网国产90| 亚洲欧美自拍偷拍| 久久久不卡区一区二区三区久久久| 97视频免费播放| 中日韩欧美精品无码AⅤ一区二区| 日韩人妻精品久久久久| 精品女同一区二区三区| 午夜120视频在线观看| 亚洲色鬼| 99999亚洲| 啪啪啪大香蕉| 亚洲成成熟女人综合一区二区| 女人 A一级| 999综合色| 欧美不卡在线一区二区| 台湾大香蕉99热| 黑人娇小av在线播放| 天天爽天天爽| 亚洲日韩精品一区二区| 日韩精品区二区三区不卡| aV中文麻| 色婷五月| 亚洲Av诱惑| 久久久久久AⅤ无码免费肉站 | 性videos欧美熟妇hdx| 91色艳| 91爱啪| 丁香五月激情网| 久久日韩肥臀| 天天影视色香色欲| 亚洲国产美女久久久久| 射欧美综合| 欧美性生活免费网| 鸥美极品| 强免费黄色网址| 精品国产乱码久久久久久日本公司| 欧亚性爱在线视频| 校园春色美腿丝袜 | 日本日皮视频逼| 尤物视频偷拍免费| 99ri在线视频| av三级电影在线播放| 一个人在线看的黄色电影网站| 亚洲一区在线观看欧洲| 中文字幕诱惑制服人妻丝袜美丝袜美 | 四虎免费在线播放| 色婷婷丁香五月| 亚洲在线a| 91色噜噜狠狠| 亚欧视频在线| 天天肏天天干| 91丝袜熟女| 殴美在线AⅤ| 大香久久| 91N综合在线| 国产和美国毛片| 一级A片女人高潮叫床| 亚洲欧美视| 大稥蕉免费视频这里只有精品| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 女人喷水视频在线观看| 欧美日韩人妻精品系列一区二区三区| 久久99国产综合精品女同| 一二三四视频中文字幕在线看| 亚洲丝袜99| 亚洲 欧美 91| 国产女生在线| 日本1区2区不卡视频| 亚洲系列欧美| 丝袜喷水在线| 丁香六月激情综合| 无码操逼网| 97久久久久| 国产美女91视频| 97任你吞精| 欧美日韩大香蕉| 安微少妇操BBB| 中文字幕天天天天天| av凤凰久久久| 无码日韩人妻av一| 欧美成年人性爱视频免费观看| 1024午夜激情男人的天堂| renqi久久久久久久久久久久| 亚洲一区操| 日韩三级av片| 亚洲欧洲激情| 综合网欧| 91爱综合| 精品一区二区三区蜜桃臀赵总| 国产在线观看91精品一区| 999岛国大片| A片A5445444| 国产搭汕a级片| 精品十三区| 少妇一线天久久久久久| 在线播放中文字幕| 色婷婷激一区二区三区| 欧美成年人性爱视频免费观看| 日日躁天天躁狠狠躁| 久久精品视频在线观看| 九九成人精品| 99国产天美| 久久久久免费少妇| 色色色999| 亚洲日韩成人性爱视频| 日韩久久.一级黄色片| 国产肏逼网站| 亚洲春色一区二区三区| 中日韓欧美高清| 精品国产a∨一区天美传媒| 国产视频第2页| 亚洲少妇激情视频| 亚洲视频一二区| 91蜜臀在线久久久久| 狠狠色丁香| 99在线观看| 亚洲精品成人激情在线| 亚洲九月丁香| 97人人干| 超碰公开久久网| 久久久久成人蜜桃精品| 国产剧情一区在线观看| 97久精品| 日本五十路在线| 亚洲精品欧洲精品| 96国产污污污丝袜| 久久6热精品99视频| 精品999日本| 大香蕉99热| 10000部十八禁看电影| 91在线限制级| 很狠操| 久久精品操| 亚洲AV无码天美传媒一区| 亚洲欧美大| 久久a久久| 久久色一区| 日本啊啊啊啊啊视频| 欧美色日本| 骚人妻少妇视频| 久肏视频字幕| 大二网站亚洲| 亚洲AV无线| 91精品久久久久久77777| 婷婷五月天激情四射| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产青视频| 91高潮喷水美女| 精品少妇一区二区| 亚洲中文字幕在线视频一区二区| 老司机天天操| 成人性爱电影网| 国产精品老熟女一区二区| 综合久草| 曰韩少妇无码| 亚洲天堂久久久久久粉红视频| 人人看人人插| 色九九综合| 久久9久9久99久9久9| 夜精品久无码| 亚洲熟女人妻中文字幕一区二区| 国产日韩区| 天天弄天天操| 91天射| 亚洲日韩精品一区二区| 再深点灬舒服灬太大了添视频| 一区二区三区激情在线观看| 78综合网| 欧美线天码中字| 午夜舔阴达高潮视频免费看| 人妻丰满熟妇av无码区蜜桃| 久久这里只精品免费福利| 亚洲黄色a级片| 麻豆久久久一区二区| 久操在97| 少妇高潮流水av免费| www.av在线观看| 婷婷色香| 成年人网站在线免费观看| 亚洲天堂无码| 91强在线播放| 丁香六月激情| JULIA人妻风俗店中出电影| 久久九九精品一区二区 | 97操综合| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 操操操五月天婷婷丁香影院| 婷婷丁香六月天| 国产女人9999| 成人av在线播放| 欧美淫穴| 青草精品视频一日本久久久久网站| 777琪琪午夜免费A片| 青青网三级视频| 精品二区久久| 国产亚洲精品第一最新| 黑人粗大V S日韩女优视频| 久久日韩精品一区二区| 亚洲中文字幕有码视频一区二区三区| 欧美激情高清性猛交| 国产成人精品日本亚洲语言| 欧美天堂亚洲电影院一区在线播放| av亚欧| 夜夜嗨一区二区| 九九九九热只有精品| 日韩黄色一区二区三区| 特级丰满少妇一级AAAA爱毛片 | 精品v日韩欧美国产| 91成人国产综合久久精品蜜月| 中文字幕乱亚洲美女精品一区| 人人扣人人操| 夜夜高潮夜夜爽夜夜爱爱一区| 96久久精品一二三区色欲| 91久久久老司机| 国产成人综合在线播放| 91 综合 色| 国产精品久久99日日| silk lablo在线观看一区二区| 尹人免费观看视频在线| 久久神马影院| 男人的天堂一区三区| 97国产精品久久久久| 黄色毛片A片| 亚洲另类色综合网站| 中文字幕日本久久| 久久久青青草| 97干日韩| 欧美一区二区三区互相| 色香在线| 亚洲一区中文字幕一区| 国产91精品在线免费| 岛国人妻少妇av在线观看| 亚洲国产一区二区日韩专区| 看看日B真人视频| 在线国产探花| 人人弄人人摸| 亚洲欧洲无码一区夜| 多乙久久久久久| 97人人夜| 久久久久久久久久久久久久久乱码| 午夜福利国产欧美日韩夜夜| 成人片视频| 久草视频分类在线| 国产中出内射一区二区| 天天躁狠狠躁av| 99综合视频| 欧美亚洲自拍另类人妻| 性欧美精| 色色热| av在线播放国产一区| 99热日| 五月婷丁香| 日婷婷| 人妻喷水| 一级AV性爱| 久久人妻无码毛片A片麻豆| 婷婷六月色| 岛国1区2区3区在线观看| 涩涩久久精品| 草草影院在线视频| 欧美黄片免费在线观看视频| 亚洲熟女av中文字幕| 男人 天堂 日 亚洲| 亚洲色综合| 中文字幕美女91| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | av优播| 色婷婷视频| 久久精品国产亚洲AV先锋| 60秒免费视频| 亚州综合AⅤ| 夂久色| 国产又大又硬又长又粗| 日韩免费福利在线观看| 欧美丝袜中文字幕07在线| 婷婷丁香一区二区三区| 久久9精品视频| 超碰成人国产| 日韩精品碰碰| 小说区 图片区色 综合区| 中文字幕一品色图| 91欧美丨精品丨入口| 麻豆视频test| 伊人AAA| 精品性爱无码在线播放| 国产白嫩漂亮KTV在线| 9色国产精品一区粉嫩| 久久久久熟女| 国产视频97| 国产欧美后入| 动漫av中文| 成人日本精品九区| 欧亚乱色熟一区二区三四区| 95人妻爽爽人人做人人澡| 无码免费精品高清| 91成人久久 | 超碰免费人妻人人| 国产精品午夜AV完会免费| 久草看看看| 四虎884| 香蕉国产97| 日本性一区| 日本欧美m v精品网站加| 国产熟妇一区二区| 99re69| 二对二中文字幕。| 97干天天| 97视频www| 欧美一级专区免费大片 | 搞中出久久| 青春草A| 久操com| 国产免费内射视频| 欧美偷拍| 性影在线视频| 欧美激情 一区| www.色婷婷| 色吧91| 青青草在线视频人人想人人上| 久久精品人妻一区| 日日A∨| 夜夜影视四色| 91精品人妻一区二区三区蜜桃| 日本 成 人 小说 电影 一区二区| 97超碰精品| 国产精品色哟哟| 美女一区二区国产精品| 91丝袜在线播放| 国产亚卅97| 白嫩国模丰满一二三区| 国产老太乱伦一区| 亚洲熟妇综合久久久久久| 99无码视频| 三男一女不戴套的A片| 亚洲熟女乱色一区二区三区久久久 | 久久有码视频| 国产一区麻豆免费观看| 在线播放中文字幕| 国产精品人人爽人人做可爱福利| 人人澡人人澡人人| 18岁禁 茉莉成人久久| 性爱av在线免费观看| 亚洲国产成人精品久久久国产成人一区二区| 亚州色图欧美| 亚洲有码 视频一区| 蜜乳AV一区| 综合97| 91在线丝袜| 97色色国产视频| 长长久久88视频| 精品欧美А∨无码黑人大荫蒂| 美女好片色日本| 欧美成人一区二区| 免费农村成人少妇人妻Aa一区二区视频 | 强奸乱伦中文字幕AV| 2019天天干| 成人草草视频| 内射黑丝袜| 狠肏骚人妻| 女优视频第10页| 在线v中文字幕一区二区三区| 国产成年女黄特黄| 酒色综合网| 美女上床网站| 日韩亚洲97| 人妻酒店出差被中出免费在线播放| 天天色综合图片| 色色五月婷| 无码日韩网站| 被体育老师抱着c到高潮| 亚洲无线码欧洲精品区别| 亚洲国产精品久久AV| 夜夜欢天天干| 日本二三四区| 中文字幕视频在线观看| 久久东京热成人| 欧美色图片色哟哟| 黄久久| 无卡一区=区| 丝袜色综合| 中文字幕视频免费| 欧美玖玖爱免费玖玖| 粉嫩久久久久| 日韩精品影视| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 偷拍片久久| 少好三P| 91色人| 天天天做天天天爱天天天爽| 色99久草| 日韩在线电影| 欧美不卡五十路| 一个人免费视频观看在线WWW| 欧美色宗合| 精品国产一区探花在线观看| 国产精品探花色| 无码人妻精品一区二区中文| 在线观看色视频| 国产强奸超碰AV| 激情综合亚洲| 精品无码一区二区| 激情欧美日韩女同久久| 久久久熟女一区| 揉揉揉夜夜| 亚洲精品97| 天天插夜夜操| 日本精品不卡一二三区| 国产11页| 国产白丝在线| 欧美97网| 超碰国产精品无码| 亚洲福利中文字幕在线| 极品五月天噜噜| 色av中文字幕| 国产2.3.4区| 2017大香蕉| 激情网色| 91人妻爽爽人人做人人澡| 女同性恋一区二区三区精品视频| 亚州高清av| 丝袜足交视频| 一区二区三区黄色片a| 天堂种子在线www网资源| 欧美日韩超碰在线| 欧美影音在线| 中文字幕乱码在线| 日韩精品黄片免费观看| 久久99国产综合精品女同| 91丝袜在线视频| 在线不欧美| 91c色| 人人乐大香蕉| 亚洲AV色图一区| 伊人热综合| 久久99综合| 亚av顶级裸体一区二区三区四区五区 | 99久久99久久免费精品蜜臀| 强奸乱伦中文字幕AV| 中文啪啪视频| 91超碰丝袜制服| 国产探花日韩援交| 国产精品一二三区福利| 青青草一区二区三区四| 综合激情二| 激激五月| 亚洲精品国产拍免费91在线| 免费αⅴ在线观看| 超碰国产情侣自拍网| 精品人妻一区二区三区不卡断| 大香蕉www.超碰| 日韩免费人妻色情网站| 天天影视综合色| 日韩 欧美 另类 人妻| 99re9这里只有精品| 伊人91| 九九色图| 亚洲中文字幕久久无码精品| 欧美黑人精品在线播放| 日日A∨| 色视频蜜乳| 小草精彩毛片| 九九碰九九爱97超| 精品区9| 日本男人天堂| 丁香五月天视频| 死我十八禁| JIZZJIZZ国产精品喷水| 中亚黄色三级大片| 欧美少妇性爱网站| 久久婷婷欧美| 亚洲成人久久一区二区| 久久久久网站-538在线视频-欧美永久乱码 | 精品九九九| AV天堂丝袜| 懂色aV一区二区天美传媒| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 18精品一二区| www超碰| 日本黄色精品| 亚洲中文字幕噜噜噜久久久| 激情一区二区| 亚洲天堂女优在线| 性饥渴少妇av无码毛片| 啊啊啊啊啊啊好湿好爽视频| 国内偷自视频区视频综合| 日韩懂色网| 欧美亚洲尤物久久| 丝袜狂射91| 思思热免费视频观看| 久久蜜桃一区二区| av天堂影视中文在字幕在线中文| 97色在线视频| 精品国产一区二区三区久久久蜜臀| 亚洲国产成人精品久久久国产成人一区二区| 欧美色图亚洲色图成人在在线| 青春草莓视频在线观看网址| 久久夜嗨| 色噜噜人妻丝袜a∨先锋影 | 日日噜噜夜夜狠狠视频无| 色综和网| 成年女人18级毛片毛片免费观看| suv精产一二三区| 日本青青草在线| 日韩在线一区高清在线| 亚洲自拍青操视频| 日本人体九九九九九九| 久久久久久久久久久免费精品| 天堂涩涩| 婷婷五月影院| 久久久久久电影| 久久成人东京热人妻| 久久久久13| 国产一区在线观看无码AV| 哑洲在线| 东北女人的毛片| 一区在线国产播放| 日韩综合无码一区久久92| 色偷偷色偷偷欧美日韩| 五月丁香成人网| 欧美性生活男人的天堂| 成人情色综合网| 青青草伊人久久| 久久久精品成人国产| 污色区网站| 中文字幕午夜精品久久久| 美女黄页| 无码国产精品午夜不卡(| 亚洲欧美国产va在线播放频| 人妻熟女一区二区| 日本精品88888888| 婷婷综合网| 国产黄片精品在线| 超碰97中文| 韩国嫰模上门援交视频| 久久夜色一区二区| 五月丁香网站| 福利在线黄片| 在线色导航| 在线午夜成人无码视频| 久久久月天| 久久久久78| 人人操天天爽| 又大又白奶子| 91热爆在线| 人妻系列无码专区中文有码| 你懂的在线观看区国产| 天天网综合| 日韩无码服务区| 亚洲人码13| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲交性| 欧美色图小说综合| 中文久久96| 久久111| 亚洲AV资源| 看日韩美女二区三区免费操逼视频 | 屌妞视频久久久久久久 | 青青操网| 97无码视频在线播放| 色97干| 久久高潮妇女视频| 不卡一区二区日本视频| 欧美性爱日韩高清| 人妻9117c| 九九综合九九综合| 性天堂| 日本一区二区中文字幕久久| 欧美天天弄| 久热一区二区| 91操熟女| 午夜小电影在线插入淫高潮| 99无码狠狠久久| 男人的天堂 在线一区| 中文字幕99999| 蜜臀久久99精品久久久久| 在线不欧美| 熟妇乱伦一区二区| 99久久国产精品免费高潮| 欧美一级A一级a爱片久久| 日韩在线国产字幕| 久久性爱视频99| 亚洲激情综合另类男同| 久久久久久一日韩字幕无码| 国产 日韩 欧美高清| 亚洲少妇综合在线播放| 国产人妻天天干精品| 日本午夜久久电影| 久久99操天天日| 日本丝袜美腿人妻九九| 人妻在线大香蕉| 久久机热| 亚洲在线91| 日韩性爱免费观看视频| 秋霞无码av鲁丝片一区| 巨爆乳肉感一区二区三区竹菊影视| 九九99精品| 亚洲色图在线视频| 青青草国产盗摄一二三区| 欧美丝袜美女电影一二三四区| 男人天堂最新手机版在线青青草| 久操免费观看| 国产美女口爆吞精视频| 嫖老熟女A片一二三区| 婷婷五月天av| 人妻在线大香蕉| 欧美色蜜桃97| 中文字幕日韩专区精品系列| www黄片免费看com| 国产 日韩 欧美 人妻 熟女 中文| 亚洲欧美中日韩| 极品色电影院| 亚洲国产成人精品女人久久久| 偷拍三区| 嗯啊不要啊在线 | 一本色道久久综合狠狠操| 天天92av| 综合影视国产无码| 日韩pv中文| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 日本午夜福利影院| 熟女一区二区| 免费视频观看60秒| 亚洲色系另类精品国产| 99免费视频| 97超碰中文| 日韩国产精品人妻无码久久久| 最近2019中文字幕国语免费版| 熟妇高潮一区二区免费视频| 丰满人妻一区二区中文| 亚洲国产丝袜熟女av| 97国产成人精品免费视频| 久久蜜色情在线视频xxx免费观看| 欧美丝袜91| 夜夜影视四色| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 97在线免费观看视频| 日韩性爱再线视频| 亚洲蜜臀懂色| 美女被啪到深处抽搐视频| 欧美人人AAA| 亚洲精品蜜桃久久久久久久| 久久婷婷电影网| 欧美精品第3页| 人人操人人精品影片| 高清国产成人无码| 99热aaa| 91久久久亚洲| 精品久久在线区一区| 91 偷| 美日韩成人| 91精品操美女| 中文字幕精品区先锋资源| 久久一本大香蕉 | 福利在线黄片| 物业黑人 AV一区| 啪啪免费| 黄色十八禁| 999亚洲国产视频| 1204金沙人妻懂旧版免费| 国产一区二区在线播放量| 国产有码一区| 久久性爱视频99| a级免费在线观看| 狠狠中文字幕| 精品国产Av无码久久久伦古装| 丝袜美腿诱惑亚洲欧美视频在线观看 | 婷婷国产精品一区二区| 国产AV高清AV无码| 91男人综合| 亚洲超碰在线| 色九久| 久久久久骚| 蜜臀一区二区三区在线| 青青草吊丝| 中文字幕高清精品一区| 欧美国产成人在线| 欧美强奸乱能| 91精品操美女| 91蜜桃婷婷狠狠久久综合9色| 欧色网址| 国产伦精品免编号公布| 黑人精品XXX一区一二区| 屌妞视频久久久久久久久久久久| 99久久久无码精品国产人| 亚洲综合图文| 无码免费精品高清| 久久国产精品m码| 国产精品熟女AV中文字幕在线播放| 97无码视频在线播放| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 狠狠色丁香| 97国产精品视频| 日本人妻天堂网站在线播放| 大香网站| 夜夜躁狠狠躁日日躁av| 亚洲中文字幕乱码无码一区二区 | 日韩传媒在线| 久久久精品无码亚免费| 超碰地址久久| 美腿丝袜高跟网免费视频免费视频| 欧美日韩国产中文精品字幕自在自线| 超碰97人人乐| 久久久久9久久久久| 日逼视频日本| 大香蕉日韩| 精品视频专区| 第一高清av中文字幕| 一起草三级AV电影在线观看 | 操b网站亚洲无码| 国产 v乱码一区二| 精品无码久久久久久久杏吧| 久久草视频污视频| 国语人妻精彩刺激| 国产曰批免费观看久久久| 大逼色网站| 男人 天堂 日 亚洲| 香蕉久久国产AV一区二区| A级片日韩欧美国产欧美视频精选观看| 97视频在线免费播放| 吻戏激情性巴克| 美国aaaaa一级黄片| 日韩欧美加勒比| 亚洲色图日韩精品| V A在线| 欧美亚洲中文字幕| 精品性爱久久视频| 2001天天操| 免费看欧美美女黄色大片| 欧美人与动性人交a| 欧美色老汉| 亚洲日韩久久精品一区| 欧美有码亚洲中文字幕一区二区三区四区| 一区三区啪啪| 以及麻豆国产入口在线观看免费| 亚洲毛片久久| 69丨亚洲丨精品丨入口免费播放| 九九九网页| 国产成人网站在线观看| 中文字幕91页| 永久免费av无码网站国产app | 不卡人妻少妇精品毛片一区23区视频| 熟女被操视频网址| 欧美一级国产一级| 日韩无码操逼片| 性色AV蜜色av色欲av| 欧美92| 久久久久久久久久久久97| www. 男人天堂成人在线| 免费人人搞97| 日本伦理一区二区| 久久免费中文字幕在线观看| 久久久激情| 90后性网国产欧美| 亚洲成人无码影院| 午夜一区二区三区国产| 亚洲日韩视频二区| 91看黄片| 干我久操| 另类TS人妖一区二区三区| 人妻一区二区三区四区视频| 国产精品久久久久久久久久久久| 97操B| 96国产精品| 精品国产乱码久久久影院| 99精品无码| 九九九九一区| 黄色成年| 97视频免费| 久久久久久97| 在线a亚洲视频播放在线| 91综合网| 肏逼福利网站| www.99色| 亚洲天堂AV在线播放| 亚洲精美粉嫩嫩泬在线观看| 色乱二区| 亚洲欧美日韩夜夜| 国产久久久久久久久一区二区| 嫖老熟女A片一二三区| 黄片www.| 91碰碰碰| 免费看污网站| 午夜福利区| 国产中午字一暮区| 伊香蕉综合久久久久久久噜噜噜| 欧美激情专区| 国产又黄又粗又猛大片 | 欧美亚洲se91| 大干人妻| 色逼综合| 最新国内自拍av免费| 无码精品人妻一区二区三区妖精 | 欧美在线电影| 男女啪啪网站免费视频| 午夜福利无毒不卡| 澳门特级毛片免费观看| AA丁香综合激情| 亚洲乱色视频一区、二区在线| 加勒比综合九九99视频在线播放| 欧美一品道| 精品久久97| 国模私拍一区二区三区神乳| 人妻日日干| 日本不卡一二区| 国产黄色小视频网站| 夜色AV无码手机在线影院| 国产成人亚洲精品自产在线| 91伊人影视综合| 欧美日韩不卡传媒| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 亚洲国产av中文字幕久久| 国产成人无码久久精品| 九九九九九九亚洲| 欧亚韩国999| 人人弄人人摸| 五月天色色网站| 嗯嗯啊啊亚欧精品| 午夜福利合集| 婷婷在线视频在线观看| 操一区| 蜜臀久久久| 免费试看60秒| 操屄不卡视频| 妇女视频网站| 男人的天堂va| 国产精品无码在线| 91夜色chaopeng| 男人的天堂VA| 你想操日本小逼吗| 丰满少妇一区二区三区专区| 天天碰久久入| 久久久久久亚洲中文| 骚货人妻偷情自拍在线视频| 日日干夜夜骑| 1人人看人人摸人人操| 天综合中文| 色婷婷A V一二三四区麻豆综合| 国产兽交视频在线播放| 五月婷婷影院| 伊人四虎综合| 国产高清精品一区二区三区毛片 | 97精品一区二区视频| 丁香五月天堂| 91热色| 91在线视频免费播放| 春色校园综合网| 精品亚洲| 成人资源中文字幕在线观看天天| 熟妇一区,二区,三区。| 97在线精品观看视频| 啊啊啊啊啊在线观看网址| 欧洲精品二区| 爱我干综合| 人妻 欧美亚洲| 狼狼色丁香久久婷婷综合五月| 青青草吊丝| 91社区伊人| 情色日播放AV| 91亚洲高清| 色五91| 97干97色| 日本曲间由美性生活片| 精品天堂| 99热综合| 丰满人妻-区二区三区免费看 | 亚洲性刺激| 欧美特大黄一级片片免费| 久久国产999| 欧美日韩国产色图在线| 999熟女精品| 国产女人操逼视频| 伦理日韩国产久久| 亚洲精品精品一区二区| 日本五区不卡| 精品久久99| 欧美日韩传媒| 偷拍欧美激情| 成人26uuu| 亚洲诱惑| 国内毛片国产专区二| 久久久96精品| 亚洲成人免费在线| 九色黄站| 国产天天骚| 久思思热视频在线观看| 久操影视| av凤凰久久久| 欧美美女视频| 97二区四区| 久久久久亚洲av综合波多野制衣| 九九九九精品一区| 黑人精品成人一区二区三区 | 三级片网站在线播放| 大粗鳼巴久久久久| 日本免费一区二| 国产最新小视频在线播放下载| 97一区二区三区视频| 久久鲁干| 天天做天天爱| av麻豆啪啪| **一级毛片国产| 大色综合| 色拍偷亚洲| 丁香六月婷婷综合| 国产精品麻豆成人av| 亚洲诱惑天堂 | 亚洲熟女av中文字幕| 老熟女熟妇| 免费啪啪啪网站18岁| 97视频免费在线观看| 国产精品天干天干综合网麻豆| 国产免费永久精品无码| 亚洲春色一区二区三区| 欧美最大综合网| 97色冈| 国产成人www免费人成看片| 91美女视频在线观看| 少妇三P| 国产久久一区二区午夜| 国产宅男宅女在线观看| 色妇综合网| 玖玖爱伊人玖玖爱| 日韩欧美亚洲国产日韩| 国产97视频免费观看| 精品无码久久久久久久杏吧| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 激情综合五月天| 性爱乱伦视频免费| 男人天堂新在线| 亚洲综合射| 精彩视频日韩| 婷婷亚洲天堂| 深夜国产一区二区三区在线看| 久久久999日本大片| 大香蕉天天看妹子| 99热只有这里有精品| 国产无码高清操逼视频| 日日躁夜夜躁狠狠躁超爽| av一区二区三区四区五区久草臀| 精品色色| 网页导航五月天免费一二三区| 91在线视频国产网站| 啊啊啊啊啊啊啊国| 99婷婷| 欧美天天| 国产综合久| 精品久久久av| 五月婷色| 手机看av网站在线看| 欧美综合国产精品久久丁香| 999久久久国产精品| 色综九九九一区| 91国内外在线| 男人的天堂2000| 日本 免费 一区二区三区 久久香蕉| 亚洲高潮少妇| 色色五月婷婷| 成人黑料社久久| 国产乱人伦AVA麻豆软件.| 国产无码高清操逼视频| 精品免费视频国产一区| 亚洲国产精品成人久久蜜臀| 粉嫩av一区二区三区天美传媒| 亚州精品人妻一二三区| 久久视频,这里只有精品| 蜜臀亚洲综合一二三四区| 目产99999久久999| 亚洲欧美性生活| 91偷拍欧美亚洲| 色欲人妻一区二区在线| 黄色高清久久无码依人| 天天天肏屄欧美| 国产精品网站www| 日日夜夜草草草| 后入式在线免费观看60秒| 夜夜 中文视频rt| 超碰久久精品| 欲女人妻性色av| 美女上床网站| 欧美78P| 试看60秒 爽| 毛片久久| 欧美一区二区三区四区综合| 欧美日韩黄片精品在线| 人人看欧美性爱| 国产a级午夜毛片| 玖玖色综合|