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

ARTICLE DETAIL

資訊詳情

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

瀏覽器端FFmpeg轉(zhuǎn)碼實(shí)戰(zhàn):ffmpeg.js原理、配置與避坑指南

瀏覽器端FFmpeg轉(zhuǎn)碼實(shí)戰(zhàn):ffmpeg.js原理、配置與避坑指南 簡(jiǎn)介面向前端開發(fā)者與多媒體處理愛好者這套基于 ffmpeg.js 的完整瀏覽器端音視頻處理方案無(wú)需任何后端服務(wù)即可在網(wǎng)頁(yè)中直接完成視頻轉(zhuǎn)碼、音頻提取、格式轉(zhuǎn)換及攝像頭采集等操作。壓縮包共 122 個(gè)文件、約 3.44MB其中 27 個(gè) JavaScript 文件涵蓋核心轉(zhuǎn)碼邏輯與 Worker 并發(fā)調(diào)用61 張 PNG 圖片和 GIF 動(dòng)圖展示界面效果與操作流程8 份 Markdown 文檔與 6 個(gè) HTML 示例頁(yè)圍繞配置說(shuō)明、API 使用和典型場(chǎng)景做了完整演示涉及攝像頭視頻接入、圖片轉(zhuǎn)視頻、視頻流拼接等前端多媒體常用需求。包內(nèi)附有測(cè)試視頻與工程化配套如 ESLint 配置和 Dockerfile便于直接在本地或容器環(huán)境運(yùn)行調(diào)試。已有 6396 人瀏覽學(xué)習(xí)適合希望在 Web 端繞過傳統(tǒng)后端架構(gòu)、快速獲得完整音視頻處理能力的中高級(jí)前端開發(fā)者參考借鑒。1. 直接在瀏覽器里跑 FFmpegffmpeg.js 到底能省掉什么做前端的人幾乎都撞過這類需求用戶上傳個(gè)大視頻要預(yù)覽要裁剪要轉(zhuǎn)格式常規(guī)做法是扔給后端等服務(wù)器轉(zhuǎn)完再拉回來(lái)。后端排隊(duì)、帶寬折返、大文件超時(shí)每一步都是體驗(yàn)的坑。ffmpeg.js 這個(gè)庫(kù)把 FFmpeg 用 Emscripten 編譯成了 WebAssembly于是轉(zhuǎn)碼這件事可以完全發(fā)生在瀏覽器內(nèi)存里不上傳原始文件、不經(jīng)過服務(wù)器中轉(zhuǎn)、不用等隊(duì)列。它解決的問題很直接敏感視頻不出本機(jī)、轉(zhuǎn)碼延遲可控、服務(wù)器只管靜態(tài)托管不用扛計(jì)算。適合做純前端工具站、本地多媒體處理、教學(xué)演示也適合那些不想為轉(zhuǎn)碼單獨(dú)養(yǎng)一臺(tái)高配后端的小團(tuán)隊(duì)。不過真上手之后會(huì)發(fā)現(xiàn)這玩意兒不是簡(jiǎn)單地npm install就能跑通的它有一堆關(guān)于跨域隔離、Worker 線程、WASM 加載的隱藏要求不提前搞清楚照著示例代碼寫也照樣白屏報(bào)錯(cuò)。下面把運(yùn)行原理、完整操作和踩過的坑一次說(shuō)清。2. 先搞懂它怎么跑起來(lái)WASM 內(nèi)核、多線程和 SharedArrayBuffer2.1 瀏覽器里的 FFmpeg 不是虛擬機(jī)是編譯產(chǎn)物ffmpeg.js 本質(zhì)上是一個(gè)把 C 語(yǔ)言寫的 FFmpeg 源碼通過 Emscripten 交叉編譯成 WebAssembly 模塊的 JavaScript 庫(kù)。瀏覽器拿到的不是某種模擬器而是真正編譯成 WASM 字節(jié)碼的 FFmpeg 本體。正因如此它支持的功能集基本對(duì)齊了 FFmpeg 的編解碼器庫(kù)常見的 H.264、VP8、VP9、MP3、AAC、GIF 都在支持范圍內(nèi)轉(zhuǎn)封裝、轉(zhuǎn)碼、抽幀、加濾鏡這些操作也都有對(duì)應(yīng)的底層實(shí)現(xiàn)。現(xiàn)代版本的 ffmpeg.js 默認(rèn)開啟了多線程支持前提是瀏覽器環(huán)境必須滿足跨域隔離cross-origin isolation。核心依賴是 SharedArrayBuffer這個(gè)對(duì)象允許主線程和多個(gè) Worker 線程共享同一塊內(nèi)存FFmpeg 內(nèi)部的多線程編解碼才會(huì)真正生效。瀏覽器出于安全考慮只在頁(yè)面通過Cross-Origin-Embedder-Policy: require-corp和Cross-Origin-Opener-Policy: same-origin這兩個(gè)響應(yīng)頭時(shí)才會(huì)開放 SharedArrayBuffer。這意味著你用file://協(xié)議直接雙擊 HTML 打開頁(yè)面或者本地起一個(gè)沒有設(shè)置這兩個(gè)響應(yīng)頭的靜態(tài)服務(wù)器WASM 會(huì)退化到單線程運(yùn)行部分版本甚至直接初始化失敗。// 檢測(cè)當(dāng)前環(huán)境是否支持 SharedArrayBuffer if (typeof SharedArrayBuffer ! undefined) { console.log(當(dāng)前上下文已啟用共享內(nèi)存多線程轉(zhuǎn)碼可用); } else { console.warn(SharedArrayBuffer 不可用請(qǐng)檢查跨域隔離響應(yīng)頭轉(zhuǎn)碼將回退到單線程); }這段檢測(cè)代碼適合放在初始化 ffmpeg.js 之前幫你把環(huán)境問題從業(yè)務(wù)邏輯里剝離出來(lái)。單線程模式并不是完全不能用只是轉(zhuǎn)碼速度會(huì)明顯下降對(duì)大文件來(lái)說(shuō)等待時(shí)間會(huì)成倍拉長(zhǎng)。2.2 創(chuàng)建實(shí)例時(shí)到底要配置哪些參數(shù)初始化 ffmpeg.js 的 API 看起來(lái)簡(jiǎn)單但配置項(xiàng)決定了它能不能在你的項(xiàng)目里穩(wěn)定運(yùn)行。核心參數(shù)是corePath和workerPath。corePath指向 WASM 二進(jìn)制文件所在目錄workerPath指向庫(kù)內(nèi)置的 Worker 腳本。這兩個(gè)路徑必須嚴(yán)格指向?qū)嶋H存在且可跨域訪問的資源否則初始化階段就會(huì)報(bào)Failed to fetch或者worker is not defined。const { FFmpeg } require(ffmpeg/ffmpeg); const { fetchFile } require(ffmpeg/util); const ffmpeg new FFmpeg(); // 初始化把庫(kù)內(nèi)置的資源指向你的靜態(tài)目錄 await ffmpeg.load({ coreURL: /wasm/ffmpeg-core.js, wasmURL: /wasm/ffmpeg-core.wasm, workerURL: /wasm/ffmpeg-worker.js, }); console.log(FFmpeg 內(nèi)核已加載版本號(hào), ffmpeg.version);邏輯說(shuō)明load方法會(huì)依次拉取并實(shí)例化 WASM 二進(jìn)制、綁定 Worker 通信通道version屬性在初始化完成后會(huì)返回 FFmpeg 內(nèi)核的版本號(hào)可以用來(lái)做加載成功的判定。參數(shù)說(shuō)明coreURL是核心膠水代碼路徑wasmURL是真正的 WASM 二進(jìn)制workerURL是負(fù)責(zé)執(zhí)行轉(zhuǎn)碼任務(wù)的 Worker 腳本。這三個(gè)文件的路徑必須與你靜態(tài)服務(wù)器上的實(shí)際目錄結(jié)構(gòu)一致而且要保證響應(yīng)頭中Content-Type正確application/wasm是必須的否則部分瀏覽器會(huì)拒絕解析 WASM 文件。2.3 文件怎么進(jìn)去、結(jié)果怎么出來(lái)虛擬文件系統(tǒng)是理解一切的關(guān)鍵ffmpeg.js 在瀏覽器里模擬了一個(gè) FFmpeg 風(fēng)格的虛擬文件系統(tǒng)。你得先把瀏覽器里的 File 對(duì)象寫進(jìn)這個(gè)虛擬文件系統(tǒng)然后 FFmpeg 的命令才能像在本地一樣讀取它。轉(zhuǎn)碼完成后再?gòu)奶摂M文件系統(tǒng)里把輸出文件讀回來(lái)轉(zhuǎn)成瀏覽器可下載的 Blob。這套流程對(duì)應(yīng)到代碼上是標(biāo)準(zhǔn)三步寫入、執(zhí)行、讀取。const inputFile document.querySelector(#videoInput).files[0]; // 第一步把瀏覽器的 File 對(duì)象寫入虛擬文件系統(tǒng) await ffmpeg.writeFile(input.mp4, await fetchFile(inputFile)); // 第二步執(zhí)行轉(zhuǎn)碼命令 await ffmpeg.exec([-i, input.mp4, -vf, scale320:-2, output.gif]); // 第三步從虛擬文件系統(tǒng)讀取輸出結(jié)果 const data await ffmpeg.readFile(output.gif); // 轉(zhuǎn)成 Blob 后交給瀏覽器下載或預(yù)覽 const blob new Blob([data.buffer], { type: image/gif }); const url URL.createObjectURL(blob);邏輯說(shuō)明writeFile的第一個(gè)參數(shù)是虛擬文件系統(tǒng)里的文件名隨后的exec命令里引用這個(gè)名字轉(zhuǎn)碼結(jié)果再通過readFile讀出來(lái)。整個(gè)過程中原始視頻沒有離開用戶的瀏覽器隱私敏感場(chǎng)景下這一點(diǎn)價(jià)值很大。參數(shù)說(shuō)明fetchFile是工具函數(shù)用于把 File 對(duì)象轉(zhuǎn)成 Uint8Arrayscale320:-2表示將寬度縮放到 320 像素高度按原始寬高比自動(dòng)計(jì)算并保證偶數(shù)值方便 GIF 和某些編碼器做像素格式對(duì)齊。輸出 Blob 的 MIME 類型要跟實(shí)際生成的格式保持一致否則部分瀏覽器下載時(shí)擴(kuò)展名會(huì)不正確。3. MP4 轉(zhuǎn) GIF 完整實(shí)操參數(shù)怎么配、卡頓怎么調(diào)3.1 轉(zhuǎn) GIF 的最短可用命令與參數(shù)語(yǔ)義MP4 轉(zhuǎn) GIF 是 ffmpeg.js 最常見的場(chǎng)景。GIF 格式本身只支持 256 色也沒有高效的壓縮算法所以命令的關(guān)鍵參數(shù)集中在尺寸縮放、幀率控制和調(diào)色板優(yōu)化上。await ffmpeg.exec([ -i, input.mp4, -vf, fps10,scale320:-2:flagslanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse, -loop, 0, output.gif ]);邏輯說(shuō)明這條命令先限制輸出幀率為 10 幀每秒再用 lanczos 算法做高質(zhì)量縮放然后通過split把畫面流分成兩路一路用于生成調(diào)色板另一路配合調(diào)色板執(zhí)行最終的顏色映射。-loop 0表示無(wú)限循環(huán)播放這是 GIF 在社交媒體場(chǎng)景下的默認(rèn)預(yù)期。參數(shù)說(shuō)明fps10可以顯著縮小 GIF 體積原視頻如果是 30fps降到這里體積大約能減少三分之二代價(jià)是畫面流暢度下降。scale320:-2中的-2是一個(gè)特殊寫法要求 FFmpeg 自動(dòng)計(jì)算高度并取偶數(shù)如果不這樣做某些 GIF 編碼器會(huì)因?qū)挾雀叨葹槠鏀?shù)而報(bào)錯(cuò)。palettegen和paletteuse是 GIF 畫質(zhì)的關(guān)鍵直接忽略它們會(huì)讓 GIF 出現(xiàn)明顯色帶和噪點(diǎn)。3.2 體積與畫質(zhì)的平衡色階、抖動(dòng)和幀率的組合GIF 體積過大會(huì)讓頁(yè)面卡頓甚至超過瀏覽器對(duì) Blob 內(nèi)存的承受范圍。這里的關(guān)鍵變量有三個(gè)幀率、分辨率、顏色數(shù)量。常見的組合策略是網(wǎng)絡(luò)展示用fps10, scale320:-2保證體積在 1-2MB 左右教學(xué)演示用fps15, scale480:-2, palettegenstats_modediff兼顧流暢度和細(xì)節(jié)追求極致畫質(zhì)則用fps20, scale640:-2但必須接受 5MB 以上的體積。await ffmpeg.exec([ -i, input.mp4, -vf, fps15,scale480:-2:flagslanczos,split[s0][s1];[s0]palettegenstats_modediff[p];[s1][p]paletteuseditherbayer:bayer_scale5, -loop, 0, output_medium.gif ]);參數(shù)說(shuō)明stats_modediff會(huì)針對(duì)連續(xù)幀之間的差異來(lái)生成調(diào)色板適合畫面變化頻繁的視頻生成的 GIF 顏色分布更合理。ditherbayer:bayer_scale5用拜耳抖動(dòng)算法能在有限色板下模擬出中間色調(diào)bayer_scale 數(shù)值越大抖動(dòng)顆粒越細(xì)膩但文件體積也會(huì)略微上升。這套組合適合大多數(shù)常見視頻可讀性高、體積可控、兼容性最好。如果輸出仍然偏大優(yōu)先降幀率而不是降分辨率因?yàn)槿搜蹖?duì)幀率降低的敏感度低于對(duì)分辨率模糊的敏感度。3.3 轉(zhuǎn)碼進(jìn)度反饋用戶不想要一個(gè)白屏ffmpeg.js 原生進(jìn)度事件是低頻的只報(bào)告當(dāng)前處理到第幾幀而且只有幀級(jí)別反饋對(duì)大文件來(lái)說(shuō)用戶會(huì)以為瀏覽器卡死了。解決思路是監(jiān)聽progress事件結(jié)合輸入視頻的總幀數(shù)和當(dāng)前已處理幀數(shù)計(jì)算百分比??値瑪?shù)可以通過ffprobe方式獲取運(yùn)行ffmpeg.exec([-i, input.mp4])會(huì)觸發(fā) stderr 輸出從中可以解析到Duration和Stream信息。let totalFrames 0; let duration 0; // 先探測(cè)視頻元數(shù)據(jù)此時(shí)故意不指定輸出文件 ffmpeg.on(log, ({ message }) { const durationMatch message.match(/Duration: (\d{2}):(\d{2}):(\d{2}\.\d{2})/); if (durationMatch) { duration parseInt(durationMatch[1]) * 3600 parseInt(durationMatch[2]) * 60 parseFloat(durationMatch[3]); totalFrames Math.round(duration * 15); // 按目標(biāo)幀率估算總幀數(shù) } }); ffmpeg.on(progress, ({ progress, time }) { const currentTime time / 1000000; // 微秒轉(zhuǎn)秒 const percent Math.min(100, Math.round((currentTime / duration) * 100)); updateProgressBar(percent); }); await ffmpeg.exec([-i, input.mp4]); await ffmpeg.exec([-i, input.mp4, -vf, fps15,..., output.gif]);邏輯說(shuō)明第一次exec只輸入文件不指定輸出FFmpeg 會(huì)把視頻的詳細(xì)信息打印到日志里我們通過正則解析出Duration字段估算出總幀數(shù)。第二次exec才是真正的轉(zhuǎn)碼進(jìn)度回調(diào)里拿到的是當(dāng)前播放時(shí)間戳用它除以總時(shí)長(zhǎng)就能得到百分比。參數(shù)說(shuō)明time單位是微秒除以 1000000 才是秒這個(gè)坑很多從示例代碼復(fù)制粘貼的人都會(huì)踩。progress的取值范圍是 0 到 1但用它算百分比往往不準(zhǔn)確因?yàn)槟悴恢?FFmpeg 內(nèi)部是拿什么做分母的用 duration 來(lái)計(jì)算更穩(wěn)。4. MP4 轉(zhuǎn) WebM 格式面向?yàn)g覽器播放的編碼選擇4.1 為什么轉(zhuǎn) WebM 而不是直接轉(zhuǎn) MP4WebM 格式在瀏覽器兼容性上比 MP4 更省心它的容器結(jié)構(gòu)簡(jiǎn)單、編碼格式開放Chrome、Firefox、Edge 等主流瀏覽器原生支持不需要額外處理 H.264 的專利授權(quán)問題。ffmpeg.js 轉(zhuǎn) WebM 最常用的是 VP9 編碼器壓縮率高、畫質(zhì)好但編碼速度慢追求速度就用 VP8體積稍大但轉(zhuǎn)碼時(shí)間能縮減一半以上。await ffmpeg.exec([ -i, input.mp4, -c:v, libvpx-vp9, -b:v, 1M, -cpu-used, 4, -deadline, realtime, -c:a, libopus, -b:a, 128k, output.webm ]);邏輯說(shuō)明libvpx-vp9是 FFmpeg 內(nèi)置的 VP9 編碼器參數(shù)集中在碼率控制、編碼速度和音頻編碼上。-cpu-used 4這個(gè)參數(shù)容易被忽略但它直接決定編碼速度數(shù)值越高越快畫質(zhì)會(huì)有輕微下降。-deadline realtime告訴編碼器不要追求極致壓縮比優(yōu)先保證實(shí)時(shí)輸出對(duì)瀏覽器端的內(nèi)存占用也有好處。參數(shù)說(shuō)明-b:v 1M指定視頻目標(biāo)碼率 1Mbps網(wǎng)絡(luò)視頻夠用libopus是 WebM 容器中最推薦的音頻編碼格式-b:a 128k是音頻碼率。如果原始視頻沒有音軌把-c:a這行刪掉即可。4.2 不需要音頻時(shí)如何做純視頻流很多場(chǎng)景下只需要畫面不要聲音比如做視頻預(yù)覽、抽幀分析。這時(shí)候用-an參數(shù)直接丟棄音軌能節(jié)省編碼時(shí)間且輸出文件更純。await ffmpeg.exec([ -i, input.mp4, -c:v, libvpx-vp9, -b:v, 800k, -an, output_silent.webm ]);參數(shù)說(shuō)明-an是 disable audio 的縮寫要求 FFmpeg 不處理任何音頻流。加了-an之后輸出文件里只有視頻軌文件體積會(huì)小于帶音頻的版本同時(shí)編碼速度會(huì)有小幅提升。這種輸出特別適合作為網(wǎng)頁(yè)里的靜音自動(dòng)播放資源因?yàn)榇蠖鄶?shù)瀏覽器允許無(wú)聲視頻自動(dòng)播放音頻會(huì)觸發(fā)用戶手勢(shì)限制。4.3 轉(zhuǎn)碼完成后的內(nèi)存釋放問題瀏覽器端做轉(zhuǎn)碼最容易被忽略的是內(nèi)存管理。每次exec調(diào)用都會(huì)在 WASM 堆里分配內(nèi)存多次轉(zhuǎn)碼后內(nèi)存占用會(huì)不斷累積。ffmpeg.js 沒有提供自動(dòng)內(nèi)存回收機(jī)制你需要手動(dòng)管理虛擬文件系統(tǒng)里的文件用完就刪。// 刪除虛擬文件系統(tǒng)中的輸入和輸出釋放 WASM 堆內(nèi)存 await ffmpeg.deleteFile(input.mp4); await ffmpeg.deleteFile(output.webm);邏輯說(shuō)明轉(zhuǎn)碼完成后虛擬文件系統(tǒng)里仍然保存著原始視頻和輸出視頻這些文件占用的是 WASM 共享內(nèi)存不清理的話多次操作后頁(yè)面會(huì)變得非??ㄉ踔劣|發(fā)Out of memory崩潰。參數(shù)說(shuō)明deleteFile是異步方法必須await否則下一次writeFile同路徑文件時(shí)可能因?yàn)榕f文件還在而報(bào)EEXIST錯(cuò)誤。習(xí)慣上在每次轉(zhuǎn)碼流程結(jié)束后統(tǒng)一清理比每次單獨(dú)清理更不容易漏。5. 避坑指南我踩過的六個(gè) ffmpeg.js 現(xiàn)場(chǎng)問題5.1 SharedArrayBuffer 不可用導(dǎo)致初始化失敗現(xiàn)象ffmpeg.load()執(zhí)行后報(bào)錯(cuò)控制臺(tái)提示SharedArrayBuffer is not defined或者初始化卡住不動(dòng)。原因?yàn)g覽器只有在頁(yè)面啟用跨域隔離后才開放 SharedArrayBuffer。使用file://協(xié)議直接打開頁(yè)面、本地靜態(tài)服務(wù)器沒有設(shè)置Cross-Origin-Embedder-Policy和Cross-Origin-Opener-Policy響應(yīng)頭都會(huì)導(dǎo)致這個(gè)結(jié)果。解決本地開發(fā)時(shí)用 HTTP 服務(wù)器并設(shè)置響應(yīng)頭。常見的做法是用一個(gè)簡(jiǎn)單的 Node.js 中間件給所有靜態(tài)資源加響應(yīng)頭。// 本地開發(fā)服務(wù)器示例為所有請(qǐng)求注入跨域隔離響應(yīng)頭 const express require(express); const app express(); app.use((req, res, next) { res.setHeader(Cross-Origin-Embedder-Policy, require-corp); res.setHeader(Cross-Origin-Opener-Policy, same-origin); next(); }); app.use(express.static(public)); app.listen(3000, () console.log(Server running at http://localhost:3000));邏輯說(shuō)明Cross-Origin-Embedder-Policy: require-corp告訴瀏覽器頁(yè)面只能加載同源或明確聲明了跨域允許的資源Cross-Origin-Opener-Policy: same-origin確保頁(yè)面打開的窗口與原頁(yè)面共享同一個(gè)瀏覽上下文組兩者配合才滿足 SharedArrayBuffer 的啟用條件。注意所有資源包括 WASM 文件和 Worker 腳本都必須通過這個(gè)服務(wù)器訪問否則會(huì)因?yàn)?CORP 策略而加載失敗。5.2 WASM 文件 404 或 MIME 類型錯(cuò)誤現(xiàn)象控制臺(tái)報(bào)Failed to fetch檢查網(wǎng)絡(luò)面板發(fā)現(xiàn)ffmpeg-core.wasm返回 404或者返回了但不被識(shí)別。原因coreURL和wasmURL路徑寫錯(cuò)或者靜態(tài)服務(wù)器不認(rèn)識(shí).wasm文件的 MIME 類型。部分開發(fā)服務(wù)器默認(rèn)不處理.wasm擴(kuò)展名會(huì)把它當(dāng)普通文本發(fā)送。解決確認(rèn)路徑指向正確并確保服務(wù)器對(duì).wasm響應(yīng)Content-Type: application/wasm。如果你用的是 nginx在配置里加一行types { application/wasm wasm; }如果用的是 webpack-dev-server在devServer里配置headers。路徑問題排查順序是先看網(wǎng)絡(luò)請(qǐng)求的實(shí)際 URL再對(duì)照靜態(tài)目錄結(jié)構(gòu)不要在代碼里反復(fù)猜。5.3 worker 腳本加載失敗或跨域受限現(xiàn)象初始化時(shí)報(bào)worker is not defined或者 Worker 啟動(dòng)后沒有任何輸出。原因workerURL指向的 Worker 文件路徑不對(duì)或者該腳本沒有正確的 CORS 響應(yīng)頭。Worker 腳本和頁(yè)面必須同源否則會(huì)被瀏覽器攔截。有些 CDN 資源可以通過crossorigin屬性加載圖片和腳本但 Worker 的加載規(guī)則更嚴(yán)格。解決將 Worker 腳本放在與頁(yè)面同源的靜態(tài)目錄中避免從第三方 CDN 直接引用。如果一定要用 CDN需要確認(rèn)該 CDN 對(duì) Worker 加載場(chǎng)景的兼容性很多 CDN 的響應(yīng)頭是給腳本資源用的并不滿足 Worker 的安全要求。5.4 轉(zhuǎn)碼大文件導(dǎo)致內(nèi)存溢出或頁(yè)面崩潰現(xiàn)象幾百 MB 的視頻文件執(zhí)行轉(zhuǎn)碼時(shí)頁(yè)面標(biāo)簽頁(yè)直接白屏或者控制臺(tái)報(bào)Out of memory。原因ffmpeg.js 會(huì)把輸入文件完整讀入 WASM 共享內(nèi)存輸出文件也存放在同一塊內(nèi)存里。文件越大內(nèi)存占用越高瀏覽器單標(biāo)簽頁(yè)的內(nèi)存上限一般在 2-4GB 之間超出后唯一結(jié)果是崩潰。解決限制輸入文件大小加上前端的文件選擇過濾。另一個(gè)技巧是在轉(zhuǎn)碼前先用-ss和-t截取片段只處理需要的部分而不是整個(gè)文件。這種做法在有預(yù)覽需求的場(chǎng)景下尤其實(shí)用既能快速出圖出視頻又能顯著降低內(nèi)存壓力。5.5 轉(zhuǎn)碼過程沒有日志輸出不知道執(zhí)行到哪一步現(xiàn)象exec執(zhí)行后一切靜悄悄看不到任何過程信息只能干等。原因ffmpeg.js 的日志事件默認(rèn)可能被忽略或者你在初始化時(shí)沒有綁定log事件處理器。有些版本需要顯式開啟日志輸出才能看到 stderr 的信息流。解決在初始化之后立即綁定log事件或者在exec之前調(diào)用一個(gè)事件綁定函數(shù)。日志信息對(duì)排查參數(shù)錯(cuò)誤和濾鏡語(yǔ)法錯(cuò)誤非常關(guān)鍵FFmpeg 的報(bào)錯(cuò)信息全部走 stderr看不到它等于瞎折騰。5.6 高分辨率視頻縮放后輸出色偏或綠屏現(xiàn)象輸出視頻畫面整體發(fā)綠或出現(xiàn)大量馬賽克尤其在 H.264 轉(zhuǎn) H.264 的場(chǎng)景中高頻出現(xiàn)。原因常見原因是像素格式不匹配輸入視頻是yuv420p輸出端指定的編碼器預(yù)設(shè)了不同的像素格式或者濾鏡鏈里缺少像素格式轉(zhuǎn)換環(huán)節(jié)。解決在濾鏡鏈末尾顯式加上formatyuv420p強(qiáng)制統(tǒng)一輸出格式。這個(gè)問題在轉(zhuǎn) MP4 時(shí)尤其典型瀏覽器普遍對(duì) H.264 編碼和yuv420p像素格式有硬性要求漏掉這一步大概率會(huì)出現(xiàn)花屏或綠屏。await ffmpeg.exec([ -i, input.mp4, -vf, scale1280:-2,formatyuv420p, -c:v, libx264, -preset, veryfast, -c:a, aac, output.mp4 ]);邏輯說(shuō)明-vf里最后一段formatyuv420p強(qiáng)制輸出像素格式確保瀏覽器可以直接解碼渲染。-preset veryfast是編碼速度和壓縮率的折中方案瀏覽器端建議使用比slow快很多體積差異在短片段里幾乎感知不到。參數(shù)說(shuō)明libx264是 FFmpeg 內(nèi)置的 H.264 編碼器兼容性最廣aac是音頻編碼MP4 容器標(biāo)配。6. 進(jìn)階用法用多線程參數(shù)和批處理榨干瀏覽器性能既然環(huán)境允許 SharedArrayBuffer那就要把多線程的優(yōu)勢(shì)發(fā)揮出來(lái)。FFmpeg 的 H.264 和 VP9 編碼器都支持-threads參數(shù)但瀏覽器端的線程數(shù)不是隨便設(shè)定的。常見的做法是先用硬件并發(fā)數(shù)作為初始值再根據(jù)編碼器類型微調(diào)。Chrome 桌面版通常能拿到 8 到 16 個(gè)邏輯核心但 WASM 多線程并不是每個(gè)線程都能吃滿 CPU實(shí)測(cè)下來(lái) 4 線程到 6 線程是收益最明顯的區(qū)間超過 8 線程之后提升幅度急劇收窄反而增加線程切換開銷。const coreCount navigator.hardwareConcurrency || 4; const threadCount Math.min(coreCount, 6); await ffmpeg.exec([ -i, input.mp4, -c:v, libx264, -preset, veryfast, -threads, String(threadCount), -c:a, copy, output.mp4 ]);邏輯說(shuō)明navigator.hardwareConcurrency返回瀏覽器可用的邏輯核心數(shù)但你不能直接用它做線程數(shù)因?yàn)闉g覽器本身和其他標(biāo)簽頁(yè)也在占用 CPU。取 min(核心數(shù), 6) 是兼顧穩(wěn)定性和速度的經(jīng)驗(yàn)值。參數(shù)說(shuō)明-c:a copy表示音頻不重新編碼直接復(fù)制到輸出容器這樣能省下大量編碼時(shí)間前提是輸入和輸出的音頻格式兼容MP4 容器內(nèi)包含 AAC 音頻時(shí)可以直接復(fù)制。批處理場(chǎng)景是另一個(gè)能明顯提升體驗(yàn)的用法。如果你要處理一個(gè)文件夾里的多個(gè)視頻不能簡(jiǎn)單地用 for 循環(huán)逐個(gè)執(zhí)行因?yàn)槊總€(gè)exec調(diào)用都會(huì)傳遞全部?jī)?nèi)存上下文。正確做法是串行隊(duì)列前一個(gè)任務(wù)完成后立即清理內(nèi)存再執(zhí)行下一個(gè)。下面的代碼展示了一個(gè)簡(jiǎn)單的隊(duì)列控制器const inputFiles [file1, file2, file3]; // 用戶選擇的多個(gè)文件 const results []; for (const file of inputFiles) { const inputName input_${Date.now()}.mp4; const outputName output_${Date.now()}.webm; await ffmpeg.writeFile(inputName, await fetchFile(file)); await ffmpeg.exec([-i, inputName, -c:v, libvpx-vp9, -b:v, 1M, outputName]); const outputData await ffmpeg.readFile(outputName); results.push(new Blob([outputData.buffer], { type: video/webm })); await ffmpeg.deleteFile(inputName); await ffmpeg.deleteFile(outputName); } console.log(批處理完成共生成, results.length, 個(gè)文件);邏輯說(shuō)明循環(huán)中每個(gè)文件使用獨(dú)立的時(shí)間戳命名避免多個(gè)輸入文件寫入虛擬文件系統(tǒng)時(shí)路徑?jīng)_突。每個(gè)文件處理完成后立即刪除輸入和輸出把 WASM 內(nèi)存占用控制在單個(gè)文件級(jí)別。參數(shù)說(shuō)明時(shí)間戳命名的作用是防止第二次循環(huán)執(zhí)行writeFile時(shí)因?yàn)槲募汛嬖诙鴪?bào)錯(cuò)這是批處理任務(wù)最容易踩的坑文件路徑必須唯一。Date.now()在循環(huán)中連續(xù)調(diào)用會(huì)有重復(fù)風(fēng)險(xiǎn)極端情況下可以追加循環(huán)索引做后綴。最后分享一個(gè)性能對(duì)比的參考維度同樣一個(gè) 30 秒 1080p 視頻轉(zhuǎn) 480p WebM本地 FFmpeg 進(jìn)程大約耗時(shí) 8 秒而 ffmpeg.js 在 Chrome 上啟用 4 線程后大約耗時(shí) 15 到 20 秒。瀏覽器端并不是不能做轉(zhuǎn)碼而是它更適合 2 到 5 分鐘內(nèi)的短視頻長(zhǎng)視頻或大批量任務(wù)還是建議交給后端。從那以后我每次做選型評(píng)估都會(huì)先把「文件大小上限」和「轉(zhuǎn)碼時(shí)長(zhǎng)上限」兩個(gè)閾值定下來(lái)再?zèng)Q定用 ffmpeg.js 還是后端方案。這套判斷標(biāo)準(zhǔn)幫我避免了好幾次本來(lái)性能堪憂的架構(gòu)設(shè)計(jì)希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷大乡焦噜噜| 香蕉婷婷| 99亚色色色| 婷婷色网站| 婷婷五月AV| 亚洲在线综合| 狠狠另类视频| 久久久五月天婷婷成人网| 婷婷涩涩五月天| 99热在线看| 人人摸人人摸| 婷五月丁香俺| 4399精品一区二区| 99热在线播放| 五月丁香六月色婷婷| AV在线不卡播放| 欧美人人超级碰| 五月天激情国产综合婷婷| 天天综合五月天| 九九aV| 99久久精| 性爱技巧五月| 欧美日综合| 丁香婷婷五月天校园春色| 婷婷97狠狠成人网站| 夜夜骑福利资源| 久久玖玖综合| 无码激情AAAAA片-区区| 天堂中文国产| 热99热9| 亚洲免费观看高清完整版AV线| 九九热中文| 玖月婷婷爱丁香| 五月婷婷丁香日韩在线| 婷婷精品免费久久| 玖玖色综合网| 拍真实国产伦偷精品| 天天干天天操天天上| 婷婷狠狠97| 激情综合五月婷婷| 日本天天色| 婷婷五月天成人网| 婷婷丁香五月天熟女丝袜| 色色五月天婷婷| 色播丁香婷婷五月激情| 人妻久久久久| 五月婷婷丁香网| 九九热精品在线| 婷婷五月天在线综合| 大香蕉婷婷丁香视频在线| 疯狂做受XXXX高潮A片动画| 色五月婷婷影院| 九九综合视频在线观看| 青青日韩| 伊人丁香在线| 国产67194| 草逼大片| 日日射天天射| 99亚洲综合| 五月天丁香看婷婷| 欧美十二区| 色~性~乱~伦~噜| 五月丁香龟婷婷| 99久久久久| 97碰 在线视频观看| 欧美六月| 婷婷五月天国产在线播放| 伍月婷丁香婷| 伊人久久婷婷| 99热99精品| 五月丁香婷婷欧美色图视频五月丁香777电影| 任你操精品免费| 色五月亚洲开心网| 久久这里都是精品视频| 97亚洲色 torrent magnet| 五月开心啪啪| 美女被操一区二区| 日本操B视频在线观看| 六月撸婷婷| 五月丁香青草综合啪啪| 插插干干干色| 五月婷婷就去色| 色欲九区| 97伊人综合婷婷| 婷婷天堂综合| 欧洲S级在线观看| 99热在线观看| 三人荫蒂添的好舒服A片| 日韩在线视频中文字幕| 9l视频自拍9l视频自拍九色学生| 人。妻久久| 激情综合亚洲色婷婷五月| 美女婷婷六月色| 婷婷久久五月天| 狠狠色噜噜狠狠| 五月桃花网综合| 天天做夜夜爽| www.久热| 天天综合永久| 国产欧美婷婷五月| 永久99免费视频网站| 色综合色五月| 97天堂| 色五月婷婷大香蕉| 任你擦免费视频| 久久免费干| 激情综合网激情五月婷婷| 超碰九色| 国产日产亚洲系列最新| 九月丁香八月婷婷加勒比| 91Chinese在线| 丁香五月av| 色99视频| 夜夜爽77777妓女免费下载| 91久久久久久久| 日韩aaa| 99在线热| a在线观看| 五月综合久久| 丁香五月天啪啪| 丁香五月天啪啪| www色色色com| 激情av| 大香蕉九九| 极品人妻VideOssS人妻| 99激情| 嫩草AV久久伊人妇女超级A| 丁香五月激情综合| 以及AA大片看看| 秋霞AV吧| www.综合久久| 色狠狠色| 26UUU亚洲欧美| 九九这里精品| 狠狠干婷婷| 色婷婷偷拍| 99热综合网| 五月丁香香蕉| 欧美午夜乱妇午夜福利| 色都都狠狠色都都色综合色| 五月丁香六月成人| 少妇日麻屄| 国产夫妻操逼内射视频| 亚洲狠狠操| 夜丁香五月婷婷| 天天干天天操天天拍| 色偷偷色婷婷| www.激情| 性爱人人网| 91ncm视频| 五月天社区| 婷婷五月花免费视频在线| 激情丁香淫荡婷婷| 欧美激情VA永久在线播放| 婷婷激情人妻| 三人荫蒂添的好舒服A片| 五月婷婷爽爽爽| WWW色色色COM| 久久婷婷六月综合| 五月丁香激情六月| 亚洲色啪| 婷婷香蕉香| 五月天婷婷久草丁香| 91人人超碰在线| 五月丁香六月久久| 久色欧美| 天天日天天爽| 五月婷免费视频| 九九青青草成人| 人人人人人人人人人草| 四月婷婷五月丁香| 大战熟女丰满人妻AV| 久热在线观看视频9| 久久精品4| 五月丁香成人日| 少妇人妻综合色6699| 久综合色| 国产欧美大香蕉一区| 日韩99视频| 天天看片日日夜夜| 91狠狠色色丁香婷婷综合久久| 久久久精品人妻| 国产特黄色精品一区二区三区精品无广告| 操99| 欧美激情综合五月色丁香| 久久久8| 影音先锋91网站在线观看| 丁香花操逼| 色色99色色| 五月激情小说网| 亚洲五月婷| 97亚洲精品| 99这里有精品视频3| 亚洲另类噜噜| 中文幕无线码中文字蜜桃| 久久色午夜在线导航| 一起草无码视频| 五月丁香六月婷婷在线| 黄色片久久| 99操中文视频| 婷婷久久丁香| 狠狠爱婷婷五月天| 色五月开心开心五月激情五月| 激情综合色婷婷啪啪六月天| 久热re视频在线观看网站| 久久久五月五丁香| 另类激情综合| 狠狠色综合图片| 蜜乳9188| 亚洲婷婷免费| 做爰丰满少妇1313| 婷婷色色五月天| 五月婷婷色五月| 日本熟妇乱妇熟色A片蜜桃| 123草逼网| 日本成人噜噜| 97超碰,人人舔,人人操,人人摸| 色色五月天丁香| 九九精品热| 一级黄在线| 九九热只有这里精品| 激情综合激情综合| 色黄啪啪| 亚洲色情网站| 亚洲天堂色| 婷婷大美在线| 国产毛片精品一区二区色欲黄A片| 六月婷婷啪啪| 天天综合久久| 欧洲亚洲午夜| 情色婷婷五月天| 激情婷婷五月社区| 996日日爱| 欧美婷婷五月丁香| 69人人操人人爽| 天天橾日日橾夜夜橾17| 久久AAAA片一区二区| 黄色99视频| 欧美日比视频| 天天综合网91| 99久久综合网| 99综合在线| 日本久久人| 大香蕉啪啪啪啪啪啪| 丁香婷婷五月基地| 大香伊人婷婷| 精品人妻伦一二三区久久| 91丨九色丨首页| 国产六月婷婷| 五月天久久色| 色色色国产| 少妇搡BBBB搡BBB搡毛茸茸| 亚洲激情亚洲激情| 久久五月视频| 五月婷婷久久内射| 香蕉久操| 国产在这里只有精品| 1囯产午夜仑鲁鲁| 激情文学久久| 思思久久99| 国产xxxxx在线观看| 五月丁香综合激情网| 色五月色五天色情网| 97热在线精品| 五月天婷婷xxx| 六月婷婷五月丁香| 五月综合在线婷婷图片| 婷婷五月激情基地| 五月婷婷色| 91色吧网| 久久婷婷成人综合色怡春院| 樱花99视频| 五月天偷拍| 婷婷丁香77777| 欧美色频| 蜜臀嫩草| 久久9RE热视频精品98| 噜噜狠狠色综无码久久合欧美| CAoub青青超碰| 97色色色| 亚洲五月天色| 六月色丁香婷婷| 天天天摸夜夜夜玩| 99re在线精品视频| 大香蕉啪啪啪| 天天天天天久久久久久| 色婷婷激情四射视频| hd五月婷婷在线| 丁香五月五月婷婷欧美大香蕉| 五月丁花色综合网| 五月天婷婷涩涩| xxxx久| 天天开心天天色| 开心五月婷婷| 久久久精品色| 99开心五月五月丁香激情| 无码人妻精品一区二区蜜桃色欲| 婷婷激情五月色综合| 99热精品99| 人妻内射视频| 少妇人妻综合色6699| 婷婷内射视频在线| 狠狠CAO日日穞夜夜穞AV| 婷婷五月天激情丁香| 啪啪操超碰| 夜夜爽天天爽| www.99热这里精品| 五月丁香啪啪啪免费看| 丁香社92视频| 亚洲1区| 五月激情五月婷婷五月天在线| 干一干xxxx| 婷婷五月影院| 五月天婷婷丁香| 丁香婷婷大香蕉| www.色五月| 99热这里只有精品99| 超碰99在线| 97亚洲视频在线| 亚洲婷婷五月天激情| 91色色色| 婷婷丁香精品视频在线观看| 第五色婷婷| www.色五月天.com| 天天爽在线视频| 婷婷色色色| 色综合天天综合成人网| 最新va在线播放| 男人天堂伊人五月丁香| 色婷婷四色| 中字幕视频在线永久在线观看免费| 思思热视频| xx色综合| 色五月天.con| 国产精品视频网| 婷婷色导航| 激情丁香五月天| 激情丁香淫荡婷婷| 亚洲中文av| 丁香亭亭激情四射| 99热在线观看| 色噜噜狠狠色综合日日| 在线成人视频免费| 99热久久这里只有精品2010| 久久6这里只有精品| 亚洲久久日| 久久大香蕉丁香| 亚洲激情综合网| 丁香六月婷婷一区二区三区| 丁香五月婷婷成人色区| 五月丁香婷婷爱激情综合网| 五月丁香综合影院| 亚洲成人精品三区| 婷婷丁香中文字幕| 欧美在线视频99| 五月丁香婷中文| 六月丁香影院| 大香蕉院线| 综合激情伊人影视在线| 色五月综合| 亚洲成人中文字幕| 丁香婷婷影院| 婷婷综合丁香| 麻豆WWWCOM内射软件| 六月综合婷婷开心伊人| 九九综合色| 99热色精品| 久久66成人网站| 婷婷五六日| 久久激情综合| 高清资源站日A美A欧亚…| 99激情在线| 日本婷婷色日| 99热免费看| 天天干肏夜夜| 天天干天天爽天天爽| 成人五月天在线视频在线观看| 五月丁香美女视频| 久操操| 九色自拍| 色婷婷久久久| 亚洲色综合| 991精品在线视频| 97色啪| 99热99操| www、丁香五月天| 狠狠色大香蕉| 色综合视频| 日韩美女羞羞网站在线观看| 国产精品岛国片在线观看免费| 婷婷黄色网| 久久久全国免费视频| 91无码色色| 亚洲成av人影院| 日日夜夜干| 亚洲精品一区中文字幕乱码| 丰满熟女人妻一区二区三| 成 久久| 人人看人人草人人摸| 亚洲成人电影aaaa| www.sezonghe| 国产成人99久久亚洲综合精品| 久久久五月婷婷| 天天日夜夜爽。| 色综合综合色| 欧美丁香五月| 26.uuu丁香五月婷婷| 999激情视频| 激情综合无码| 九九这里只有精品| 亚洲成人AV电影在线| 丁香五月激情图片婷婷| 丁香六月天婷婷| 久久天堂婷婷五月| 五月丁香色情| 五月天色婷婷视频| 99热99色| 婷婷伊人久久| 少妇熟女视频一区二区三区| 久操香蕉| 91精品婷婷国产综合| 五月天色综合| 欧美色播综合在线观看| 婷婷久久亚洲| 97视频久久| 丁香五月天堂| 97人人看| 青青草国产亚洲精品久久| 影音先锋91在线资源站| 伊人久久中文网| 国产av基地| WWW五月婷婷| 精品九九视频| 99九九视频精彩在线| 亚洲免费看片| 影音先锋日本三级资源| 六月色婷婷综合影视| 久久女人天堂| 丁香五月婷婷色五月| 伊人久久五月天| 欧美大道不卡| 被强行糟蹋的女人A片| 久久精品五月| 99精品视频在线6| 色狠狠色噜噜噜a天堂一区| 天天做天天爱天天爽| 超碰av在线| 香蕉久久国产AV一区二区| 色色色色色色色色色色色色色色,网站| 日韩99视频| 五月婷婷综合网在线播放| 日日夜夜狠狠干| 色综合久久99色| 九九色综合| 色久一| 激情婷婷丁香五月天小说| 丁香五月婷婷乱| 高清无码网址| 国产精品久久久爽爽爽麻豆色哟哟| 色综合色综合色综合| 六月色色| 丁香五月婷婷在线观看| 欧美激情五月天| 4399在线观看免费高清毛片| 久久综合激情五月天| 婷婷丁香色五月| 激情五月天小说网| 激情久久综合网| 九九免费精品在线视频| 婷婷内射视频在线| 亚洲九九99精品视频在线播放| 日本一级特黄大片AAAAA级| 五月天播播综合| 五月天天天天天天天天天天天婷婷婷| 性欧美大战久久久久久久83| 色色丁香婷婷| 一本色道久久综合狠狠躁小说| 九九在线精品| 中文字幕人妻在线| 狠狠色综合久久| 五月天色综合| 色婷婷免费观看| 婷婷五月丁香伊人| 欧美色图片88| 天天爽成人综合网站| 日本成人噜噜噜| 无码AV免费精品一区二区三区| 丁香婷婷综合激情五月色| 婷婷亚洲丁香五月| 狠狠综合| 午夜成人综合| 色播五月网| 欧美大片免费观看| 久久久妻人人人| 久久久久久97| 草草影院爱爱| 色色色色色色网| 欧美精品中文字幕亚洲专区| 亚洲色综合| 俺去也婷婷| 操操综合网婷婷| 思思久ren热| 大香蕉综合| 97色操| 玖玖资源站蜜臀| 亚洲精品白浆高清久久久久久| 久久综合中文| 五月天色色婷婷| 97在线干| 精品久久99码| 久久99jiu9| 久色五月| 人妻免费网站| 久久久久久丁香五月| 少妇2做爰HD韩国电影| 性爱动图国产麻豆一区二区三区| 丁香六月综合激情| 色欲天天综合| 国产精品成人AV在线| 人妖色AV色综合| 丁香婷婷视频一区二区| 91 久热| 九热视频这里只有精品| 成人片黄网站色大片免费毛片| 爱之国产色情综合| 天天干天天插| 丁香六月亚洲| 99re在线播放| 四虎婷婷五月天| 午夜性做爰电影| 丁香五月婷婷亚洲色图| 黄桃AV无码免费一区二区三区| 婷婷五月成人有| 婷婷啪啪| 99热这里只有精品13| 少妇水多A片太爽了| 5月婷婷6月丁香aV| 国产91资源在线| 婷婷色Av| 五月丁香亭亭AV女优| 五月天亚洲色| 色丁香五月| 一月婷婷色色| 婷婷综合| 中文字幕日产A片在线看| 激情播丁香| 国产成人片| 五月婷婷伊人久久| 亚洲成AV人片在线观看| 深爱激情综合网| 成人在线视频一区| 91碰| 久久婷婷六月| 五月婷A V在线| 激情五月色在线播放| 婷婷丁香www视频日本韩国| 日本九婷婷| 丁香五月综合激情性爱| 依人大香蕉| 亚洲一色色色色色色色色| 国产成人精品一区二三区熟女在线 | 五月激情网站| 这里只有精品视频在线| 深爱丁香激情| 国产44页| 99热这里是精品| 久久五月天合网| 激情五月婷婷老师| 激情久久丁香| 亚洲另类婷婷五月丁香在线播放| 97丨九色丨国产丨PORNY| 色99欧洲色19| 91无码视频| 色色色综合网| 思思热AV| 五月丁香成人网| 日本色色影片| 色噜噜狠噜噜视频| 亚洲小视频免费观看| 亚洲V国产V欧美V久久久久久| 99re视频精品| 日韩婷婷| 波多婷婷久久| 丁香激情网| 六月丁香激情最新更新| 午夜色丁香| 国产在这里只有精品| www,婷婷五月天,com| www.99热这里精品 | 亚洲啪啪视频| 色哟呦av| 99碰碰视频| 五月激情婷婷六月丁香| 亚洲久久日| 久久精品99国产精品日本| 丁香色五月天| 五月丁香婷婷AV天堂| 99热伊人综合| 99色在线| 亚洲婷婷五月| 国产26uuu视频| 成人网在线视频| 性色做爰片在线观看WW| 五月婷啪| 丁香五月激情五月开心五月| 丁香五月婷婷久久久| 五月婷婷亚洲色图| 一本道在线电影| 狠狠五月天| 天天插天天草人人玩| 青青久久大香蕉| 极品少妇高潮啪啪AV无码| 成人在线日韩欧美| 狠狠操性爱av| 美女五月天婷婷| 国产资源在线视频| 婷婷五月丁香青青草在线| 色综合丁香| va婷婷| WWW丁香五月| 另类激情四射| 丁香五月天日韩无码| 五月丁香色婷婷| 夜夜资源站| 99热精品在线在线| 2025中文在线视频字幕免费观看| 99热丁香| 亚洲啪啪自拍| 51精品国自产在线| 99ri视频| 成人五月天丁香婷| 直接看的AV| 开心五月婷婷在线视频免费观看| 人人爱操| 99热精品99| 伦乱人妻| 99精品视频播放| 国外亚洲成AV人片在线观看| 色综合激情| 亚洲无码色| 激情小说五月欧美亚洲丁香| 丁香五月大片| 77799热| 91超级碰| 任你搞网站| 久久五月情| 婷婷9月天| 99热精品在线观看| 色综合色色色| 亚洲色久| 偷偷狠狠久久婷婷五月天| jiujiujiuwuyuetian| 91丁香色五月| 婷婷丁香大香蕉| 成人.在线日韩| 少妇人妻偷人精品无码视频新浪 | 影音先锋91男人资源在线播放| 尤物一区二区| 精品欧美一区二区三区久久久| 中文字幕在线日亚州9| 婷婷丁香成人| 99视频精品| 日本不卡中文字幕| 色情五月综合婷婷| 婷婷99狠狠躁天天| 91人妻人人做人碰人人爽九色| 国产精品色婷婷久久久精品| 操逼三区| 玖玖色综合网| 色九九综合| 日日夜夜天天综合| 五月丁香六月婷婷网| 亚洲色婷婷| 五月丁香777| 五月激情六月丁香| 伊人久久婷婷| 亚洲亚洲人成综合网络| 99精品偷自拍| 狠狠爱成人综合网| 伊人激情网| 一区二区三区四区牛| 综合久久伊人| 久久五月婷婷丁香| 九九RE视频在线精品| 91狠狠综合久久久久久| 高潮毛片遮挡费高一百度| 久热这里只有精品3| 色色色色色色色综合| 丁香综合伊人AV| 婷婷激情五月天小说| 色五XX| 99热这里全都是精品| 婷婷丁香六月| 色婷婷综合网| 91精品综合久久久久久五月丁香 | 日韩在线视频网站| 五月天色区| 狠狠综合| 99A片| 超碰国产AV| 激情婷婷丁香五月天| 久久er视频6| 天天日人人| 337午夜福利| 久久久人妻| 综合激情视频| 五月日韩中文字幕| 男人天堂 久久| 久久人人九九| 国产婷婷五月中文字幕高清| 五月网网站| 啪色综合| 欧美精品XXXXBBBB| 久久99免费视屏| 国产精品操| 亚洲VA欧美VA| 婷婷五月天激情五月天深爱五月天| 啪色综合| 国产在线aaa片一区二区99| 99久久天堂婷婷| 九九久久99精品免费观看www| 久久婷婷成人视频| 五月天狠狠草| 99在线精品观看99| 伊人香大香蕉视频| 极品少妇XXXX精品少妇偷拍| 草榴成人影片| 成人短视频在线| 99色色最新视频| 99精品网| 亚洲妇女熟BBW| 97人妻碰碰碰久久| 电影《战争与艾拉》免费观看| 操日挥操日日| 色色色色色色色色网站| 偷拍九九热| 成人五月天丁香婷| 五月天自拍视频| 婷婷婷婷婷婷婷婷| 欧美成人精品A片免费一区99| 啪啪色激情五月天| 丁香激惜男女| 九九色图| 中文字幕成人网站| BT综合在线视频观看| 五月婷婷在线网站| www.色9| 天天揷综合网| 婷婷丁香五月综合| 五月婷婷六月丁香综合在线| 91碰碰| 91色吧网| 久久aaaa片一区二区| 色婷婷丁香五月天| 久久精品日| 九九免费精品在线视频| 伊人久久大香线蕉av一区| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 韩国婷婷丁香五月| 婷婷九月| 激情性爱网站| 丁香婷婷啪啪啪| 激情五月天色色网| 色婷婷性爱| 综合久久伊人| 色五月天综合| 操91| 久久影视婷婷五月| 五月天婷婷青青草| 激情久久久| 丁香五月91| 偷拍五月丁香| 99热传媒| 天天成人综合| 丁香色五月天| 青青草轻轻操| 美女五月狠狠| 五月天婷婷网站| 丁香花五月天| 九九碰九九爱97| 九九色之九九色88| 五月性色| 最新婷婷五月丁香| 亚洲第精品| 99操视频| 色情五月天小说| 五月丁香色| 99热欧美精品| 综合激情五月天六月婷免费视频| AA片在线观看视频在线播放| 色婷婷丁香网| 涩五月婷婷| 欧美在线操| 国产激情在线| 色99婷婷五月天| 狠狠色综合网站久久久久| av中文字幕免费观看| 久久久久久久久久久久久久人妻视频| 99热综合| 成人精品在线| 色色婷婷五月| 日本99热| 在线播放成人网站| 亚洲欧美婷婷五月色综合| 婷婷午夜激情| 六月丁香综合| 99A级片| 亚洲网站999| 99久超碰| 影音先锋四区| 久久综合干| 91婷婷色五月| 超碰在线看| 少妇激情基地| 五月天婷婷久久| 色婷婷五月天激情| 天天日天天舔| 午夜理论片最新午夜理论剧 | 六月婷婷综合久久| 大香蕉中文| 99re视频在线播放| www.激情| 五月婷丁香花| 青草视频在线观看视频| 五月天欧美 另类小说| 亚洲精品又粗又大又爽A片| 亚洲色婷婷网站| 超碰成人黄色网| 99成人免费视频| 久久九九经典| 色九月婷婷丁香| 久久久大香蕉| AAA久久| 婷婷五月天.com| 五月天激情美女久久| 五月丁香婷爱在线| 99精品高潮| 久久久久亚洲AV成人无码电影| 五月天啪啪视频| 成年人丁香五月| 99 色色吧| 潘金莲AAAAAAAAAA| 五月天天天色| 9精品在线| 五月婷视频| 怡红院院久久| 婷婷色色丁香| 丁香六月激情四射| 99色6爱9热| 小香蕉av| 激情六月天婷婷| 色婷婷五月色| h在线看免费版在线看| 五月丁香激情综合网官网| 五月伊人91| 激情五月婷婷| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 中文字幕人妻熟女在线| 天天色综合网1| 亚洲色图81p| 婷婷狠狠操| 色播五月丁香婷婷| 97成人在线视频| 超碰色色综合| 五月丁香六月婷婷中合网| 在线日韩av| 欧美一级色| 激情婷婷丁香色情五月天| www99精品亚| 人人操99| 五月天婷婷黄色| 六月婷婷香蕉| 色色色综合网| 99无码黄色视频| 99久视频| 四色五月婷婷| 天天色播| 狠色狠色综合久久| 六月丁香综合| 99精品视频免费观看近期发布| 婷婷激情五月天激情| 久久99网站| 婷婷亚洲在线| 亚洲操操| 久久婷婷六月综合| 欧美天天爽| 五月天伊人久久| 欧美性爱五月天| 亚洲成人婷婷| 第四色色六月色综合| 99热观看| 91精品丝袜久久久久久| 丁香五月婷婷日本| 成人婷婷五月天| 玖玖婷婷婷丁香五月| 另类少妇人与禽zOZZ0性伦| 99综合视频| 婷婷瑟五月天久久综合| 九九狠狠干| 五月成人丁香av91| 激情伊人五月天| 精品久久久人妻| 丁香婷婷五月激情综合| 69精品无码一区二区三区| 婷婷综合激情| 123草逼网| 亭亭五月天黑人2014| 九九青青草成人| 99re在线免费视频| 麻豆AV一区二区三区| www.婷婷,com| 99爱免费视频| 影音先锋xfplay资源男人网| 国产AV不卡福利| 婷婷综合性爱网| 色偷偷综合| 五月婷婷亚洲色视频| 五月天婷婷导航| 亚洲色9| 91青娱乐青青草| 九九久久偷拍| 国产乱子轮XXX农村| www.色五月| 亭亭玉月丁香| 五月好婷婷| 26uuu色噜噜精品一区| 成人在线不卡| 第五婷婷伊人丁香| 在线五月婷| 国产又黄又爽又色的免费| 99热最新| 九月色婷婷综合| 热成人网| 97婷婷丁香五月天激情图片| 激情五月天丁香| 色婷婷a v| 九九久久免费视频44| 丁香五月天成人| 色婷婷成人做爰A片免费看网站 | 五月丁香综合激情在线观看| 久99久在线| 亚洲成人无码网站| 丁香五月成人自拍| 婷婷五月激情欧美大胆视频| 99成人| 亚洲激情综合| 日韩成人av在线| 激情丁香九九五月综合网| 99爱在线精品视频免费观看| 9这里只有精品| 婷婷丁香五月视频| 久热这里只有国产| 99视频在线| 91色色色| 成片免费播放| 国产综合色婷婷精品久久| 超碰国产AV| 97碰碰电影| 色五月婷婷天堂| 另类国产欧美视频| 婷婷六月香| 中文字幕在线视频播放| 九月婷婷在线视频| www99精品日韩| 激情性爱五月天网页| 国产肥白大熟妇BBBB视频| 99视频精品| 激情六月婷婷| 91九色在线| 97在线精品| 开心五月天激情网| 嫩草AV久久伊人妇女超级A| 婷婷五月花| 免费无码毛片一区二区A片| 中字幕视频在线永久在线观看免费| 99久热| 一本道在线电影| 9精品久久999| 婷婷五月花.97| 婷久久久| 日本全黄一级999| 丁香五月天天| 任你日视频| 丁香五月天堂网| 人妻性爱av网站| 狠狠做五月婷婷| 我爱va亚洲va52| 天天爽夜夜爽天天爽夜夜爽| 成人超碰Av| 色婷婷综合视频| 亚洲第一综合| 99在线热| 天天操天天插| 中字幕视频在线永久在线观看免费| 婷婷香草网| 69久久久| 99热精品99| 大香蕉手机视频| 久久er+| 色狠狠色噜噜噜a天堂一区| 国产综合网在线| 久久亚洲天堂| 成人av免费观看| 丁香六月天| 欧美三级韩国三级日本三斤| 欧美WW在线网| av在线资源| 色五月亚洲五月天| 综合九九| 天天射美女| www.夜夜| 狠狠色婷| 丁香五婷婷| 五月天无码| 丁香婷婷五月六月天| 久久久久久性爱视频| 99九九99九九九视频精彩| 五月丁香综合网| 亚洲激情四谢| 久色激情| 色综合播放| 日日夜夜爽| 亚洲精品视频在线播放| 午夜天堂一区人妻| 99资源人人| 久久人人看| 99色播| 激情五月综合婷婷| 色五月亚洲| 97色一二三| 丁香九月激情| 丁香婷婷色五月合集| 丁香五月婷婷五月天| 婷婷成人五月天| 久久久久久久,99精品视频| 婷久久| 丁香花五月天| 在线观看亚洲AV| 九九热免费视频| 色99婷婷五月天| 深夜婷婷五月丁香| 五月天开心婷婷激情网站| 五月丁香在线观看| 五月丁香A片| www久久99com| 99A片| 99热这里只有精品99| 91九色在线观看免费| 第2色五月婷| 日本天天色| 久久AAAA片一区二区| 五月天婷婷色色网| 亚洲综合丁香婷婷六月天| 停停五月色宗合| 五月色情| 爆乳熟妇一区二区三区爆乳照片| www激情网| 99久久99九九九99九他书对| 色婷婷很很丝袜| 五月丁香啪啪| 五月婷婷,六月丁香| 思思热在线视频精品| 97人妻碰碰碰久久| 激情婷婷亚洲五月| 九九热10| 1024AV视频| 色热久资源| 天天日天天色| 九九九激情综合| 狠狠爱综合| 丁香五月天在线观看| 桃色五月天| 婷婷99热| 丁香五月婷中字幕| 日本欧美成人片AAAA| 亚洲综合婷婷五月| 俺也高清无码高清视频| 成人在线日韩| 九九99九九99九九99视频网| 中文字幕婷婷五月天在线观看| 玖玖婷婷五月天| 九九精品综合| 婷婷丁香五月综合网上| 青草青草视频2免费观看| 亚洲黄色影视| 色五月五月天色婷婷色五月| 婷婷丁香18| 袁子仪视频观看| 91日本在线观看| 狠狠情色| 吉澤明步Av一區二區| 97色干在线观看| 九九国产精视频| 久草视频一,二三四| 综合九色| 欧美激情-区二区三区| 五月激情综合网| 噜噜色天天开心| 成人av中文字幕| 日韩美女羞羞网站在线观看| av性爱在线| 久久激情中文| 婷婷六月丁香激情综合| 久久久久人妻| 91精品久久久久久综合五月天| 亚洲精品视频电影| 热996精品在线观看| 夜夜做夜夜愛| 蜜桃婷婷丁香综合久久开心亚洲| 深爱激情AV| 五月天开心网| 婷婷六月丁香综合| www色五月| 玖热精品综合视频| 9久精品视频| 婷婷综合色| www.99婷婷| 五月丁香久| 99久久99久久| 婷婷久久精品| 狠狠色大香蕉| 91热网址| 六月婷婷啪啪| 久久久久网站| www.婷婷,com| 亚卅毛片| 五月婷啪啪| 激情99热| 五月丁香啪啪啪综合网| 日本一级| 99热啪啪| 久久五月天色婷婷| 亚洲AV成人在线| www.婷婷网| 欧美大肥婆大肥BBBBB| 色五月 激情婷婷 综合五月天| 久久久人妻| 第四色婷婷色五月| 玖玖爱伊人网| 激情小说 五月天| www.久操| 丁香五月天婷婷激情| 操碰久| 日本久久综合| 色欲人妻综合aaaaaaaa网| 婷婷五月丁香五月| 欧美成人网婷婷综合在线| 亚洲综合五月天婷婷| 婷婷五月天堂一本在线| 激情五月天第四色| 97色在线观看视频| 五月婷色色| 婷婷丁香六月| 激情伍月 欧美| 激情小说色五月| 99爱视频在线播放| 色九月欧美| 夜夜骑夜夜撸| 丁香六月中文| 日B日潘金莲BB| 泰州成人视频| 97视频久久| 九九热超碰| 艾小青av| 97日本在线| 丁香五月久久| 日本www五月婷婷| 亚洲图片 丁香婷婷| 五月丁香婷婷深深爱| 久久久网站| 无遮挡国产高潮视频免费观看| 久久视频九九视频| 婷婷丁香五月天熟女丝袜| 97干欧美| 婷婷五月丁香影院| 婷婷色色综合| 九九色色| 99色这里| av在线免费播放观看| 婷婷激情六月视频| 亚洲色色色色色色色色色| 强壮公让我夜夜高潮A片视频| 丁香五月开心五月激情| 91啪啪网| 996热| 岛国AV网| 亚洲综合在线视频| 超碰av在| 激情九色| 華人性愛AV在線| 五月婷婷丁香日韩在线| 超碰猛烈的性猛交| 色五月丁香五月激情五月激情| 久久综合五月天激情小说网站| A久久| 五月丁香综合网色欲| 亚洲欧美日韩另类| 激情婷婷五月天| 激情五月婷婷中文字幕| 亚洲欧洲午夜成人精品av| 五月色丁香婷婷中文字幕| 丁香六月激情网C0W| 五月婷婷丁香大陆免费| 成功精品影院| 伊人五月综合网| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 四川BBB搡BBB爽爽视频| 九九综合| 伊人日日干| 小色小蛇伊人婷婷色香五月| 九九成人视频| 精品色| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 九月丁香婷婷综合激情| 亚洲国产成人AV在线| 第五色婷婷| 五月丁香六月婷婷国产视频| 婷婷五月综合激情| 开心五月婷婷婷美女| 亚洲 25P| 丁香五月综合无码趴趴| 亚洲妇女熟BBW| 五月丁香六月婷婷激情网| 天天爱天天做天天舔| 人人操人人爽成人AV| 激情内射人妻1区2区3区| 色婷婷88| 情涩婷婷五月天| 欧美婷婷六月丁香综合色| 五月天堂六月丁香亚州中文字幕久久| 99视频| 伊人激情影院| 手机AVAV天堂看网| 大香蕉婷婷五月| 97日本在线播放| 久久久这里有精品| 激情五月天在线免费美女视频| 狠狠干五月丁香| 99在线精品视频| 久久精品亚洲一级牲爱综合| 狠狠五月激情在线| 特级操b片| 波多婷婷久久| 婷婷色在线| 综合大香蕉| 99精品福利视频| 丁香五月狠狠综合欧美| 亚洲激情AV| 九月丁香八月婷婷久久综合久97| 99久久国产宗和精品1上映| 少妇高潮一区二区三区99欧美| 五月婷婷激情久久| 中文字幕丁香五月| 91精品91久久久中77777| 射久久丁香五月| 五月丁香亚州综合网| 亚洲精品一区无码A片| 激情五月综合网| 色婷婷激情| 色噜噜婷婷| www 五月天 com| 色色色视频免费无码| 天天爽在线视频| 九九色人| 97热精品| 美腿丝袜AV天堂网|