久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

Qt+FFmpeg播放器源碼解析:音視頻同步與渲染實(shí)踐

Qt+FFmpeg播放器源碼解析:音視頻同步與渲染實(shí)踐 簡(jiǎn)介一套基于Qt5與FFmpeg開(kāi)發(fā)的視頻播放器完整源碼工程面向需要學(xué)習(xí)音視頻解碼與Qt界面編程的開(kāi)發(fā)者也適合在已有項(xiàng)目中快速加入播放功能。壓縮包共43個(gè)文件大小約20.08MB既包含C源碼、界面文件、資源文件和工程配置也保留了構(gòu)建日志與調(diào)試文件并附帶flv測(cè)試視頻其中.pro方案可配合qmake使用.sln/.vcxproj便于在Visual Studio中打開(kāi).ui與.qrc則對(duì)應(yīng)界面布局和資源管理。目前已有2453人學(xué)習(xí)下載具備一定參考價(jià)值。源碼覆蓋播放器主界面、控制交互、FFmpeg初始化解碼以及視頻幀讀取與顯示等核心環(huán)節(jié)從工程搭建到播放邏輯都給出可直接運(yùn)行的版本復(fù)制后配置好Qt與FFmpeg環(huán)境即可編譯使用也可在此基礎(chǔ)之上擴(kuò)展音視頻同步、倍率播放等功能是桌面播放器開(kāi)發(fā)的實(shí)用樣本。1. 為什么播放器源碼里最難的不是解碼先說(shuō)結(jié)論用 Qt 和 FFmpeg 寫(xiě)視頻播放器解碼器的調(diào)用只是查文檔的功夫真正讓開(kāi)發(fā)者熬夜的是音視頻同步、線程模型、渲染路徑這三件事。網(wǎng)上能搜到的播放器源碼大部分能跑通但畫(huà)面卡頓、聲音超前、拖動(dòng)進(jìn)度條后對(duì)不上嘴型這些問(wèn)題恰恰是源碼里最值得抄作業(yè)的部分。這篇文章面向兩類(lèi)讀者一是想拿一套可復(fù)用的 Qt FFmpeg 播放器源碼做二次開(kāi)發(fā)的開(kāi)發(fā)者二是正在從零寫(xiě)播放器、想知道每一步該怎么選型和避坑的初學(xué)者。我會(huì)把一條可落地的技術(shù)路線拆開(kāi)講先講為什么這么設(shè)計(jì)再講每一步怎么實(shí)現(xiàn)最后給參數(shù)和踩坑清單。你不需要從零發(fā)明播放器但需要理解源碼里每一層在解決什么問(wèn)題這樣改起來(lái)才有底氣。2. 播放器的整體架構(gòu)解碼、隊(duì)列、渲染的三角關(guān)系2.1 為什么必須用多線程單線程解碼會(huì)卡死界面播放器的核心鏈路是讀文件、解封裝、解碼、轉(zhuǎn)換格式、渲染。如果全部放在 UI 線程里解碼一幀 1080p 視頻大約需要 20 到 50 毫秒加上音頻處理和渲染開(kāi)銷(xiāo)UI 線程會(huì)被占用大半。窗口拖動(dòng)、按鈕點(diǎn)擊都會(huì)變得遲鈍甚至直接卡死。常見(jiàn)的做法是把這條鏈路拆成三個(gè)線程解封裝與解碼線程、音頻播放線程、視頻渲染線程。三個(gè)線程之間用隊(duì)列解耦解碼線程只管往隊(duì)列里塞數(shù)據(jù)渲染線程按自己的節(jié)奏取數(shù)據(jù)互不等待。[解封裝/解碼線程] - [視頻隊(duì)列] - [視頻渲染線程] - [音頻隊(duì)列] - [音頻輸出設(shè)備]如果你拿到的源碼只有一個(gè)線程那它多半只是教學(xué) Demo支撐不了長(zhǎng)時(shí)間播放或高分辨率視頻。動(dòng)手改造的第一步就是確認(rèn)線程模型是否已經(jīng)拆開(kāi)。2.2 隊(duì)列緩沖為什么不能解碼一幀就渲染一幀解碼器的輸出速度不是均勻的。視頻的 I 幀可能瞬間解碼出大塊數(shù)據(jù)B 幀則快很多。如果解碼一幀立刻渲染一幀畫(huà)面節(jié)奏會(huì)跟著解碼速度走而不是跟著時(shí)間軸走表現(xiàn)出來(lái)的就是忽快忽慢。隊(duì)列在這個(gè)環(huán)節(jié)起到兩個(gè)作用一是吸收解碼速度的抖動(dòng)讓渲染線程有穩(wěn)定的數(shù)據(jù)來(lái)源二是為音視頻同步提供緩沖空間。沒(méi)有隊(duì)列同步邏輯無(wú)從談起。我見(jiàn)過(guò)不少新手把隊(duì)列設(shè)計(jì)成無(wú)限增長(zhǎng)結(jié)果播放一小時(shí)后內(nèi)存漲幾百兆。隊(duì)列一定要設(shè)上限視頻隊(duì)列一般放 30 到 60 幀音頻隊(duì)列按 0.5 秒到 1 秒的數(shù)據(jù)量來(lái)限制。當(dāng)隊(duì)列滿(mǎn)了解碼線程要阻塞等待而不是繼續(xù)解碼。2.3 FFmpeg 的解碼上下文管理一個(gè)典型的初始化序列解碼初始化是播放器源碼里最固定的部分也是新手最容易寫(xiě)錯(cuò)的地方。完整流程是打開(kāi)文件、查流信息、找視頻流、創(chuàng)建解碼器、打開(kāi)解碼器。下面是這個(gè)過(guò)程的典型代碼AVFormatContext *fmtCtx nullptr; if (avformat_open_input(fmtCtx, filename, nullptr, nullptr) 0) { // 文件打不開(kāi)或格式無(wú)法識(shí)別 return -1; } if (avformat_find_stream_info(fmtCtx, nullptr) 0) { return -1; } int videoStreamIndex av_find_best_stream(fmtCtx, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0); AVStream *videoStream fmtCtx-streams[videoStreamIndex]; const AVCodec *decoder avcodec_find_decoder(videoStream-codecpar-codec_id); AVCodecContext *codecCtx avcodec_alloc_context3(decoder); avcodec_parameters_to_context(codecCtx, videoStream-codecpar); if (avcodec_open2(codecCtx, decoder, nullptr) 0) { return -1; }這段代碼有幾點(diǎn)要注意。av_find_best_stream比手動(dòng)遍歷流列表更可靠它會(huì)自動(dòng)跳過(guò)字幕流和數(shù)據(jù)流返回最佳的流索引。codecpar是 AVStream 里的參數(shù)不能直接從codecCtx拿因?yàn)榇藭r(shí)解碼器上下文還沒(méi)初始化必須先拷貝參數(shù)再打開(kāi)解碼器。如果是硬解場(chǎng)景avcodec_find_decoder要改成avcodec_find_decoder_by_name(h264_cuvid)之類(lèi)的硬解名稱(chēng)但初始化流程不變。2.4 像素格式轉(zhuǎn)換YUV 到 RGB 的一步不能省FFmpeg 解碼出來(lái)的視頻幀默認(rèn)是 YUV420P而 Qt 的 QWidget 渲染和 QImage 通常接收 RGB 格式。中間這層轉(zhuǎn)換由sws_scale完成幾乎每個(gè)播放器源碼都有這段邏輯。轉(zhuǎn)換上下文的創(chuàng)建可以復(fù)用不需要每幀重新創(chuàng)建SwsContext *swsCtx sws_getContext( codecCtx-width, codecCtx-height, codecCtx-pix_fmt, codecCtx-width, codecCtx-height, AV_PIX_FMT_RGB24, SWS_BILINEAR, nullptr, nullptr, nullptr);SWS_BILINEAR是性?xún)r(jià)比最高的縮放算法。追求畫(huà)質(zhì)可以換SWS_LANCZOS但 CPU 占用會(huì)明顯上升追求低分辨率預(yù)覽可以用SWS_FAST_BILINEAR畫(huà)質(zhì)會(huì)差一些但速度快。播放器這種場(chǎng)景我一般固定用SWS_BILINEAR不要做成可配置的否則后續(xù)排錯(cuò)時(shí)多一個(gè)變量。3. 核心循環(huán)與時(shí)鐘設(shè)計(jì)同步問(wèn)題的根基3.1 解碼循環(huán)不要用 sleep 控制節(jié)奏解碼線程的主循環(huán)最常見(jiàn)的錯(cuò)誤寫(xiě)法是死循環(huán)里加QThread::msleep(10)之類(lèi)的延時(shí)試圖通過(guò)降低解碼速度來(lái)匹配播放速度。這會(huì)帶來(lái)兩個(gè)問(wèn)題一是延時(shí)不精確做不到與幀率對(duì)齊二是音頻和視頻的解碼節(jié)奏會(huì)被強(qiáng)行綁在一起同步邏輯無(wú)法介入。正確的做法是讓解碼線程以最高速度工作能解多少解多少但隊(duì)列滿(mǎn)時(shí)阻塞。這樣解碼器始終處于工作狀態(tài)而節(jié)奏控制由渲染線程通過(guò)隊(duì)列消費(fèi)速度來(lái)實(shí)現(xiàn)。下面是一個(gè)典型的解碼循環(huán)骨架while (!m_stopRequested) { if (m_videoQueue.size() MAX_VIDEO_QUEUE_SIZE) { QThread::msleep(5); continue; } AVPacket packet; if (av_read_frame(fmtCtx, packet) 0) { // 讀到文件尾或出錯(cuò)標(biāo)記結(jié)束 break; } if (packet.stream_index videoStreamIndex) { int ret avcodec_send_packet(codecCtx, packet); if (ret 0) { AVFrame *frame av_frame_alloc(); if (avcodec_receive_frame(codecCtx, frame) 0) { m_videoQueue.enqueue(frame); } else { av_frame_free(frame); } } } av_packet_unref(packet); }隊(duì)列滿(mǎn)時(shí)用msleep(5)退避是簡(jiǎn)單且可靠的做法但要確保最終檢測(cè)到m_stopRequested能及時(shí)退出否則退出播放時(shí)線程可能被困在循環(huán)里。avcodec_send_packet和avcodec_receive_frame是 FFmpeg 3.x 之后推薦的解碼接口舊的avcodec_decode_video2已經(jīng)廢棄如果你拿到的源碼還在用舊接口建議遷移因?yàn)樾陆涌谀苷_處理多幀返回和延遲幀。3.2 兩類(lèi)時(shí)鐘系統(tǒng)時(shí)鐘與音頻時(shí)鐘同步的核心是有一個(gè)統(tǒng)一的時(shí)鐘基準(zhǔn)。常見(jiàn)的做法有兩種以系統(tǒng)時(shí)間為基準(zhǔn)的gettimeofday或QElapsedTimer以音頻設(shè)備已播放的采樣數(shù)為基準(zhǔn)的音頻時(shí)鐘。兩者都能用但語(yǔ)義差別很大。系統(tǒng)時(shí)間時(shí)鐘實(shí)現(xiàn)最簡(jiǎn)單每渲染一幀就讀取當(dāng)前時(shí)間與幀的 PTS 做差差值大于閾值就丟幀或等待。但它有個(gè)致命弱點(diǎn)如果系統(tǒng)負(fù)載升高解碼線程或渲染線程被調(diào)度延遲這個(gè)時(shí)鐘的讀數(shù)會(huì)跟著推遲同步判斷就失真。音頻時(shí)鐘則不同它以音頻設(shè)備消費(fèi)的采樣數(shù)來(lái)推算當(dāng)前時(shí)間位置和系統(tǒng)的負(fù)載無(wú)關(guān)。我處理過(guò)的真實(shí)項(xiàng)目里本地播放用系統(tǒng)時(shí)間也能做但遇到高分辨率視頻或低配機(jī)器畫(huà)面會(huì)周期性抖動(dòng)。后來(lái)改為主時(shí)鐘用音頻時(shí)鐘、視頻幀按 PTS 時(shí)間戳調(diào)度抖動(dòng)的頻率立刻降下來(lái)了。音頻初始化時(shí)需要先拿到音頻流的采樣率、聲道數(shù)、樣本格式配置好 Qt 的QAudioFormat然后創(chuàng)建一個(gè)線程獨(dú)立運(yùn)行。音頻時(shí)鐘的實(shí)現(xiàn)直接依賴(lài)音頻設(shè)備的回放進(jìn)度和隊(duì)列尾部時(shí)間戳qreal getAudioClock() { qreal pts m_audioClockPts; // 隊(duì)列中音頻幀的 PTS qreal delta m_audioDevice-processedUSecs() / 1000000.0; return pts delta; }這里的m_audioClockPts要在每次寫(xiě)入音頻數(shù)據(jù)時(shí)更新processedUSecs的起點(diǎn)是start()之后設(shè)備真正開(kāi)始播放的時(shí)間兩者相加就是音頻當(dāng)前在時(shí)間軸上的位置。細(xì)節(jié)上有偏差但不影響整體同步精度。4. 用 QWidget 渲染視頻從 AVFrame 到屏幕的完整路徑4.1 標(biāo)準(zhǔn)轉(zhuǎn)換AVFrame 到 QImage 到 QPixmap視頻解碼得到AVFrame后要交給 Qt。最常見(jiàn)的路徑是把AVFrame先轉(zhuǎn)成QImage再轉(zhuǎn)成QPixmap繪制到控件上。這段邏輯看起來(lái)簡(jiǎn)單但有兩個(gè)高頻坑字節(jié)對(duì)齊和格式匹配。AVFrame *frame /* 來(lái)自解碼線程 */; // sws_scale 轉(zhuǎn)換后得到 RGB24 數(shù)據(jù) uint8_t *rgbData new uint8_t[frame-width * frame-height * 3]; int linesize frame-width * 3; sws_scale(swsCtx, frame-data, frame-linesize, 0, frame-height, rgbData, linesize); QImage image(rgbData, frame-width, frame-height, linesize, QImage::Format_RGB888); QPixmap pixmap QPixmap::fromImage(image); delete[] rgbData;這里最容易翻車(chē)的是linesize。FFmpeg 的frame-linesize[0]是 Y 平面的行字節(jié)數(shù)它不一定等于width * 3有時(shí)會(huì)多出幾個(gè)字節(jié)做對(duì)齊。如果直接拿這個(gè)值傳給QImage畫(huà)面會(huì)出現(xiàn)斜條紋或顏色偏移。上面代碼用frame-width * 3作為QImage的bytesPerLine參數(shù)并在sws_scale里同步指定才能保證格式一致。另一個(gè)坑是rgbData必須保證 QImage 使用期間不能被釋放。示例代碼里在QImage構(gòu)造后立即轉(zhuǎn)QPixmap所以可以馬上delete但如果QImage要跨函數(shù)使用就要用QImage::copy()深拷貝一份再返回否則指針釋放后圖像數(shù)據(jù)懸空輕則花屏重則崩潰。4.2 QWidget 繪制路徑對(duì)比三種方式的取舍QWidget 渲染視頻主要有三條路線源碼里常見(jiàn)的是第一種繪制方式實(shí)現(xiàn)成本性能適用場(chǎng)景paintEvent里drawPixmap最低中等低分辨率、局部刷新需求QGraphicsView QGraphicsPixmapItem較低中高需要縮放、旋轉(zhuǎn)等圖形變換QOpenGLWidget 紋理上傳較高高4K、高幀率、硬件加速需求大多數(shù)播放器源碼用第一種就夠了。如果項(xiàng)目對(duì)性能有要求建議在初始化階段讀一下系統(tǒng)信息再做選擇4K 片源直接走 OpenGL 路線SD 片源用 QWidget 即可。void VideoWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); if (m_pixmap.isNull()) { painter.fillRect(rect(), Qt::black); return; } QSize scaledSize m_pixmap.size(); scaledSize.scale(rect().size(), Qt::KeepAspectRatio); QPoint topLeft (rect().size() - scaledSize) / 2; painter.drawPixmap(topLeft, m_pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); }這段邏輯里有一個(gè)常見(jiàn)失誤每幀都調(diào)用scaled()重新縮放。如果窗口大小不變這個(gè)縮放是多余的浪費(fèi)大量 CPU。優(yōu)化做法是只在窗口大小變化時(shí)重新縮放保存一份m_scaledPixmappaintEvent里直接繪制緩存。源碼里如果每幀都在scaled建議改成這種惰性縮放幀率能提升不少。4.3 線程邊界QImage 在解碼線程創(chuàng)建、UI 線程使用的問(wèn)題解碼線程把QImage送進(jìn)隊(duì)列UI 線程取出來(lái)繪制。嚴(yán)格來(lái)說(shuō)這沒(méi)有問(wèn)題因?yàn)镼Image是值類(lèi)型內(nèi)部對(duì)數(shù)據(jù)塊做引用計(jì)數(shù)隱式共享機(jī)制保證先拷貝引用、后深拷貝數(shù)據(jù)。但有一個(gè)關(guān)鍵前提創(chuàng)建QImage的線程和消費(fèi)它的線程不能同時(shí)對(duì)同一份數(shù)據(jù)做寫(xiě)操作。所以在解碼線程里這樣寫(xiě)是安全的QImage frameImage(rgbData, width, height, bytesPerLine, QImage::Format_RGB888); m_queue.enqueue(frameImage); // 拷貝引用數(shù)據(jù)共享但 UI 線程如果調(diào)image.scaled()、image.rgbSwapped()這類(lèi)修改自身的方法就會(huì)觸發(fā)深拷貝數(shù)據(jù)沒(méi)問(wèn)題只是多一次耗時(shí)。最大的風(fēng)險(xiǎn)不在 QImage而在釋放順序——解碼線程自己分配的內(nèi)存必須由解碼線程自己釋放否則可能 double free??缇€程傳遞時(shí)盡量用QImage這類(lèi)自帶引用計(jì)數(shù)的對(duì)象不要用裸指針 手動(dòng)管理內(nèi)存的方式。5. 音視頻同步實(shí)現(xiàn)A/V 時(shí)間戳對(duì)齊的三個(gè)關(guān)鍵細(xì)節(jié)音視頻同步是播放器源碼的核心難點(diǎn)也是能不能真正落地用的分水嶺。拿到源碼后先看它采用的是哪種同步策略再?zèng)Q定改動(dòng)方向。5.1 以音頻為主時(shí)鐘的同步模型最常見(jiàn)的同步模型是選音頻為基準(zhǔn)時(shí)鐘。原因很簡(jiǎn)單人耳對(duì)音頻斷續(xù)比眼睛對(duì)視頻卡頓更敏感音頻斷斷續(xù)續(xù)直接無(wú)法忍受而視頻丟幾幀大多數(shù)人感知不到。所以讓音頻保持連續(xù)播放視頻幀按需要提前或推后是體驗(yàn)最好的方案。同步公式可以寫(xiě)成這樣視頻應(yīng)顯示時(shí)間 視頻幀 PTS - 音頻時(shí)鐘 差值 0視頻慢于音頻需要加速顯示或丟幀 差值 0視頻快于音頻需要等待這個(gè)差值的處理閾值要根據(jù)片源特性來(lái)選擇沒(méi)有統(tǒng)一的絕對(duì)最優(yōu)值但經(jīng)驗(yàn)值可以作為起點(diǎn)。5.2 閾值設(shè)置上一收藏到小于 100ms 的抖動(dòng)不要立刻丟幀同步最怕抖動(dòng)。音頻時(shí)鐘的讀數(shù)本身有噪聲視頻 PTS 在不同封裝格式下也有微小的不規(guī)則性。如果每幀都做丟幀判斷差值稍微波動(dòng)就丟幀畫(huà)面會(huì)頻繁跳動(dòng)體驗(yàn)更差。常見(jiàn)做法是設(shè)置遲滯區(qū)qreal diff videoPts - audioClock(); if (diff 0.08) { // 視頻落后太多丟幀加速追 dropCurrentFrame(); } else if (diff -0.08) { // 視頻超前太多等待當(dāng)前幀目標(biāo)時(shí)間再顯示 waitUntil(videoPts); } else { // 在同步窗口內(nèi)正常顯示 renderFrame(); }這個(gè) 80ms 的閾值是本地播放經(jīng)驗(yàn)的折中值。低于 50ms 時(shí)網(wǎng)絡(luò)流或高碼率視頻會(huì)頻繁觸發(fā)丟幀高于 150ms 時(shí)嘴型對(duì)不上的感知開(kāi)始變得明顯。值得強(qiáng)調(diào)的一點(diǎn)是丟幀策略要優(yōu)先丟 P 幀或 B 幀絕不能丟 I 幀否則會(huì)引發(fā)連續(xù)花屏。5.3 seek 操作后的同步重置最容易被忽略的一次復(fù)位拖動(dòng)進(jìn)度條后同步狀態(tài)完全被打亂。解碼隊(duì)列里殘留著舊位置的幀音頻設(shè)備還播著舊數(shù)據(jù)。如果只清隊(duì)列不做時(shí)鐘復(fù)位畫(huà)面會(huì)先跳到新位置然后又被舊幀拉回舊位置播放幾秒后才恢復(fù)。完整的 seek 復(fù)位應(yīng)該包括av_seek_frame(fmtCtx, videoStreamIndex, targetPts, AVSEEK_FLAG_BACKWARD); avcodec_flush_buffers(codecCtx); // 清空兩個(gè)隊(duì)列 m_videoQueue.clear(); m_audioQueue.clear(); // 重置同步狀態(tài) m_audioClockPts 0; m_isSeeking true;AVSEEK_FLAG_BACKWARD讓 FFmpeg 定位到目標(biāo)時(shí)間點(diǎn)之前最近的可用關(guān)鍵幀這樣可以保證立即取到可解碼的幀。avcodec_flush_buffers告訴解碼器丟棄內(nèi)部緩存的所有參考幀否則重啟解碼時(shí)會(huì)產(chǎn)生大量錯(cuò)誤幀。需要提到的細(xì)節(jié)是seek 后第一次解碼出的幀的 PTS 可能遠(yuǎn)小于目標(biāo)時(shí)間點(diǎn)如果立即同步畫(huà)面會(huì)閃一下。所以完整的實(shí)現(xiàn)里seek 后要跳過(guò) PTS 小于目標(biāo)時(shí)間的幀直到第一幀 PTS 逼近目標(biāo)值再恢復(fù)渲染。源碼里如果沒(méi)有這個(gè)跳過(guò)邏輯實(shí)際體驗(yàn)會(huì)非常奇怪。還有幾個(gè)不太容易被注意但實(shí)際影響體驗(yàn)的小點(diǎn)會(huì)在排查章節(jié)里展開(kāi)這里的脈絡(luò)是同步模型先定基準(zhǔn)再定閾值最后處理 seek 等中斷場(chǎng)景三步寫(xiě)全才能算完整實(shí)現(xiàn)。6. 排查與避坑播放器的 5 個(gè)典型故障對(duì)照6.1 音頻正常但畫(huà)面卡頓現(xiàn)象聲音連續(xù)畫(huà)面每隔幾秒卡一下卡的時(shí)候 CPU 占用沒(méi)有異常變化。原因視頻隊(duì)列消費(fèi)速度跟不上生產(chǎn)速度或者視頻渲染與 UI 線程的刷新節(jié)奏沖突比如QWidget::update()被高頻調(diào)用導(dǎo)致事件堆積。解決先確認(rèn)視頻隊(duì)列的長(zhǎng)度是否持續(xù)增長(zhǎng)是則說(shuō)明渲染端消耗太慢優(yōu)先查繪制路徑里是否有每幀scaled()。再確認(rèn)是否在paintEvent里做了不必要的深拷貝典型做法是QPixmap::fromImage(image.copy())這個(gè)copy()會(huì)觸發(fā)整幀內(nèi)存復(fù)制1080p 下每次接近 6MB卡頓在所難免。6.2 畫(huà)面正常但聲音斷續(xù)或爆音現(xiàn)象畫(huà)面流暢聲音每過(guò)幾秒就“咔”一下或開(kāi)播時(shí)正常、播放幾分鐘后開(kāi)始撕裂。原因音頻隊(duì)列供給不穩(wěn)定解碼線程在音頻隊(duì)列滿(mǎn)和視頻隊(duì)列滿(mǎn)之間切換導(dǎo)致音頻數(shù)據(jù)到達(dá)不勻速另一個(gè)常見(jiàn)原因是 FFmpeg 輸出的是浮點(diǎn)樣本而QAudioOutput配置為有符號(hào)整型樣本格式不匹配直接產(chǎn)生爆音。解決檢查QAudioFormat的setSampleFormat是否與解碼器輸出一致。FFmpeg 的AV_SAMPLE_FMT_FLTP對(duì)應(yīng) Qt 的QAudioFormat::FloatAV_SAMPLE_FMT_S16P對(duì)應(yīng)QAudioFormat::Int16。如果格式不匹配需要用swr_convert做音頻重采樣這是源碼里最容易漏掉的一步。6.3 拖動(dòng)進(jìn)度條后畫(huà)面卡死或黑屏現(xiàn)象執(zhí)行 seek 后播放器停止輸出畫(huà)面但音頻正?;蛘弋?huà)面恢復(fù)后花屏要再拖動(dòng)一次才正常。原因多數(shù)是 seek 后只清了視頻隊(duì)列沒(méi)清音頻隊(duì)列導(dǎo)致兩邊的時(shí)鐘基準(zhǔn)錯(cuò)位或者flush_buffers之后第一個(gè)解碼幀是參考幀直接送去渲染造成花屏。解決seek 時(shí)必須同時(shí)清空兩個(gè)隊(duì)列并重置主時(shí)鐘然后跳過(guò)第一個(gè)關(guān)鍵幀從第二幀開(kāi)始正常渲染。代碼順序上av_seek_frame和avcodec_flush_buffers后循環(huán)讀取直到第一個(gè)AVFrame返回成功且 PTS 不小于目標(biāo)值才恢復(fù)同步邏輯。6.4 播放到最后程序崩潰退出時(shí)卡住現(xiàn)象視頻播放到最后幾秒關(guān)閉窗口時(shí)程序進(jìn)入掛起狀態(tài)要強(qiáng)制結(jié)束進(jìn)程。原因解碼線程還在av_read_frame讀末尾數(shù)據(jù)UI 線程已經(jīng)銷(xiāo)毀了解碼相關(guān)對(duì)象兩個(gè)線程在同一個(gè)AVFormatContext上并發(fā)操作。解決退出流程要先請(qǐng)求解碼線程停止用互斥鎖保護(hù)m_stopRequested等線程退出后再銷(xiāo)毀資源。順序是置停止標(biāo)志 → 喚醒阻塞中的線程 → 等待線程結(jié)束 → 釋放AVFormatContext和AVCodecContext。如果源碼里直接在析構(gòu)函數(shù)里avformat_close_input那就是隱患所在。6.5 硬解開(kāi)啟后畫(huà)面正常但 CPU 不降反升現(xiàn)象源碼支持硬解配置了h264_cuvid或hevc_qsv后畫(huà)面正常但 CPU 占用率依然很高甚至比軟解還高。原因解碼器解碼后輸出的仍然是硬件格式幀如AV_PIX_FMT_NV12然后轉(zhuǎn)成 RGB 時(shí)sws_scale會(huì)把數(shù)據(jù)從 GPU 拉回 CPU再做格式轉(zhuǎn)換開(kāi)銷(xiāo)反而更大。解決檢查解碼后的frame-format。如果是硬件格式就先做av_hwframe_transfer_data把硬件幀拷回系統(tǒng)內(nèi)存再用 GPU 上的scale方案或直接使用QOpenGLWidget把 NV12 數(shù)據(jù)直接綁定為紋理由顯卡完成 YUV 到 RGB 轉(zhuǎn)換。走 CPU 回讀必然是死路。7. 幾個(gè)能立刻提升播放體驗(yàn)的進(jìn)階小技巧前面把主流程和排查過(guò)了一遍最后寫(xiě)幾個(gè)不影響架構(gòu)、改動(dòng)量小但能明顯改善上手體驗(yàn)的技巧也都是源碼交付后我一般會(huì)先做的事。第一個(gè)是視頻窗口的異步縮放。paintEvent里的scaled改成等窗口 resize 后再緩存縮放結(jié)果在事件循環(huán)里用定時(shí)器做防抖窗口尺寸穩(wěn)定的狀態(tài)下幀率會(huì)明顯變化。改動(dòng)不超過(guò) 20 行收益非常直接。第二個(gè)是緩沖策略從“滿(mǎn)再播”改為“快滿(mǎn)再播”。初始化時(shí)先把音頻隊(duì)列填充 500ms 的數(shù)據(jù)再啟動(dòng)輸出能顯著減少開(kāi)播時(shí)的爆音和斷續(xù)。手感上接近直播應(yīng)用的開(kāi)播延遲體驗(yàn)但本地文件沒(méi)必要等那么久300 到 500ms 就夠了。第三個(gè)是倍速播放的音頻處理。FFmpeg 的解碼器不支持變速變速要在音頻輸出端做。Qt 的QMediaPlayer自帶倍速邏輯但在 Qt FFmpeg 的裸實(shí)現(xiàn)里通常依賴(lài)swr_ctx的audio_resample配合av_audio_convert或者最簡(jiǎn)單的丟棄/重復(fù)樣本這些做法都會(huì)改變音調(diào)。實(shí)踐中更常見(jiàn)的方式是把音頻時(shí)鐘的步長(zhǎng)按倍速比例縮放視頻幀的出幀節(jié)奏同步加倍音調(diào)失真可以接受但不是高保真方案。驗(yàn)證一版改動(dòng)是否生效用 4K 高碼率視頻連續(xù)播放 30 分鐘觀察音頻時(shí)鐘與視頻時(shí)鐘差值是否在 100ms 以?xún)?nèi)浮動(dòng)再反復(fù)做 seek 操作每次 seek 后畫(huà)面應(yīng)在 500ms 內(nèi)恢復(fù)同步狀態(tài)。這兩組測(cè)試通過(guò)播放器基本可以放心交付。項(xiàng)目里遇到過(guò)很多同學(xué)在拼裝源碼時(shí)追求多加功能結(jié)果同步一直調(diào)不對(duì)后來(lái)把倍速、硬解都先關(guān)掉專(zhuān)項(xiàng)調(diào)同步才把根子解決。說(shuō)句實(shí)話Qt FFmpeg 播放器源碼網(wǎng)上能下到的版本不少但真正能作為產(chǎn)品底座的不多差別不在渲染也不在某一個(gè)解碼格式支持而在同步策略和線程退出的處理這兩塊是源碼里最有閱讀價(jià)值的段落。讀源碼的時(shí)候先讀這兩個(gè)模塊比先看界面代碼有用得多。這也是我自己復(fù)查源碼時(shí)的習(xí)慣希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩 女同 综合| 日韩丝袜二区| 久久九九视频九九视频| 成人蜜乳小视频网站| 日韩欧视频| 丰满美女一级毛片在线播放| 美美91成人国产精品欧美精品久久久久久久| 五月天亚洲色图| 久久久人体| 无码人妻精品一区二区三区99不卡| 欧美激色| 亚洲日韩AV视色| 日韩卡一卡二卡三在线| 欧美综合亚洲| 综合天天。| 亚洲一区中文字幕一区| 亚洲天堂人妻熟妇视频| 影音先锋少妇| 曰韩人妻中文字幕在线| 亚洲色天堂九9| 欧美色图中文字幕| 九九热精品| 精品蜜乳AV免费观看| 久草尤物| 毛片视频白嫩| 性色av蜜臀av色欲aV| 欧美色图私拍91| 色91综合网| 天堂а√在线最新版在线| 国产精品动态一区二区三区四四| 日韩激情视频| 嗯嗯啊在线视频| 欧美日韩大黄片| 92性色国产午夜福利在线661| 91爱剪切久久| 久久超碰av在线| AV99热18这里只有精品| 激情自拍 校园春色| 美國A片| 91精品国产91熟女| 国产精品乱码久久久久| 午夜福利一区二区影院| 亚欧色图在线激情| 欧美日韩国产三级黄色| 欧美日韩大黄片| 久久黄片国产一区二区| 强奸乱伦AV网站| 啪一啪免费视频| 情趣丝袜无码操逼视频| 天天超级碰碰碰| 久久伊人大香蕉| 日韩熟女乱伦中出| 精品视频专区| 欧美激情综合| 狠狠久久亚洲欧美专区| 亚洲精品a人片在线观看视| 超碰97欧美在线| 国产精品亚洲一区二区三区四区| ,成人免费啪啪视频| 天天碰久久入| 久久久成人免费av电影| 国产女人视频三四五区| 校园春色五月天| 国产精品一区二区a| 91精品91久久久中77777| 久久久一区二区三区四区五区| av资源在线观看少妇| 日韩国产欧美伦理在线| 亚洲电影中字一区二区| 台湾成人无码AV| 99精品欧美一区二区三区桃色| SS久久| 操逼日韩无码| 中文三一区| 屁股久久久久久久| av一区二区三区不卡| 日韩成人无码| 黑人精品XXX一区一二区| 亚洲成?V人片在线观看福利| 999岛国大片| 中文一区二区婷婷视频| 亚洲精品一区二区三区新线路| 老熟乱一区二区三区四区| 亚洲精品国产熟女久久久| 丝袜足交视频| 岛国片在线视频网站| 99久久99九九99九九九| 欧美亚洲第1页| 四虎AV在线播放| 亚洲无线码欧洲精品区别| 亚洲日产专区| 免费男人的天堂| 久久黄片国产一区二区| 美女裸体麻豆天美蜜桃91| 99rre在线精品99re8| 伊人网青青| 在线综合网| 亚洲春色欧美激情自拍| 96国产精品| 日本欧美色| 91中文在线| 亚洲精品国产AV天美传媒| 神马久久久久久| 国产区日韩区在线观看| 亚洲AV成人无码一二三久久| 天天干天天做| 少妇 综合| 国产综合网站在线播放 | 综合欧美激情网| 三级片大波波| 欧洲亚洲综合| 91黑丝美女| 91丝袜美腿网站| 4399成人黄A片| 风骚少妇视频中文字幕| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久久侵犯人妻爽爽爽| 欧美成人精品一区二区男人蜜臀| 夜夜精品视频| 亚洲夜色在线| 97视频在线播放| 91丝袜美女国产| 极品出轨视频网站| 91丨九色丨东北熟女| 亚洲中文字幕久久无码精品| 动漫爆乳3D奶水一区在线观看| 一本色道久久综合亚洲二区三区| 亚洲国产一区二区三区在线 | 亚洲精品视频二区| 96久久久| 亚洲欧美另类少妇精品| 久久久久久久久久va| 欧美色图天堂网m| 久久精品人人做人人看| 国产精品久久久九九九| 欧美精品三级黄片| 婷婷丁香六月| 91oumei| 中文字幕高清20页视频| 免费αV在线视频| 色噜噜人妻丝袜AV资源| 日本天天操| 91爱| 国产精品网站www| 99少妇内射| AV 少妇 人妻 偷拍| 国产60页| 91丰满| 国产有码一区| 探花激情视频| 天堂69亚洲精品中文字| 老鸭窝日丰县女人| 人人摸人人摸人人干| 伦理日韩国产久久| 亚熟在线| 亚洲一区二区麻豆影院| 岛国大片在线观看网站入口| 欧美性爱一区二区三区| 久久九七| 夜夜爽33333| 国产中出内射一区二区| 一摸二插三插| 久久激情综合| 国产女人高潮嗷嗷嗷叫小说| 丁香婷婷五月| 漂亮人妻被强中文字幕hd| 美女91在线观看| 日韩黄色一区二区三区| 免费国产电影一区二区| 久久久日本电影| 色99视频| 特级丰满少妇一级AAAA爱毛片| 亚州欧美总和| 欧美五区| 国产av白丝| av网站国产主播在线| 欧美91久久久久| 亚洲欧美精品一区天堂久久 | 老司机深夜影院18未满| 韩国免费播放一级毛片| 91精品导航| 欧美玖玖爱免费玖玖| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 超碰538| 大香樵伊人网| 亚洲熟女av日韩熟女| a片自拍直播视频| 91精品在线播放| 99黄页网站| 亚洲综合影片| 久久9亚洲| 久久精品美女一区| α√在线| 五月激情综合网| 国内自拍 日韩激情 99| 日本操BAV| 淫荡少妇免费| 久久社区一区二区三区| 国产一区在线观看无码AV| AAAA欧美日韩| 亚洲春色欧美激情自拍| 无码一区二区精品视频久久久春药| 热99re69精品8在线播放| 欧洲一区二区| 国产97av| 精品999一区二区| 熟妇色99| 国产毛片毛片4p懂色| 欧美天天弄| 91爱剪切久久| 久久大黄片| 国产精品不卡av免费在线观看| 91五十路| 免费观看网黄| 婷婷丁香五月天综合东京热| 果冻国产精品麻豆成人av| 男女真人网18| 日本狠狠干| 男人的天堂2010| 久久极品一区二区| 亚洲最大的黄色电影网站。| 91在线限制级| 日韩中文字幕宗合在线| 四虎免费视频| 99re这里只有精品2| 色大香蕉97N| 九九九九九用不成了| 老女人碰碰在线碰碰视频| 大乔未久88一区| 亚洲天天自拍| 人妻性爱一区二区| 无码av永久免费专区网站| 91社区拍啪人妻| 亚洲精品人妻吞精av| 欧美综合区| 日韩人妻操B| 国产精品suv一区| 97爱b| 无码不卡亚洲成?人片| 校园春色 男人天堂| 久久国产精品91| 东北毛片| 亚瑟国产精品久久无码| 欧美一级久久久久久久大片动画| 天天干天天操天天干天天操 | 9精品在线| 久久6热精品99视频| 欧美色九九| 亚洲AV秘无码一区..| 精品伊人久久久大香线蕉小说| 91 刺激在线| 日han少妇无码| 欧日韩一二三f区| yw尤物av无码点击进入麻豆| 日韩性爱播放| 中文久久一区| 国产高清自拍视频| 亚欧高清v| 日欧美色| 97超碰美女| 亚洲欧洲精品视频发布| 殴美牲| 日韩欧美中文字| 欧美色图成人网一区二区| 一区超碰一区| 精品国产人成在线| 日日夜夜噜| 超碰在线一区二区| 在线国产探花| 男女香蕉一区二区| 国产精品区在线12p| 亚洲人妻av| 国产诱惑| 亚洲色图殴美色图激情乱伦| 欧美综合 站| 白丝被操91| 美女诱惑爱爱| 亚洲天堂男| 美女t无毒不卡不卡| 欧美激情久久久久| 中国国国产一级特黄毛片| A级国产欧美激情在线| 青娱乐欧美激情一区二区| 精品久久久久久中文字幕视频免费| 国产精品69人妻无码久久久| 免费成人在线熟妇网| 亚洲āv网址在线观看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产高清精品一区二区三区毛片 | 日韩久草| 男人的天堂va在线| 成人性爱电影一区二区| 亚洲色图伊人网| 淫荡少妇免费| 欧美中字不卡| 日本久久网| 国产又长又大又粗的视频| 国产性爱乱伦AV| 麻豆 亚洲 97| 亚洲午夜福利在线影院| 久久久91福利姬| 国产女人操逼视频| 欧美精品激情| 欧美人妻二区三区| 中文字幕一区二区三区高清| 亚洲性综合| 能直接看AV的网站| 亚洲欧美校园| 久久侵犯人妻爽爽爽| 亚洲图片另类| 日韩pv中文| 黑人美精品 A片| 操淫穴亚洲五月丁香| 户外裸露刺激视频第一区| 茄子社区国产精品| 中出91| 大香蕉综合网| 中文幕97| 91久久久久久| 成 人 A V免费视频在线观看| 久久精彩视频9| 中文字幕一区二区视频在线观看| 动漫片子网站3黄| 一级@啪啪视频| 热久久无毒不卡| 激情五月丁香五月| 狠狠操,使劲操| a级免费在线观看| 国产精品乱码久久久久久久久久久久| 约操熟妇| 国产1024在线播放| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 麻豆91熟妇人妻中文字幕茄子| 91爱综合| 亚洲av淫乱| 亚洲色图 欧美| 大香蕉之青青草原| 天天弄欧美| 无码日韩网站| 人人玩人人添人人澡免费| 亚洲人综合| 神马福利久草| 欧美一区二区亚洲天堂| 亚洲黄片免费在线播放| 久夜操| 神马久久久久久久久久久久| 91n美女视频| 日本三级网页| 岛国1区2区3区在线观看| 久久人妻一区二区三区高清| 91精品人妻一区二区三区蜜桃臀 | 女生看匆91网站| 闷骚老熟女15P| 人摸人人操人| 欧美日韩插逼视频| 不卡av在线中文字幕| 蜜臀Av一区二区三区| 欧美亚洲美少妇一区二区| 午夜丁香| 国产美女口爆吞精| 国产一区二区三区中文字幕| 欧美性爱视频免费一区一A| 蜜桃狠狠色伊人亚洲综合网站| 蜜臀一二三区| 精品9999| 四季av一区二区凹凸精品小说| 亚洲不卡av在线| 91婷婷| 激情啪啪拍91| 永久免费发布性爱网| 日韩精品资源专区二区| 人妻性爱一区二区| 被男人吃奶很爽的毛片| 日韩免费a级毛片无码a∨| 特色a在线上| 久久二| 精品人妻一区二区三区四区| 91天天综合在线观看| 天海翼久久| 久久久久久裸体| 色综合久久夜色精品国产天堂| 宗合情欲网| 夜夜嗨AV蜜臀av| 97 亚洲 日韩 欧美 在线| 国产精品一区二区三区在线密挑| 国产乱码久久| 亚州操操穴网| 亚洲色图综合网| 91丨精品丨国产丨丝袜| 制服诱惑亚洲一区二区三区在线观看| 人妻五十路在线| 日韩综合97P| 国产AB视频| 亚洲亚洲亚洲天堂天堂| 色香av| 98久久| 久操91视频| 色欲三区| 人妻精品一区二区在线| 久久综合婷婷| 97干com| 91精品成人| 九九九九欧美| 久久精品区| 97久久超碰| 伊人一区二区在线播放| 无码免费精品高清| 97精彩视频网站| 大香蕉欧美伊| 中文字幕精品专区搜索结果91| 人妻喷水| 青娱乐淫乱1314| 久久激情亚洲精品无码?V| 国内精品伊人久久久久影院会| 六月婷婷激情| 青青草大香蕉在线视频| com 首页 18岁 禁区 女优 免费 精选 同城| 9 1超碰九色| 玖草在线视频| 久久久久久亚洲Av无码| 91在线欧美| 天天色黄色影院天天操| 美女自卫慰黄网站免费| 欧美在线色图| 女人18精品一区二区三区| 天天干18禁| 日韩熟女乱伦中出| 97色婷婷| 男人的亚洲天堂| 青青青青操国内视频在线| 欧美性爱日韩高清| 久热婷婷| 国产精品午夜福利视频| 久久久精品| 粉嫩av在线一区二区| 久久最新免费视频23| 大香蕉青青9| 男人的天堂2019| 亚洲中文日韩欧美大香蕉视频| 91久久国产综合久久| 一级黄碟| 国产精品青草综合久久| 天天综合欧美综合| 熟妇高潮精品一区二区三区下载| 综合伊人激情| 亚洲综合网电影91| 国产强奸无码乱伦| 丁香五月大香蕉| 亚洲色图欧美另类在线| 欧美日韩国产一区二区小黄片大全| 免费黄色A片| 九九热在线精品视频| 精品一区二区三区国产 | 色综合一区二区三巨| 精品二区三四区五电影| 乱伦av国产| 男生女生啊啊啊啊| 欧美的性爱网站免费| 日韩欧美视频青青| 国产福利合集| 荡小穴在线观看| 亚洲情色 自拍| 日本一片一区| 天天草天天日| 国产青一二三| 五月丁香激情四射| 久久av网| ji熟女.com| 97天天做| 亚洲精品无码成人久久久99| x97av| 思思热影视| 97se综合| 丁香六月婷婷| 美女91| 亚洲色偷偷色噜噜狠狠99网| 人人操欧美风骚| 射丝袜高跟鞋99| 久久在线观看免费视频| 99国产精品久久久久久久成人热| 久热在线精品免费观看| 久久伦理视频久久大香蕉视频| 国产精品毛片?v一区二区三区| 欧美色日本| 香蕉人人操tv| 91成人精品| 久久久久久久极品香蕉视频| 中文字幕在线免费观看2| 日产中文字幕2020| 国产精品久久久久久久久AV大片| 欧美熟妇精品黑人巨大91| 欧美综合站| 女人天堂av在线播放| 精品久久久久黄少妇| 国产视频一区二区三区在线免费观看| 激情五月天校园春色网| 91日本在线观看| 欧美综合第一页| 91欧美长吊| 亚洲情色中文字幕一区| 超碰97久久| 狠色婷婷久久一区二区三区_| www…国产操逼| 久久六六| 一本色道久久综合熟妇| 国产免费内射视频| 日本99一区二区| 日韩人妻一区二区精品| 免费精品国偷自产在线在线| 久久人人爽av亚洲精品天堂桃色 | 人妻蜜桃臀| 淫色网综合| 3D污黄视频在线观看| 精品久久久久综合无码| 美女AV一区二区| 加勒比大香蕉视频在线| 美女尤物人人操| 99re超碰| 亚洲熟女一区二区| 黄色AV影视| 激情自拍 校园春色| 深爱伊人影院| 欧美精品久久| 精品久久99| 国产精品久久久鸭无码的功能| 午夜舔阴达高潮视频免费看| 精品熟妇视频一区二区| 欧美亚洲涩涩| 啊啊啊想要| 噜噜吧,噜噜色,噜噜| 人妻81p| 国产精品极品美女视频| 欧美v日韩v亚洲v最新在线| 在线可观看的黄色网址| 日本影视久久免费| 日本东京热加勒比久久| 免费岛国一级片| 欧美色交| 99福利社| 久久久久921| 日韩99999色| 一区二区三区机械有限公司| 国产极品精品美女视频| 婷婷超| 99日免费视频中文字幕| 男女啪啪啪18禁网站| 花花AV导航| 丝袜加勒比| 少妇高潮喷水无套久久久久久| 97视频620| 性欧美天天| 美女露胸露屁股| 亚洲精品视频二区| 亚洲欧美精品一区天堂久久 | 乱欲一区二区| 人人操人人摸人| 美國A片| 亚欧无码在线| 在线无码操| 国产第25页在线观看| AV不卡在线| 国产成人免费观看在线视频| 熟女色综合久久| 女人午夜视频777| 国产 无码 一区二区| 久久久久成人亚洲国产| 国产呦精品一区二区三区下载| 中文字幕123| 天天躁日日躁AAA片李宗瑞| 8050无码八戒| 欧美性爱五月天| 91久久久久久| 成年男人的天堂| 夜夜狠狠躁日日躁色视频| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 久久99操天天日| 亚洲有码 视频一区| 国产天天骚| 久久神马影院| 熟妇高潮二区三区| 婷婷午夜清品久久久久久久性色视频观| 91熟女丨91老女人| 国产美女口爆吞精视频| 久久夜黄色无码A级大片| 伊人久操| 日韩pv中文| 国产盗摄美女如厕大神作品在线观看| 欧洲自拍色图gif在线| 美女网站黄页| 日韩福利电影网| 国产AV激情无码久久无码 | 久久久无码精品人妻二区| 国内伊人久久久久久网站视频| 欧美精品二区视频在线| 亚洲成熟国产精品美女| 玖玖视频在线资源一区二区三区| oumeizonghese,www| 大香蕉啪啪啪| 麻豆精品久久久久久久| 精品久久久久久中文字幕视频免费| 亚洲综合97中文网| 人妻激情偷乱视频一区二区三区 | 国产精品色| 国产精品96| 天天躁日日躁xxxxx| 婷婷六月天| 欧美97日韩精品| 天堂性色| 亚洲偷拍自拍在线视频| 亚洲男人的天堂V| 老鸭窝成人| 日韩偷拍一区二区三区| 91无码中出人妻视频| 91色色综合| 91精片| 深夜激情无码| baiduhicn.com。| 久久永久无码人妻视频| 99免费在线视频| 精品妇操一区二区三区| 91大神精品长腿在线观看网站| 亚洲成人网站在线观看| 国产情色第一第二页在线观看| 97超碰色| 91九久| 一本久久久精品| 欧美黑人精品一区二区| 蜜臀AV成人精品蜜臀| 国产高清自拍| 开心五月婷婷| 亚洲欧美在线丝袜| 人妻少妇av在线观看| 日日嗨AV一区二区夜夜| 国产精品嫩草久久久久| 精品国产99| 黄色操人| 青青草精玖玖69精品| 国产精品久久久久久久久久久久| 天天爽天天| 午夜啊啊| 天天色播| 美女91| 国产欧美伊人| 午夜超碰| 91女网站| 秋霞操逼片| 亚州色站 日韩电影| 电家庭影院午夜69久久夜色精品国产69乱| 嗯嗯啊中文字幕| 久久久久久性爱免费视频| 男人的天堂不卡一区二区 | 久操视频免费在线观看| 国产又黄又爽| 久久骚少妇| 岛国网址国产 | 有码色中文字幕在线观看| 岛国1区2区3区在线观看| 一区二区首页| 日本 色 导航| 99re综合伊人| 成片免费观看视频大全| 夜夜爽夜夜操| 久插综合| 日人妻视频91| 精品美女少妇一区二区| 欧美熟女少妇| 国产精品白丝在线播放| 精品成人女人久久| 大香蕉伊人久久| 日本欧美中文字幕| 亚洲激情色片| 熟女六十路| 91n欧美| 久久成年精品| 久久99人妖视频国产| 欧美综合综合| 欧美第38页| 色成人Www精品永久观看| 后入人妻无码| 亚洲一二三精品久久网| 色呦呦呦在线观看视频| 日本在线伊人啪啪| 亚洲视频一二区| 伊人久久大香大香线蕉中文| 九九九免费视频| 精品性爱久久视频| 久/久精品99看9| 国产成人精品必看 | 欧美一级AAAAAAA| WWW美腿丝袜香蕉中文| 亚洲日本成人动漫| 97精品熟女少妇一区| 日韩本不卡视频在线观看| 国产性刺激| 五月丁香网站| 精品国产丝袜一区二区三区乱码 | 丁香五月久久| 免费福利视频中文字幕| 东京热毛片调教| 欧洲精品人妻| 毛片17S| 欧美日韩第一页| 日韩欧洲操屄视频| 好爽视频在线观看视频| 伊人在线大香蕉视频久久| 亚洲情色五月天| 九九aV| 久久久久久亚洲中文| 国色综合天| 欧美日韩美女精品久草一区二区三区 | 婷婷丁香成人| 青椒国产97在线熟女| 国产精品久久久久久久久久久久| 美女上床网站| 91五月天| 欧美九九99久久精品| av国产无码| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 中文字幕超碰CAO| 97视频网站在线观看| 成人av动漫在线观看| 国产日韩欧美亚洲精品95| 中文?日韩?免费?精品| 人人妻人人玩人人澡人人爽| 精品人妻高清麻豆av| 国产精品乱码久久久久久| 91网亚洲| 偷拍亚洲高清图片| 久久东京热久久| 97人亚洲综合字幕| 免费av在线播放二区| 久久久久久97| 91精品人妻一区二区三区蜜桃| 尤物视频新赏网鲜网色诱网| 台湾佬中文娱乐网久久久久久久久久com| 美腿丝袜偷拍亚洲欧美| 国产精品国产自产拍高清AV| 蜜臀久久99精品久久久久久久久| 国产日比| 亚洲天堂,男人| 99只有精品| 超碰人人妻| 久久极品一区二区| 天天色悠悠激情| 欧美熟妇乱码在线一区| 97人人中文网| 日日夜夜草草草| 不卡一区视频| 日本一级不卡一二区| 老色鬼成人精品视频下载大在线观看| jiujiujiujingpin| 久久华人网| 97亚洲综合在线| 日韩啪啪视频| 88xx成人精品视频| 欧美偷拍区| 亚洲无吗在线视频| 日本午夜久久电影| 激情第四色| 少妇诱惑视频| 日本熟妇精品九九| 深夜激情| 91麻豆天美| 久久久久久久九九九九九九| 首页中文字幕中文字幕免费| 九九黄色网| 黑丝少妇麻豆| 天天超级碰碰碰| 久久9久久| 日本人妻丰满熟妇久久久久久| 一级二级三级黑人无码| 亚洲AV无码国产精品久久久久| 99热色精品| 欧美色九九九| 蜜臀一二三区| 国产精品高潮久久久无码| 日韩精品碰碰| 男人的天堂亚洲| 密臀AV在线| 欧美亚州综合网图片| 日韩欧美大片免费高清啪啪| 操逼操网| 和协无码影院| 男人的天堂久久| 亚洲āv网址在线观看| 國產尤物AV尤物在線觀看| 激激五月| 日韩AV噜噜噜一区二区三区四区 | 99精品视频在线观看免费| 亚洲欧美中文日韩视频中国语| 青青草在线成人视频| 少妇内射视频| 欧美精品精品一区二区| 偷看洗澡一二三区美女| 色五月69夫妻| 亚洲国产精品无石码久久| 日韩欧美成人性爱在线| 精品超碰中文在线| 羞答答AV中文字| AV在线性爱| 极品色社| 青操影院| 97人亚洲综合字幕| 无码国产精品午夜不卡(| 久久一留热品黄| 男女啊啊啊啊啊| 亚洲中文日韩欧美大香蕉视频| 99re6久热只有精品6在线直播 | 按摩中文字幕| 亚洲激情色片 | 精品四五区| 久久青娱乐| 天天操夜夜嗨| 国产性刺激| 欧美综合第一页| 色婷婷五月综合激情中文字幕| 天美一二三在线观看Av| 女色综合| 欧美成人都市人妻| 深喉吞精| 亚洲成av人片色午夜乱码| 久日综合网| 久久国产免费激情视频| 天天综合影院91| 91精品人| 麻豆天美国美国产| 久草新在线| 91综合在线| 91精品导航| 久久婷婷伊人| 欧美综合天堂| 99精品网| 亚洲欧美伦综合| 色播五月丁香| 一本色道综合久久欧美日韩精品| 国产亚洲综合欧美一区| 天天舔日美女视频| 五月天婷婷基地| 超碰吊日色| 91久久久久久| 神马麻豆福利院| 日本三级久| 国产白丝av| 啊好爽受不了无码| 成人精品久久久午夜福利| 97色诱| 亚洲精品国产专区在线观看| 91丰满| 欧美在线播放aaaa| 欧美日韩狠狠爱| 精品久久久久久亚洲| 日日操夜夜操天天操免费观看麻豆| 懂色AV一区二区三区| 九九九久久久| 日本大香蕉| 亚洲 日韩 丝袜 熟女 变态| 亚洲第一男人天堂| 日本 欧美 亚中文字幕| 少妇被c 黄 免费观看| 亚洲色性情三级| 久久久久久日韩| 色99久草| 天天操天天射青青草| 成人一级性爱| 丝袜加勒比| 极品白嫩福利在线| 无码av永久免费专区网站| 日本布卡一区二三区| 亚洲精品久久久久久久久豆丁网| 好淫网一二三视区| 国产一区二区三区白丝| 狠狠操狠狠燥| 天美传媒国产原创中文字幕亚洲欧美另类 | 91综合中文字幕| 粘花网06av视频| 黄色一级视| 久久久少妇| 精品视频久久区| 91美女中出| 岛国色情视频在线观看| 78操B| 久久超碰98| 亚洲激情在线| 一级片在线观看高清无码| 性欧美999| 成人综合网 欧美| 伊人婷婷五月天| 国产Av超碰| 性欧美999| 精品美女少妇一区二区三区| 调教熟妇 久久久久久| 欧美黑人精品在线播放| 日本加勒比无码专区| 高清肉丝中文无码| 按摩中文字幕| 午夜大香蕉| 亚洲一欧洲中文字幕在线 | 五月天婷婷基地| 午夜一级免费毛片| 久久久久久久| 日韩中文字幕精品一二三事国产精品| 区一在线观看| 亚洲 欧美 91| 免费A V在线| 国产精品嫩草影院免费| 美女裸体无遮挡永久免费观看网站| 91在线一起| 超碰97在线色男人??| 女人一区| 青青网三级视频| 五月婷婷六月丁香| 日韩少妇一区二区三区| 人人看人人爰人人操 | 五十路二区在线| 人妻日日夜夜精品| 欧美成人精品A片免费一区99| 殴美在线AⅤ| 久久久久久亚洲中文| 偷拍 欧美 日韩| 99无码| 欧美天天综合网版| 夜夜久久久| 欧美色图99| 淫穴高潮色图| 天天天操天天天爱| 老熟妇一区二区三区啪啪| 欧美成人亚洲精品| 91丨国产丨白浆| 综合日本女人伊人| 日本福利社| 日本超碰在线国产一区| 五月丁香综合| 欧美99热| 五月色综合| 婷婷在线播放| 丝袜六区| 人妻精品综合中文字幕在线 | 天天看特黄的免费网站| 国产专区路线| 青青草视频在线观看一区二区| 国产不卡精品91| 800zy一区二区| 国产白嫩精品久久| 99热精品国产| 久干网| 岛国不卡超碰护士AV在线播放| 国产精彩女在线观看视频| 一区二区三区黄色片a| 日韩综合无码色欲vv| 黄色区免费观看中文字幕| 91强热人妻| 国产九九九九九九九九| 久久婷婷五月综合| 日韩av女优在线免费一区| 2025亚洲男人天堂| 国产盗摄美女如厕大神作品在线观看| laoshunv91| 天天爱综合网| 蜜臀久久久99久久久久 | 欧美99| 久久手机视直播| 亚洲区限制级| 精品免费成人久久| 欧美性91| 日韩av不卡在线看| 亚洲第一无码播放立川理惠| 99综合视频| 中文字幕加勒比海高清无码免费视频| 久久久av爱| 欧美草草| 天天综合91| 国模不卡| 亚洲婷婷五月天| 日产中文字幕2020| 国产综合久久久鬼色| 人妻插插人妻人| 久久久精品视频欧州站| 欧美亚洲91| av绯色| 99re视频在线观看这里只有精品| 欧美日本久久精品一区 | 亚洲国产日韩精品久久久| 欧美性爱精品七区| 日韩性爱电影一区| 国产白领连续中出在线观看| 日本黄色天堂| 日韩性爱一级片| 国产精品激情久久久久久久| 精品久久視頻在线| 日本超碰色精品| 亚洲天堂一区| 九九综合久久| 另类亚洲图色| 熟女精品日韩一区二区三区 | 蜜桃精品视频一区| 久热最新在线杭州| 久久发布国产伦子伦精品| 狠狠色婷婷| 久久精品日韩专区免费观看| 在线观看不卡一区二区三区| 久久九九99| 插插综合网天天影视网| 国产精品嫩草影院免费| 91爱看| 日韩99精品视频综合区| 老熟女综合| 日韩熟女精一区二区三区不卡| 大香蕉视频一二三区| 日韩人妻精品久久久久| 一区二区亚州激情久婷婷欧美| 丁香婷婷五月| 五月婷婷六月激情| 无码九九九九| 青青伊人这里只有精品| 美女淫穴| 人妻天天爽天天爽三区| 日本久久网| av2014 日韩在线中文字幕| 国产成人欧美一区二区三区的国产| 亚洲日韩肥臀视频在线观看| 成人国产二区三区在线,男女精品。| 人人操人人操草草| 欧美gv在线观看| 五月丁香六月激情| 成人精品久久| 日本一区二区成人在线| 欧美97视频| 久久五月天婷婷丁香中文字幕| 丝袜内射| 日本成a人v网站在线观看| 理论久久婷婷网 8| 天天综合~91| 免费看毛片操穴| 婷婷五月天激情四射| 先锋精品av色鲁| 99热这里都是精品| 激情丁香五月| 1区2区3区视频| 高潮内射在线| 欧美激情久操网| 久久久久久大| 青娱乐999| 亚洲另类色图片| 亚洲一区操| 久操在97| 亚洲中文国际强奸字幕| 极品一区二区三区免费| 手机在线看片免费人成视频| 精品一区99999| 在线播放成人网站| 综合 亚洲 欧美| 精品熟女一区=区三区| 蜜乳视频网站| 97操综合| A片大香蕉在线| 嗯嗯啊啊用力视频免费| 98人妻精品一区二区色欲| 久久天天躁日日躁狠狠躁 | 天天综合91在线| 家庭乱伦麻豆| 人人澡人人弄| 亚州AV无码国产精品| 超碰九九| 色爽爽文学| 天天日天天搞天天干| 91美女視頻| 国产激情综合五月久久| 麻豆久久一区二区三区| 日韩激情视频| av资源在线播放天堂| 日日夜夜摸| 亚州久久9| 日本黄 R色 成 人网站| 亚洲欧美日韩中文播放| 热久日综合| 99久在线精品99re8热| 欧洲性爱无码区| 人人摸人人舔一区二区| 长长久久曰曰夜夜成人网| 黄片qw| 一本大道青青| 97这里都是精品| 5月婷婷6月六月丁香| 天天激清| 韩国嫰模上门援交视频| 美女诱惑1区2区| 强歼乱伦资源网| 国内伊人久久久久久网站视频| 亚洲大胆人体av| 25国产精品免费观看| 欧美国产精品| 丰满人妻一区二区三区蜜桃视频| 国产熟妇一区二区| 涩五月婷婷| 精品视频免费在线一区| 网友自拍第1页| 欧美色自拍| 欧美最婬乱婬爆婬性视频 | 天天夜夜久久| 色婷婷影院| www.大香| 91一区二区三区蜜桃| 超碰吊日色| 国产视频第2页| 操人妻逼91| 草草影院在线视频| 色欲日韩欧美在线一区| av在线播放国产一区| 丝袜足交视频| 色九色久| 日本天天干天天日一区| 天天日天天射天天干| 98一区二区精品| 亚洲精品视频在线播放| 久草免费福利在线播放| 久久久国产av美女私房| 婷婷丁香五月综合| 免费αⅴ在线观看| 成人26uuu| 亚洲天堂欧美| 亚洲交性| 97色欧洲| 日本最新1区2区3区| 天天澡天天爽日日av| 国产精品视频电影| 国产999精品久久久久久| 五月天激情四射| 伊人女女资源在线观看| 青青操综合网| 综合免费无码中文| 亚洲图片日本AⅤ欧美在线| 日韩精品字幕| 午夜性生活av免费在线看| 97视频免费播放| 精品无人区麻豆乱码1区2区图片| 99操| 97综合| 台湾大香蕉99热| 67194无码不卡| 情侣开房子拍 日韩无码 女的很漂亮| 操一区| 色优久久| 男人夜色天堂ss| 天天综合网~69| 96AV精品| 麻豆AV一区二区| 人人爽夜夜操| 神马午夜久久久| 男人久久精品| 60秒免费小视频| 青青草无码视频| 97资源站久久| 日本高清一本二本免费不卡| 99精品综合久久久久五月天| 熟女网站最新| 成人黄页| 自拍偷拍 高清无码| 免费A V在线播放| 中文字幕性感少妇av| 色婷五月天|