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

ARTICLE DETAIL

資訊詳情

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

Flutter 2.8.1下官方video_player插件集成與踩坑完整指南

Flutter 2.8.1下官方video_player插件集成與踩坑完整指南 很多人一提到“Flutter播放視頻”第一反應(yīng)就是去翻第三方庫但其實(shí)官方插件video_player已經(jīng)能覆蓋絕大多數(shù)業(yè)務(wù)場(chǎng)景。我這次在一個(gè)舊項(xiàng)目里用的是Flutter 2.8.1Dart版本還停留在2.15左右沒有空安全之外的新特性加持很多新版本插件根本不敢升。所以干脆把video_player在這個(gè)版本下從集成到踩坑完整走了一遍這篇就把整個(gè)過程記錄下來供同樣被老版本鎖住手腳的開發(fā)者參考。先交代一下背景項(xiàng)目是一個(gè)帶視頻播放的資訊類App不需要直播、不需要復(fù)雜的DRM核心訴求是能穩(wěn)定播放MP4和HLS流支持橫豎屏切換在列表頁能復(fù)用播放器實(shí)例。選video_player的原因很簡(jiǎn)單官方維護(hù)、API穩(wěn)定、2.8.1版本兼容性沒問題而且它內(nèi)部是基于各平臺(tái)原生播放器封裝Android底層是ExoPlayeriOS底層是AVPlayer性能和系統(tǒng)適配都交給原生層處理Flutter層只做狀態(tài)同步這對(duì)一個(gè)維護(hù)成本不高的小團(tuán)隊(duì)來說是最合理的選擇。1. 為什么2.8.1這個(gè)版本值得單獨(dú)聊老版本的典型困局先說版本問題。2.8.1是2021年底發(fā)布的版本放到現(xiàn)在看確實(shí)不算新但很多存量項(xiàng)目就是跑在這個(gè)版本上原因無非是業(yè)務(wù)代碼量大、不想冒險(xiǎn)升級(jí)或者第三方SDK還沒適配新版Flutter。這個(gè)版本有幾個(gè)特點(diǎn)直接影響視頻播放方案的選擇。第一個(gè)特點(diǎn)是Dart 2.15不支持最新的空安全語法演進(jìn)很多插件的最新版本已經(jīng)放棄了對(duì)它的支持。video_player目前最新的2.x版本需要更高的Flutter版本但2.8.1對(duì)應(yīng)的video_player版本大概在2.2.x左右這個(gè)版本號(hào)區(qū)間內(nèi)API基本穩(wěn)定功能足夠用。挑版本的時(shí)候不能無腦拉最新要看插件的pubspec.yaml里聲明的environment約束。第二個(gè)特點(diǎn)是2.8.1時(shí)代的熱重載對(duì)原生播放器狀態(tài)恢復(fù)并不完美。如果你在播放視頻時(shí)改了Dart層的代碼觸發(fā)熱重載經(jīng)常會(huì)出現(xiàn)畫面黑屏但音頻還在播放的詭異狀態(tài)。這不是你代碼的問題是插件內(nèi)部的原生播放器實(shí)例沒有跟著Flutter框架一起重建導(dǎo)致的。后面我會(huì)專門講這個(gè)坑。第三個(gè)特點(diǎn)是你需要用apply方式在老版本里配Gradle插件?,F(xiàn)在新建Flutter項(xiàng)目默認(rèn)用pluginsDSL2.8.1的項(xiàng)目還是apply腳本式配置一旦要改Android端的構(gòu)建腳本很多新文檔里的寫法直接抄會(huì)報(bào)錯(cuò)。所以這篇博文不是寫給“最新版Flutter用戶”看的而是寫給那批和我一樣被2.8.1鎖定、又想穩(wěn)定播放視頻的開發(fā)者。如果你用的是3.x以上版本有些操作可以簡(jiǎn)化但整體思路依然通用。2. 從pubspec到第一個(gè)能出畫面的播放器完整搭建過程2.1 版本鎖定與依賴引入在pubspec.yaml里加依賴的時(shí)候我建議直接鎖版本不要用^符號(hào)放開上限。因?yàn)镕lutter 2.8.1對(duì)video_player的具體兼容版本是有邊界的我用的是2.2.10這個(gè)版本在2.8.1上實(shí)測(cè)穩(wěn)定Android和iOS的端上都沒有出現(xiàn)編譯錯(cuò)誤。dependencies: flutter: sdk: flutter video_player: 2.2.10加了依賴之后執(zhí)行flutter pub get如果網(wǎng)絡(luò)環(huán)境不太好可能會(huì)卡在解析依賴階段。這里有個(gè)老版本的項(xiàng)目級(jí)小技巧優(yōu)先檢查本地的pubspec.lock里是否已經(jīng)有兼容版本緩存如果有可以用flutter pub get --offline快速完成拉取實(shí)測(cè)在CI環(huán)境里能省不少時(shí)間。2.2 Android端的必要配置video_player在Android上要求最低API 212.8.1默認(rèn)生成的項(xiàng)目模板里minSdkVersion是16如果不改編譯階段就會(huì)報(bào)錯(cuò)。必須在android/app/build.gradle里把minSdkVersion提到21。android { defaultConfig { minSdkVersion 21 // ... } }這個(gè)改動(dòng)不涉及業(yè)務(wù)代碼但漏掉的人特別多因?yàn)閳?bào)錯(cuò)信息往往要到flutter build apk的階段才會(huì)暴露出來而且錯(cuò)誤提示是Gradle構(gòu)建失敗第一眼根本想不到是minSdkVersion的問題。另外AndroidManifest不需要額外加網(wǎng)絡(luò)權(quán)限因?yàn)関ideo_player的Android實(shí)現(xiàn)已經(jīng)在插件清單里聲明了INTERNET權(quán)限。但如果你的項(xiàng)目在release包里去掉了插件的清單合并就要自己確認(rèn)一下。2.3 iOS端的Info.plist配置iOS端只做本地視頻播放的話不需要特殊配置如果播放網(wǎng)絡(luò)視頻則需要確保App Transport Security允許HTTP明文請(qǐng)求。我在調(diào)試階段經(jīng)常用局域網(wǎng)內(nèi)的測(cè)試視頻源很多是HTTP協(xié)議的所以需要在ios/Runner/Info.plist里臨時(shí)加上NSAppTransportSecurity的NSAllowsArbitraryLoads。keyNSAppTransportSecurity/key dict keyNSAllowsArbitraryLoads/key true/ /dict上線前如果視頻源全部是HTTPS這段配置可以刪掉否則App Store審核會(huì)有風(fēng)險(xiǎn)提示。2.4 一個(gè)最小可用的播放器頁面下面這段代碼是能跑起來的最短實(shí)現(xiàn)包含創(chuàng)建控制器、初始化、播放、暫停、銷毀的完整生命周期。我用的是StatefulWidget因?yàn)榭刂破鞅仨毟鳶tate的生命周期走。import package:flutter/material.dart; import package:video_player/video_player.dart; class SimplePlayerPage extends StatefulWidget { final String url; const SimplePlayerPage({Key? key, required this.url}) : super(key: key); override StateSimplePlayerPage createState() _SimplePlayerPageState(); } class _SimplePlayerPageState extends StateSimplePlayerPage { late VideoPlayerController _controller; late Futurevoid _initializeFuture; override void initState() { super.initState(); _controller VideoPlayerController.network(widget.url); _initializeFuture _controller.initialize(); } override void dispose() { _controller.dispose(); super.dispose(); } Futurevoid _togglePlay() async { await _initializeFuture; if (_controller.value.isPlaying) { await _controller.pause(); } else { await _controller.play(); } setState(() {}); } override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text(視頻播放)), body: FutureBuilder( future: _initializeFuture, builder: (context, snapshot) { if (snapshot.connectionState ! ConnectionState.done) { return const Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center(child: Text(加載失敗: $snapshot.error)); } return GestureDetector( onTap: _togglePlay, child: Center( child: AspectRatio( aspectRatio: _controller.value.aspectRatio, child: VideoPlayer(_controller), ), ), ); }, ), ); } }這段代碼有一個(gè)細(xì)節(jié)很多人會(huì)忽略_togglePlay里必須先await _initializeFuture因?yàn)槿绻脩粼诰W(wǎng)絡(luò)較慢時(shí)快速點(diǎn)擊畫面控制器還沒初始化完成就去調(diào)play()底層原生播放器會(huì)直接拋異常。把FutureBuilder和點(diǎn)擊事件里的await結(jié)合起來可以保證任何操作都在初始化完成之后執(zhí)行。3. 核心API的調(diào)用邏輯與播放器狀態(tài)機(jī)搞懂這幾個(gè)方法就夠用video_player的API其實(shí)不復(fù)雜核心對(duì)象就是VideoPlayerController它內(nèi)部通過一個(gè)VideoPlayerValue對(duì)象承載當(dāng)前播放狀態(tài)。你在頁面上做的所有操作本質(zhì)上都是修改這個(gè)Value然后觸發(fā)notifyListeners讓VideoPlayer控件重建渲染紋理。3.1 控制器的創(chuàng)建選型創(chuàng)建控制器有三條路network、file、asset。大部分業(yè)務(wù)場(chǎng)景用的是network它的初始化會(huì)異步完成視頻源的探測(cè)和首幀加載。這里有個(gè)關(guān)鍵點(diǎn)initialize()返回的Future一旦完成value.isInitialized就會(huì)變成true同時(shí)value.duration、value.aspectRatio才會(huì)被正確填充。所以在FutureBuilder里判斷初始化狀態(tài)是最穩(wěn)妥的做法。file模式用于本地文件播放比如下載到應(yīng)用沙盒里的視頻。注意file模式傳的是File對(duì)象路徑必須是應(yīng)用可訪問的目錄asset模式打包在安裝包里適合放一些引導(dǎo)視頻、說明視頻。3.2 播放控制與進(jìn)度監(jiān)聽play()和pause()都是異步方法這也意味著調(diào)用后的狀態(tài)變化不是立即生效的。如果想要精確控制UI建議通過監(jiān)聽VideoPlayerValue而不是在調(diào)用后立刻讀狀態(tài)。系統(tǒng)提供了addListener回調(diào)我一般會(huì)在頁面里加一個(gè)setState來刷新進(jìn)度條。_controller.addListener(() { if (!mounted) return; setState(() {}); });這里的mounted判斷極其重要因?yàn)榭刂破髟诓シ磐瓿珊笥锌赡芤呀?jīng)進(jìn)入dispose流程異步回調(diào)觸發(fā)的setState會(huì)導(dǎo)致“setState called after dispose”的運(yùn)行時(shí)錯(cuò)誤。我見過很多線上崩潰都發(fā)生在頁面已關(guān)閉但播放器的監(jiān)聽還在回調(diào)的場(chǎng)景。進(jìn)度條通常需要當(dāng)前播放位置和總時(shí)長(zhǎng)從controller.value.position和controller.value.duration里取。position是Duration類型長(zhǎng)時(shí)間播放后精確到毫秒直接顯示沒必要一般格式化成mm:ss。3.3 橫豎屏切換的正確姿勢(shì)視頻播放頁最常見的一個(gè)需求是旋轉(zhuǎn)屏幕時(shí)播放器跟隨旋轉(zhuǎn)。video_player本身不管屏幕方向它只管視頻紋理的寬高比。屏幕方向需要自己借助SystemChrome.setPreferredOrientations來控制。// 進(jìn)入全屏 await SystemChrome.setPreferredOrientations([ DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight, ]); // 退出全屏 await SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, ]);這里有個(gè)體驗(yàn)細(xì)節(jié)切換方向之后播放器頁面的build方法會(huì)重新執(zhí)行如果你是用AspectRatio(aspectRatio: controller.value.aspectRatio)包裹視頻的畫面會(huì)自適應(yīng)新的屏幕寬高不會(huì)變形。但是如果你直接給VideoPlayer設(shè)置了固定寬高旋轉(zhuǎn)后就會(huì)出現(xiàn)黑邊或者拉伸。切換到全屏?xí)r還要注意隱藏系統(tǒng)UI我一般會(huì)用SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky)把狀態(tài)欄和導(dǎo)航欄一起隱藏掉退出全屏?xí)r再改回SystemUiMode.edgeToEdge。3.4 播放器的狀態(tài)監(jiān)聽閉環(huán)完整的狀態(tài)機(jī)大概是下面這串初始化中 → 初始化完成 → 播放中 → 暫停中 → 播放完成 → 釋放。VideoPlayerValue里有一個(gè)isPlaying屬性標(biāo)識(shí)播放狀態(tài)還有一個(gè)isCompleted標(biāo)識(shí)是否播放到末尾。播放完成后如果想重新播放不能直接調(diào)用play()必須先seekTo(Duration.zero)再play()否則部分設(shè)備會(huì)無響應(yīng)。4. 雙端平臺(tái)適配里最容易栽的坑Android和iOS的差異實(shí)錄4.1 Android音頻焦點(diǎn)與后臺(tái)播放的沖突video_player在Android上默認(rèn)會(huì)請(qǐng)求音頻焦點(diǎn)。如果你正在播放視頻這時(shí)候來了一條系統(tǒng)通知或者另一個(gè)應(yīng)用開始播放音頻你的視頻聲音會(huì)被系統(tǒng)壓低或者直接暫停。這是ExoPlayer的默認(rèn)行為不一定是你代碼里的問題。處理方式是在初始化控制器時(shí)設(shè)置VideoPlayerOptions的mixWithOthers屬性。我實(shí)測(cè)過這個(gè)屬性在2.2.10版本里是可用的設(shè)置成true之后視頻聲音會(huì)和其它音頻混音輸出不會(huì)互相打斷。_controller VideoPlayerController.network( widget.url, videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), );但如果你的App定位是視頻播放器用戶一般期望在看視頻的時(shí)候暫停其它聲音那就不應(yīng)該開這個(gè)選項(xiàng)。4.2 iOS靜音模式下的播放行為iOS端的坑更隱蔽。iPhone的靜音撥片默認(rèn)會(huì)同時(shí)讓AVPlayer的音頻輸出變成靜音但video_player插件的實(shí)際表現(xiàn)取決于AVAudioSession的配置。簡(jiǎn)單說如果你希望用戶即便在靜音模式下也能聽到視頻聲音就必須在播放前激活音頻會(huì)話。video_player官方文檔沒有直接暴露這個(gè)配置但可以通過在iOS原生工程里添加一段音頻會(huì)話配置來實(shí)現(xiàn)。我在AppDelegate.swift里加過下面這段let audioSession AVAudioSession.sharedInstance() try? audioSession.setCategory(.playback, mode: .moviePlayback) try? audioSession.setActive(true)加完之后靜音模式下視頻依然有聲音。如果你的業(yè)務(wù)場(chǎng)景更希望尊重系統(tǒng)靜音設(shè)置那就不動(dòng)這個(gè)只在普通模式下播放。4.3 頁面切后臺(tái)后的播放器行為實(shí)測(cè)發(fā)現(xiàn)2.8.1版本的video_player在App進(jìn)入后臺(tái)后視頻畫面會(huì)凍結(jié)但音頻不會(huì)立即停止Android和iOS的表現(xiàn)還不一致。這非常考驗(yàn)生命周期管理。我的做法是監(jiān)聽WidgetsBindingObserver的生命周期回調(diào)在AppLifecycleState.paused時(shí)主動(dòng)pause()在resumed時(shí)恢復(fù)播放。如果你確實(shí)需要后臺(tái)繼續(xù)播放聲音那不能靠這個(gè)插件要引入audio_service這類專門的后臺(tái)音頻插件視頻畫面在后臺(tái)本來就是不可能繼續(xù)渲染的。5. 列表頁復(fù)用播放器實(shí)例不止一種姿勢(shì)單頁面播放沒有難度難點(diǎn)在于列表頁里做“點(diǎn)擊即播放”的體驗(yàn)。短視頻App那種無限滑動(dòng)自動(dòng)播放的效果用video_player也能做但有幾個(gè)架構(gòu)上的決策決定了后續(xù)維護(hù)是否順暢。5.1 多實(shí)例 vs 單實(shí)例我是怎么取舍的很多人在列表頁里給每個(gè)item創(chuàng)建一個(gè)VideoPlayerController滑動(dòng)離開時(shí)再銷毀。這種做法在數(shù)據(jù)量小的時(shí)候沒毛病但一旦列表超過20個(gè)item每個(gè)item都持有原生播放器實(shí)例內(nèi)存會(huì)迅速飆升。我的方案是維護(hù)一個(gè)全局單例播放管理器整個(gè)列表頁只持有一個(gè)控制器實(shí)例。當(dāng)用戶點(diǎn)擊某個(gè)item時(shí)把播放器“綁定”到當(dāng)前item用戶滑走或者點(diǎn)擊下一個(gè)item時(shí)先釋放當(dāng)前控制器的視頻源再加載新的視頻源。class VideoPlayManager { VideoPlayManager._(); static final VideoPlayManager instance VideoPlayManager._(); VideoPlayerController? _controller; int? currentIndex; Futurevoid playVideo(String url, int index) async { if (_controller ! null) { await _controller!.pause(); await _controller!.dispose(); } currentIndex index; _controller VideoPlayerController.network(url); await _controller!.initialize(); await _controller!.play(); } }這個(gè)單例的好處是內(nèi)存占用可控切換視頻時(shí)的狀態(tài)管理集中在一個(gè)文件里排查問題時(shí)思路清晰。缺點(diǎn)是切換視頻會(huì)先銷毀再創(chuàng)建中間存在一個(gè)短暫的空窗體驗(yàn)上會(huì)有一瞬間的停頓。5.2 用ValueNotifier驅(qū)動(dòng)列表UI刷新列表頁的每個(gè)item都不需要自己持有VideoPlayerController而是監(jiān)聽播放管理器里的當(dāng)前播放索引。我用一個(gè)ValueNotifierint來標(biāo)記當(dāng)前正在播放的item序號(hào)item內(nèi)部通過ValueListenableBuilder決定自己是否顯示VideoPlayer控件。這樣列表刷新很干凈——正在播放的item重建一次其它item完全不參與重建滾動(dòng)性能影響很小。如果你用setState刷新整個(gè)列表那在低端安卓機(jī)上滑動(dòng)時(shí)會(huì)有肉眼可見的掉幀。5.3 滑動(dòng)列表時(shí)播放器失效的處理方案在ListView里直接放VideoPlayer控件有一個(gè)隱患item被回收或者移出視圖樹后播放器的紋理可能會(huì)失效。即使控制器還沒銷毀畫面也會(huì)變成黑屏。解決辦法是在ListView的itemBuilder里判斷當(dāng)前item是否可見不可見就移除VideoPlayer控件但保留控制器可見時(shí)重新掛載。重新掛載后VideoPlayer會(huì)從控制器當(dāng)前的position處繼續(xù)渲染不會(huì)跳回開頭。這個(gè)特性對(duì)體驗(yàn)很重要我實(shí)驗(yàn)過多次只要不銷毀控制器重新掛載控件不會(huì)導(dǎo)致播放進(jìn)度丟失。6. 性能調(diào)優(yōu)與播放體驗(yàn)細(xì)節(jié)從卡頓到流暢的差距在哪兒6.1 視頻解碼的“隱形成本”和緩沖策略video_player底層是系統(tǒng)解碼器視頻流的編碼格式直接影響性能。H.264是兼容性最好的選擇H.265HEVC雖然壓縮率高但在老設(shè)備上解碼器可能不支持播放時(shí)會(huì)卡頓甚至黑屏。用網(wǎng)絡(luò)視頻源時(shí)建議后端優(yōu)先輸出H.264AAC的MP4格式保證2.8.1版本的播放器在絕大多數(shù)設(shè)備上都能流暢工作。緩沖策略上VideoPlayerController默認(rèn)的緩沖行為是“等到有足夠數(shù)據(jù)再開始播放”網(wǎng)絡(luò)差時(shí)表現(xiàn)為進(jìn)度條轉(zhuǎn)圈很久才能出畫面。如果想盡快出畫面可以設(shè)置videoPlayerOptions里的httpHeaders配合服務(wù)端做分片請(qǐng)求不過這取決于你的視頻源是否支持Range請(qǐng)求。實(shí)測(cè)下來支持Range的MP4在弱網(wǎng)下起播速度明顯優(yōu)于不支持Range的源。6.2 畫面質(zhì)量與清晰度的控制VideoPlayer控件本身不做清晰度切換清晰度切換屬于業(yè)務(wù)邏輯不同的清晰度對(duì)應(yīng)不同的URL。實(shí)現(xiàn)方式是在頁面頂部或側(cè)邊欄放一個(gè)清晰度選擇按鈕點(diǎn)擊后重建一個(gè)指向新URL的控制器并從當(dāng)前進(jìn)度位置繼續(xù)播放。Futurevoid switchQuality(String newUrl) async { final position _controller.value.position; final wasPlaying _controller.value.isPlaying; await _controller.dispose(); _controller VideoPlayerController.network(newUrl); await _controller.initialize(); await _controller.seekTo(position); if (wasPlaying) { await _controller.play(); } setState(() {}); }這里要注意的是dispose后再initialize的間隙控制器是null狀態(tài)UI層需要加一個(gè)標(biāo)志位避免空指針崩潰。我在切換清晰度時(shí)會(huì)彈一個(gè)居中的加載圈等新控制器初始化完成再關(guān)掉。6.3 渲染層面的紋理更新機(jī)制VideoPlayer的實(shí)現(xiàn)原理是Flutter通過Texture控件把原生播放器的圖像幀傳到GPU渲染層。在2.8.1版本里紋理更新走的是TextureId的同步機(jī)制如果你在同一幀里同時(shí)操作多個(gè)播放器紋理有極小概率出現(xiàn)畫面撕裂。這屬于引擎底層的邊緣情況普通項(xiàng)目不會(huì)碰到但我在做“一個(gè)頁面同時(shí)畫中畫播放兩個(gè)視頻”時(shí)確實(shí)遇到過。如果業(yè)務(wù)上有同時(shí)播放多個(gè)視頻的需求建議限制為最多兩個(gè)實(shí)例并且錯(cuò)開播放的啟停時(shí)間避免在同一幀里同時(shí)做控制器的狀態(tài)變更。7. 配合Provider做全局播放狀態(tài)從播放器到業(yè)務(wù)組件的通信很多項(xiàng)目里播放器不只是孤立的一個(gè)頁面它往往需要和評(píng)論區(qū)、分享按鈕、消息紅點(diǎn)等業(yè)務(wù)組件聯(lián)動(dòng)。這時(shí)候只靠頁面內(nèi)部的setState就不夠了需要把播放狀態(tài)提升到全局。Flutter 2.8.1時(shí)代最常用的方案是Provider配合ChangeNotifier可以很自然地實(shí)現(xiàn)跨頁面通信。我在這類需求里的做法是定義一個(gè)VideoPlayerProvider持有控制器引用和播放狀態(tài)然后通過ChangeNotifierProxyProvider把它掛在頂層路由下。class VideoPlayerProvider extends ChangeNotifier { VideoPlayerController? controller; bool isMuted false; double playbackSpeed 1.0; void attachController(VideoPlayerController c) { controller?.removeListener(_onControllerUpdate); controller c; controller?.addListener(_onControllerUpdate); notifyListeners(); } void _onControllerUpdate() { notifyListeners(); } void toggleMute() { isMuted !isMuted; controller?.setVolume(isMuted ? 0 : 1); notifyListeners(); } void setSpeed(double speed) { playbackSpeed speed; controller?.setPlaybackSpeed(speed); notifyListeners(); } }列表頁、詳情頁、懸浮窗都可以通過context.readVideoPlayerProvider()拿到同一個(gè)播放狀態(tài)。有個(gè)優(yōu)點(diǎn)要說清楚這個(gè)方案把“播放器”從“頁面”里徹底解耦了頁面銷毀播放器不一定銷毀。如果你想在App的迷你懸浮窗里繼續(xù)播放列表頁的視頻這個(gè)架構(gòu)是必須的。不過要提醒一點(diǎn)全局持有播放器意味著你要有等價(jià)全局的dispose時(shí)機(jī)。我是讓Provider的頂層ChangeNotifierProxyProvider隨著App退出時(shí)才銷毀不能隨頁面銷毀。否則頁面銷毀后想再播放就沒有控制器可用。8. 日志、異常與線上問題的排查手段播放黑屏別慌視頻播放類問題很多是偶發(fā)性的在開發(fā)機(jī)上復(fù)現(xiàn)不出來上線后用戶那邊就報(bào)黑屏。我的經(jīng)驗(yàn)是一定要在initialize()失敗時(shí)打出完整錯(cuò)誤信息并在VideoPlayerValue里記錄播放器狀態(tài)方便線上日志反推。8.1 初始化失敗的常見原因排查initialize()返回的Future如果拋出異常最常見的是網(wǎng)絡(luò)視頻地址無法訪問、跨域問題、視頻格式不被解碼器支持。在catchError里多打一層日志至少記錄URL、HTTP狀態(tài)碼、異常類型。有一回我排查線上黑屏日志里只有一條PlatformException根本看不出是網(wǎng)絡(luò)問題還是解碼問題。后來我在initialize前先做一次http.Head請(qǐng)求確認(rèn)視頻文件是否存在、是否支持Range請(qǐng)求把這兩層信息拼在一起問題立刻定位到源站沒有開啟Range支持。8.2 用Flutter自帶工具觀察紋理狀態(tài)Flutter 2.8.1的WidgetInspector里可以看到Texture控件的textureId。如果播放器正常這個(gè)ID應(yīng)該是一個(gè)穩(wěn)定遞增的數(shù)字如果畫面黑屏可以先看這個(gè)ID是否變化。ID不變說明原生播放器的幀沒有上新是解碼或渲染鏈路的問題ID一直在變但畫面黑屏則可能是渲染層被其它控件遮擋并不是播放器的問題。這個(gè)排查思路可以幫你快速區(qū)分前端布局問題和后端播放問題省去盲目改代碼的時(shí)間。8.3 常見異常與應(yīng)對(duì)速查下面整理這份異常速查表來自我項(xiàng)目里遇到的真實(shí)問題。異?,F(xiàn)象可能原因處理辦法初始化超時(shí)進(jìn)度圈一直轉(zhuǎn)網(wǎng)絡(luò)源響應(yīng)太慢或URL失效給initialize()加超時(shí)包裹超時(shí)后提示用戶重試播放幾分鐘后畫面卡死視頻源服務(wù)端未正確響應(yīng)Range分片檢查源站是否緩存完整文件調(diào)整CDN配置音頻正常但畫面不動(dòng)紋理ID未刷新多為熱重載遺留狀態(tài)完全停止App重新啟動(dòng)避免在熱重載狀態(tài)下調(diào)試播放器iOS無聲音AVAudioSession未配置播放模式參考4.2配置session categoryAndroid閃退minSdkVersion低于21檢查build.gradle配置列表快速滑動(dòng)時(shí)卡頓多個(gè)控制器實(shí)例同時(shí)存活改用單例管理器銷毀不可見item的播放器9. 善用播放速率與控制邏輯不常見的但好用的功能video_player除了基礎(chǔ)播放暫停還有幾個(gè)被低估的能力。一個(gè)是setPlaybackSpeed可以控制倍速播放我用它做了“長(zhǎng)按加速預(yù)覽”的功能。另一個(gè)是setVolume音量控制范圍是0到1。還有一個(gè)是seekTo的毫秒級(jí)精確定位可以用來做視頻里的小節(jié)跳轉(zhuǎn)。倍速播放有一個(gè)隱藏坑iOS上AVPlayer對(duì)倍速的支持是通過rate屬性實(shí)現(xiàn)Android上ExoPlayer則會(huì)把播放速度應(yīng)用到音頻解碼器。兩者對(duì)倍速的邊界值限制不同iOS支持0.5到2.0Android部分設(shè)備最大只能到1.5超出范圍會(huì)靜默失敗。我在做快進(jìn)預(yù)覽時(shí)用了2.0倍速在部分Android設(shè)備上沒有效果后來統(tǒng)一封裝成1.5倍兼容性才穩(wěn)定。播放速率改變后VideoPlayerValue.isPlaying不會(huì)變化但實(shí)際播放進(jìn)度會(huì)變快進(jìn)度條如果用position / duration來計(jì)算會(huì)自動(dòng)正確顯示這一點(diǎn)不用額外處理。10. 從一個(gè)插件到一個(gè)基礎(chǔ)播放組件沉淀下來的通用封裝最后說說我把video_player封裝成團(tuán)隊(duì)通用組件的經(jīng)驗(yàn)。直接在每個(gè)頁面里寫控制器和FutureBuilder代碼重復(fù)度太高而且很容易埋坑。我沉淀了一個(gè)AppVideoPlayer組件對(duì)外只暴露三個(gè)參數(shù)視頻地址、是否自動(dòng)播放、播放狀態(tài)回調(diào)。內(nèi)部邏輯包含控制器生命周期管理、生命周期觀察頁面進(jìn)入后臺(tái)自動(dòng)暫停、播放完成通知、網(wǎng)絡(luò)狀態(tài)兜底提示。這個(gè)組件本質(zhì)上是一個(gè)“帶殼的播放器”業(yè)務(wù)方拿到任何一個(gè)視頻URL都能播放不需要關(guān)心平臺(tái)差異和生命周期細(xì)節(jié)。組件里一個(gè)關(guān)鍵點(diǎn)是對(duì)外暴露provider對(duì)象而不是暴露一堆控制方法。這樣外層頁面可以拿到播放器實(shí)例做進(jìn)度條聯(lián)動(dòng)、清晰度切換但不會(huì)跳過組件內(nèi)部的生命周期管理。給團(tuán)隊(duì)用的時(shí)候還有個(gè)小細(xì)節(jié)命名空間和版本號(hào)要寫清楚。video_player在2.x版本之間API有細(xì)微差別如果不同業(yè)務(wù)線用了不同的組件版本日志和調(diào)試信息會(huì)非常混亂。我建議在主項(xiàng)目的pubspec.yaml里統(tǒng)一鎖定版本號(hào)子模塊不要各自維護(hù)播放器依賴。從2.8.1這個(gè)稍微“過時(shí)”的版本出發(fā)把官方video_player吃透之后你會(huì)發(fā)現(xiàn)它比想象中可靠得多。大部分播放問題不是因?yàn)椴寮恍卸羌煞绞?、生命周期控制、平臺(tái)差異適配這三層沒有處理干凈。我個(gè)人體會(huì)是視頻播放器的核心不是API調(diào)用而是狀態(tài)管理和平臺(tái)細(xì)節(jié)的兜底能力這兩塊做到位直播、點(diǎn)播、短視頻、長(zhǎng)視頻都能在一套架構(gòu)上自然擴(kuò)展。最后再分享一個(gè)小技巧調(diào)試視頻播放問題的時(shí)候盡量用真實(shí)設(shè)備而不是模擬器模擬器上的解碼器表現(xiàn)和真機(jī)差距很大很多你以為的代碼問題換到真機(jī)上根本不復(fù)現(xiàn)。這個(gè)習(xí)慣能幫你省掉至少一半的無用排查時(shí)間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品久久久久,69国产成人精| 日本色色网| 欧美伦乱爱| 99国产女人| 国产综合永久精品日韩鬼片| 国产精品69久久久久久久| 亚洲天堂中文字| 91色堂| 岛国大片在线观看网站入口| 97欧美久久久久久久| 国产精品探花视频| 一区二区三区免费岛国片| WWW.操逼.COM| 久操网视频| 日韩毛片9| 国产第二页| 成人三一级一片aaa| 久久日韩肥臀| 一区久久久二区| 亚洲 欧美 日韩 国产一区二区| 美女淫穴| 五月婷婷六月天| 91肉丝| 天天干天天日天天射黄色大片 | 中文字幕三四五区| 欧美亚洲韩国视频十五区| 久久一区,青青青青草视频在线播放| 18啪啪手机免费性爱| 97在线观视频免费观看| 五月激情综合网| 亚洲第2页| 啊啊啊好大好深| 成人AV素股で擦久久| 第四色奇米影视777| 色色九区| 亚洲一卡二卡在线免费| 亚洲熟女诱惑| 男人的天堂kva| 九九九九九九九九九九九免费国产| 亚洲综合另类| 婷婷四五区| 亚洲天堂,男人| 九九热五区| 超碰 97国产熟女| a在线视频免费观看| 亚洲色综合| 长久操视频| 日本久操视频| 国产AV天美| 九九精品美女高溯喷水| 91Chinese在线| 强被迫伦姧在线观看无码网站| 亭亭在线资源| 久久久久久免费电影| 国产精品久久久久久久久久久久久久久久 | av东京热男人的天堂| 日韩熟女视频二区| 欧美亚州综合网图片| 久久大陆| 亚洲国产成人福利在线观看| 亚洲一区二区三区播放在线| 色欲蜜臀AV| 欧美亚洲高清不卡| 99热这里是精品| www老逼91| 青青草日本中文字幕| 超碰吊日色| 97鸡把在线视频| 国产精品女aA片爽爽视频| 日本伦乱九九九综合| 精品人妻少妇| 大香蕉www.超碰| 久久午夜鲁丝片| 特级毛片特黄久久免费看| 爱我干综合| 天堂8在线新版官网| 日本五十路熟女一区二区| 国产51色综合久久免费| 欧州激情视频在线一区二区| 91九色丰满高潮| av三级电影在线播放| 国产欧美成人第一页在线观看| 国产呦精品一区二区三区下载| 亚洲精品久| 欧美91久久久久| 99久久久| 亚洲AV无码久久久国产精品| 人妻日日夜夜精品| 色综合国产在线观看| 99久久精品国产高潮| 素人美腿视频网站| 久久久久久人| 亚洲欧美国产其他二区| 天天碰操中国年青熟妇| 日韩有码中文字幕女同性恋| 不卡在线一区,精品一区二区三区中| 欧美亚洲日韩人妻在线观看| 99久在线精品99re8热视频在线| 91人人| 精品国产一区二区三区在线播出| 亚洲激情综合| 超碰地址久久| 天天日少妇逼AV| 二级毛片| 在线中文字幕| 粉嫩AV一区夜夜嗨| 色香综合| 色老汉玖玖爱| 日韩啊V| 少妇啪啪自拍| 青青网三级视频| 麻豆人妻少妇在线免费观看| 免费操逼91| 亚洲高清无码在线桃色| 亚洲激情色片 | h无码动漫在线观看| 奸色色 男人天堂 天天射| 91无码人妻精品一区二区三区蜜桃| 国产精品一区二区三区四区五区| 日本色婷婷| 久久久啊啊啊| 操死我了嗯嗯嗯| 日韩黄色片子| 欧美人妻中出| 亚洲天堂无码| 青青操在线亚洲视频观看欧美在线 | 啊啊啊操死我| 人人做人人妻人人夜视频| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 国内三级自拍小视频在线观看| 人妻酒店出差被中出免费在线播放| 国产主播福利| 亚洲性少妇| 91天堂色男人的天堂| 99热超碰| 久久天天艹| 国产精品久久久久久久久久久久久久久久 | 蜜乳中文字幕a在线| 美女超碰978| av亚欧| 久草色悠悠在线视频| 久久亚州精品成人Av无| 九一亚洲国产免费| 九九久久一区二区伦理| 婷婷九月丁香| 亚熟在线| 最新亚洲黄色免费电影| 日日日骚女人精品| 色五月综合| 欧美天天弄| 色眯眯射| 另类图片五月| 日本人人操人人操| 97在线视频观看| 青青草啪啪网| 日本福利社| 亚洲国产精品成人综合| 999色欧美中文字幕| 日韩免费人妻色情网站| 国产成人午夜视频网址| 成人精品久久久午夜福利| 国产精品乱人伊人网| 国产福利电影| 一本色道人妻久久| 后入式999| 婷婷激情啪啪| 操逼逼中文字幕| 国产美女高潮| 欧美,日韩,中文,另类| 欧美九九爱| 亚洲乱伦图片视频| 日韩电影在线观看网址| 婷婷探花久久精品一区| 九九亚洲| 国产在线精品偷| 国产精品在线一区二区| 久九九九九九九九热| 青草青草久热| 91 亚洲 欧美 日韩 国产 综合| 91色香| 精品久久无码午夜福利| 欧美亚洲宗合色性图| 久久久久久九| 亚洲精品九九九九九九| 91精品丝袜久久久久久无码人妻| 丁香五月影院| 九九aV| 一区操逼日比视频| 精品无码一区二区三区| 精品午夜福利| 天天色综合影视网| 欧亚日本情色| 色踪合AV| 男人的天堂日韩| 10000部十八禁看电影| renqi久久久久久久久久久久| 亚洲美女AV无码| 天天综合91入口| 91性| 欧美线天码中字| 久湿久久| 久艹99| 欧美亚洲成人在线一区二区三区| 色av中文字幕| 欧亚成人在线视频| 午夜精品久久久久久久99| 一区二区三区四区久久视1| 婷婷情色综合网| 9九九九九视频在线观看| 丁香婷婷大香蕉| 你懂得91| 美女在线H91| 大香樵伊人网| 超碰国产情侣自拍网| 日韩乱码Av| 中文字幕在线观看第二页| 1区2区3区在线视频| 中文字幕在线观看AV| 熟妇最新先锋一二三区| 亚洲性猛| 成人线上超碰| 欧美精品23| 日韩无码三级影院| 亚洲激情在线| 日韩亚洲Av人人夜夜澡人人爽| 欧美色视频在线| 在线国产福利网址导航| 五月婷婷性爱| 偷窥自拍亚洲色图| 射丝袜大香蕉| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 97bbn| 欧美色图另类图片| 日韩99精品视频综合区| 国产精品亚洲免费| AV色天香在线| 91视频综合在线| 色欲久久99国产精品久久久久久| 亚洲欧美日韩免费观看| 性做久久久久久免费观看软件| 思思热在线视频精品| 日本一区二区电影网站| #NAME?| 欧美草草高清日韩视频| 成人精品久久久午夜福利| 狠狠色噜噜狠狠狠狠狠色综合久久| 一级A啪啪啪啪| 91丝袜在线观看视频在线观看| 丝袜亚洲91| 午夜福利 成人 91| 黄色大片免费在线| 日本99热| 青青草玖玖爱| 国产午夜精品理论片一二三区区| 国产剧情一区在线观看| 欧美天天综合站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 成人性爱免费播放| 99热日本| 男人的天堂在线| 99热在线播放| 亚洲欧美经典一区二区| 欧美97视频| 国产精品久久久久久久久久久久| 99九九精品| 狠狠干精品一二三四五六2022| 毛片99-全集电影手机免费观看完整-B029AV| 五十路熟女人妻一区二区在线观看 | 日日夜夜狠狠| 亚洲国内精品成人不卡| 综合久久久久久久久91| 色色婷婷丁香| 久草老司机| 欧美一级在线观看成人| 国产热RE99久久6国产精品首| 夜夜狼人妻| 天天色综合影视网| 717影院理论午夜伦八戒| 青青草字幕AV| 在线有码中文字幕| 高清不卡视频| 91青青草| 五月婷婷六月激情| 东京热,男人的天堂| 国产精品自拍xxxx| 黑丝日韩av丝袜av| 日韩福利综合一区| 青青草日逼视频| 青草一区二区| 夜夜一区二区| 久久久久亚洲| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 后入式视频国产自| 中文字幕视频2区| 欧美成人精品一区| 色婷婷五月天| 97久久超碰| 18精品一区| 日韩肏逼视频| 亚洲美女30b| 丰满美女一级毛片在线播放| 久久色一区二区| 福利天天都操| 99久久婷婷| AA丁香综合激情| 老鸭窝日丰县女人| 国产精品色片一区二区| 国产精品久久久久久久免牛肉蒲团| 欧美成人免费在线观看| av天天在线观看| 久久久中文| 999狠狠综合| 久久久人妻| 九一亚洲国产免费| 日韩成人精品| 中文一区二区| 六六久久日韩不卡| 性饥渴少妇av无码毛片| 一区二区不卡免费| 一道本东京热加勒比一区二区三区| 97国产精品| 国产精品国产自产拍高清AV| 东北丰满熟女国产一区| 国产精品禁久久久精品| 色五91| 欧美性爱日韩高清| WWW美腿丝袜香蕉中文| 日本午夜久久电影| a级免费在线观看| 日韩精品操少妇| 久久久精品视频免费观看| 91欧美www| 欧美少妇一区二区三区| 国产91精品福利在线| 色欧美在线| 桃色六月天| 国产精品视频白浆免费| 欧美不卡五十路| 无码人妻精品一区二区三区九九| 丰满人妻一区二区三区四| 国产精品 久久久精品一牛| 国产精品午夜福利| 久久久久久波多野吉衣高潮| 亚欧精品久久久久久久久久久| 无码人妻一区二区三区色欲aⅴ| 久久久少妇诱惑精品视频| 亚洲欧洲偷拍一区| 极品美女福利在线观看| 青娱乐淫乱1314| 男人亚洲91首页在线| 综合激情一一91| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 99蜜月精品久久| 私色综合网| 人妻乱仑一区二区三区| 亚洲欧洲中文日韩女优乱码| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 欲色综合| 四虎影视永久在线观看精品免费网站 | 久久精品性| 久久久99免费| 久久久999| 亚洲美女精品九九视频| 九九九不卡| 天天躁狠狠躁av| 国产熟女| 一区 欧美 日韩 麻豆| 日韩人妻操B| 成人午夜无码视频| 人妻久久久久久| 日本在线视频导航| 久久欧美性爱视频| 久草福利在线资源站| 亚洲欧美精品国产一区二区| 成人无码在线超碰网| 亚洲无线观看久久| 国产精品人妻无码久久久老鸭窝| 78精品| 91亚洲黄色网| 人妖欧美一区二区| 九九九不卡| 久久久涩| 久久系列| 国产91福利小视频在线观看| 日本色色色网站免费看不卡| 三男一女不戴套的A片| 欧美天天综合网| 大香蕉78| 国产精品直播在线观看直播| 国产亚洲日韩欧| 美国日韩黄片| 国产精品亚洲一级av第二区| 国产理论视频在线播放| 日韩少妇一区二区三区| 色牛牛AV| 欧美嗯啊……在线观看视频免费| 岛国AV一区二区电影| 综合久草| 99精品久久久久久| 另类图片五月天| 日韩综合97p| 天天久久| 国产精品自拍xxxx| 日韩成人免费电影| 嗯啊不要啊啊在线观看视频| 男人天堂网手机版婷婷| 久久精品无码专区| 欧美日韩大香蕉| 国产精品视频麻豆入口| 婷婷五月天影院| 97爱爱爱综合| 人人爱操| 久久婷综合| 东京热激情视频一二三区| 欧美性后入| 精品视频久久区| 妇女一区二区三区| 色操逼网| 视频二区美腿丝袜制服人妻欧美 | 亚洲无限观看| 欧美一二三| 久久久久免费看少妇A片特黄| 国产真实野战在线视频| 天天干天天操天天拍| 久久久99999久网站| 久久爱97| 国产欧美岛国精品一区| 偷拍欧美综合| 日韩BBN| 强奸抽插av| 激情五月天社区| 97se综合网| 国产精品夜夜夜| 大香蕉乱级| 91色婷婷综合久久中文字幕二区| 熟妇艹鸡八| 999热日韩精品| 免费日韩黄片| 狼人综合婷婷激情四射| 日日躁狠狠躁天天躁精品| 中文字幕美女91| 99热超碰在线| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 草久久久| 97综合| 五月丁香狠狠爱| 97伪v| 黑人娇小av在线播放| 久草免费在线一区二区| 欧美 牲| 凹凸视频在线一区二区| 老司机福利社视频在线观看| 久久精品欧美一区二区三区不卡| 狠狠操天天干| 一本大道青青| 九九综合久久| 亚洲精品黑丝| 人妻人人做人人澡人人爽欧美一区| 亚洲欧美校园另类春色| 日韩精品人妻一区二区| 亚洲色综合| 97超级色碰碰| 欧亚乱色熟女一区二区| 国产精品不卡一区二区三区| 人人操我人人干| 丝袜制服字幕在线| 狠狠久久手机视频精品| 99re9在线| 97手机日韩| 人妻少妇久久久| 青青草一区二区高清无码视频| 亚洲色图亚洲无码强奸乱伦| 人妻无码一区二区三区久久99| 手机在线中文字幕国产| 日韩视频小说在线观看| www成人啪啪18秘 免费| 疯操AV| 福利在线黄片| 96久久久久| 混色激情av| 2021国产成人精品久久| 亚洲男人的天堂V| 国产极品粉嫩馒头一线天av| 最新精品久久蜜桃 | 国产h小视频在线观看免费| 五月婷婷六月丁香| 国产午夜在线观看| 日韩精品99久久久久久中文字幕 | 99热自拍| 丁香五六月啪啪| 亚洲色图国产另类| 91 亚洲 欧美 日韩 国产 综合| 亚洲第一男人天堂| 爱爱60秒免费视频| 色色色色日本| 校园春色AV天堂| 岛国AV一区二区电影| 久久欲| 97超色| 盗摄 精品 另类 一区| 日韩性爱长视频免费| 成人熟女区| 亚洲各类熟们中文字幕| 男人午夜天堂| 日韩综合97P| 天天爽夜夜操| 国产av强奸美女| 久久婷婷一区| 国产地址二三| 九九久久精品| 成人性爱AV在线免费观看| 五月天欧美色图| 欧美天天插| 91c色| 中文字幕蜜乳av| 无码人妻系列少妇| 高清不卡视频| 91色婷婷综合久久中文字幕二区| 国产乱伦性爱区| 欧姜老司机| 国产美女口爆吞精| 极品色社| 亚洲经典啪啪| 懂色天天爱天天日天天射天天澡| 欧美超碰在线| 亚洲影视高清三级-草1024榴社区入口-品爱AV | 九九自拍伦理| 欧美日韩国产传媒在线精品| 亚卅熟女乱色| 3d成人精品一区二区| 夜色91| 9 1超碰九色| 久久久久久久久久黄色网| 少妇超碰在线| 日本一级黄色电影| 久久久久亚洲Aⅴ无码| 久久久久久国产成人| 综合 亚洲 欧美| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 人妻在线中出视频| 少妇二级| 日本在线一二| 九九久久精品| 欧美黄色片AAAAA| 欧美日韩操逼动图| 99久久婷婷丁香| 日韩综合成人免费视频| 国产Av超碰| 日本精品一级二级三级| 精品人妻一二三| 欧美高清色| 熟女熟妇一区二区三四区 | 久久9视频| 欧美精品久久久久久久久88| 国产欧美一级在线观看| 插穴性爱视频在线观看| 日本激情免费大片| 亚洲图片欧洲图片aⅴ| 久久国产热视频97电影| 欧美成人性爱视频免费观看| 无码 有码 国产18p| 日本视频在线观看污污污| av绯色| 欧美强奸乱能| 激情五月天丁香社区| 91精品久久久久久77777| JULIA一区二区三区在线播放| 亚洲第一成人影院色播| 九九久久99| 久久性爱视频| 日韩av三四区| 天堂伊人久久| 啊啊啊啊啊啊啊网址在线观看| 性交一区二区在线播放| 久久久少妇诱惑精品视频| 欧美人妻一区二区| 91亚洲人| 成人一道本免费视频| 日韩操逼HD| www成人啪啪18秘 免费| 亚洲欧美精品91| 清纯唯美激情四射| 欧美 综合 亚洲| 久操免费视频| 1000部熟女视频在线观看| 午夜福利av电影在线| 亚洲欧美日韩夜夜| 美女啊啊啊啊pc| 一区二区视频你懂的| 夜夜嗨TV| 日韩av在线精品观看| 国产乱伦亚洲| 激情五月天色色| 国产性刺激| 超碰 国产熟女精品一区| 91色婷婷综合久久中文字幕二区| 日本在线观看网址| 亚洲精品a人片在线观看视| 嗯嗯啊啊视频在线看| 大香网伊人久久综合网eew| 91美女高潮| 欧美乱伦专区| www…国产操逼| 激情四射婷婷四五月天| 午夜精品人妻二区三区| 亚洲色图欧美一区二区不卡| 懂色AV蜜臀无码精品APP| 91久久国产综合久久| 91黑丝操| a片 xxxx受爽视频| 天天操天天舔| 中 文字幕一区二区三四 五 区日 日 骚 | 另类欧美色| 中文字幕91页| AV一二区| 色噜噜狠狠色综无码久久合欧美| 国产操逼逼网| 久久中文色图| 青春草莓视频在线观看网址| 国产无套粉嫩白浆在| 国产成自自拍在线观看| 国产精品熟女一区二区三区| 国产乱伦一二三区| 亚州高清色综合| 大香蕉一级黄色片久久| 激情综合五月婷婷| 少妇特黄一区二区三区| 国产精品久久久久久照片| 大香蕉操久久| 精品人妻一区二区免费看| 亚洲av综合色区无码一| 乱欲性色| 人妻加勒比东京热| 亚洲 se图 欧美电影| 躁躁躁日日躁2020| www.色99| 强乱老妇中文字幕| 97aiaiai| 久久麻豆一区二区| 超碰97伊人| 久久精品国产免费观看99| 欧美乱妇狂野欧美在线视频| 麻豆国产视频精品观看| 久久不卡一区二区| 亚洲色图欧美一区二区不卡| 91亚州日韩高清| 欧美精品一二三| 志村玲子视频一区二区| 变态综合色| 婷婷五月天av| 国产激情视频一区区三区| 久久人人妻| 人人爱人人乐人人操| 日韩欧美亚洲国产日韩| 人妻少妇久久中文字幕一区二区 麻豆 | 91在线视频国产网站| 国产成人资源| 视频一区二区免费在线| 亚洲欧美日韩有码| 吖在线不卡一区二区国产剧情| 啊啊啊啊在线观看网址| 国产最新小视频在线播放下载| 亚洲精品国产av天美传媒| 国产 日韩 欧美高清 | 日韩欧美国产高清视频| 午夜福利 成人 91| 日韩免费人妻色情网站| 综合av社区| 九九热精彩视频| 日本在线播放不卡一区| 天天爱天天操| 日少妇亚洲版| 日日操丁香五月天| 清纯唯美激情| 亚洲永久永久永久永久一级一级一级精品| 岛国视频一二三区| 国产9熟妇视频网站| 神马福利久草| 日韩操逼HD| 日本一二三免费久久| 男人的天堂2018东京热啪啪啪| 中国操逼无码| 久久精品综合| 亚洲 中文 女同| 亚洲精品第一| 97综合久久| 国产久久男人天堂| 懂色AV一区二区三区| www.伪伪| 欧美亚洲手机在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 黄色工厂这里只有精品| 天色综合网| 在线无码操| 狠狠爱大香蕉| 最新中文字幕av| 日本人妻A片成人免费看片| 97亚洲精品| 大香蕉宅男伊人| 男人天堂导航| 综合网欧美在线| 国产二区三区粉嫩在线| 亚洲av淫乱| 91精品人| 清纯唯美亚洲另类| 素颜老阿姨乱情色| 久久免费中文字幕在线观看| 91爆操视频| 人人人干干人人干| 四虎精品永久在线观看| 69精品人人人人| 五月天婷婷色| 一区三区啪啪| 岛国黄| a片在线播放| 亚州欧美在线| 99热大香蕉伊在线| 国产熟妇一区二区| 超碰在线974| 91亚·色| 综合日本女人伊人| 激情综合五| 欧美在线色| 校园春色欧美色图| 超碰97起碰| 99碰碰| 久久亚洲精品成人av| 韩国一级婬片A片无码天美| 加勒比综合| 久久岛国| 天天爱天天操| 花花AV导航| 亚洲综合在线91| 久久精品国产97欧美精品亚洲 | 一本色道久久综合亚洲二区三区| 欧美精品久久| 青青三级视频| 尤物视频网 刘玥| 91亚洲丝袜| AV男人天堂网| 97超碰国产亚洲精品| 在线五区| www.人人摸在线视频| 噜噜噜亚洲精| 亚洲图片小说欧洲| 亚洲a色| 青草一区二区| 97视频在线| 香伊人在线| 国产一区二区三区久久久精品| 在线观看成人性爱免费小视频| 啪啪视频亚洲第一| 国产精品蜜乳AV| 午夜一区| 91女网站| 激情四射五月天| 久久影视二区三区行押| 亚州,欧美在线| 中文字幕在线免费观看| 草草电影院| 成年人三级黄色片视频| 久久久久成人亚洲国产| 67194国产| 富二代亚洲精品99| 啊操爽品善一区二区三区| 亚洲综合大片| 欧美97色| 精品国产无码中文| 熟女突然公开看18禁影片 | 在线播放成人高清免费视频 | 91N综合网在线| 日韩欧美天堂| 友优传媒精品在线一区二区| 91处女在线观看| 久久受www免费人成| 久操视频资源站公开| 久热伊人| 久久久久9999妇女| 3级毛片一二| 天天做天天爱| 青青草日本中文字幕| 久操视频在线| 欧州一区二区三区四区| 久久久久久精品免费看A级| 天天流夜夜操| 九9热伊人| 国产精品片| 日韩欧美中文| 北条麻妃99精品青青久久| 制服诱惑亚洲一区二区三区在线观看| 九九九久久久W精品| 天天干天天舔| 色婷婷色99国产综合精品| 99www.bibizy香蕉资源国产一区二区三区高清| 久久久精| 国产无码高清操逼视频| 久久人妻精品| 国产精品国产| 欧美大波激情xxxx| 伊人AAA| 久久久免费懂色| 欧美成人免费在线观看| 色丁香五月婷婷| 老女人碰碰在线碰碰视频| 少妇一区二区三区| 欧美性爱在线无码| 国产熟女二区| 人人模人人看| 草草影院在线视频| av橘色网站| 中国国产精品一区视频| 蜜臀AV成人精品蜜臀AV久久| 久9精品| 人成午夜免费大片| 日日做夜狠狠爱欧美黑人| 天天日天天操天天射河南省| 五月激情啪啪| 伊人性在线视频| 东亚亚洲无码高清| #NAME?| 自怕偷自怕亚洲精品| 射丝袜高跟鞋99| 极品色| 丰满人妻一区二区三区| 亚洲天堂一二| 久久精品美女一区| 色香91| 国模不卡| 欧美91久久久久| 伦伦成年午夜免费视频| 青青国产在线拍揄自揄拍| 亚洲**2021在线观看| 日韩国产品视频中文字| 激情小说亚洲色图| 欧美制服另类丝袜| 日本精品一区二区三区四区的功能| 国内外色色色色色成人视频| 暴力av在线| 婷婷色色网| 中国熟妇| 九色97| 思思久热在线精品66| 97视频网站在线观看| 97超碰色色| 91久精品| 色色五月婷婷| 在线啊啊啊啊| 黄色大片视频在线免费看| 岛国激情视频在线观看| 亚洲91亚洲| 无码高清操逼网址| 在线一区| 欧美日韩操逼嗦吊| 综合欧美色图| 国产亚洲 中文欧美久久| 色婷婷国产精品一区在线观看| 亚洲情色婷婷五月天| 一级黄色性爱裸体视频| 99热精品国产| 免费中文在线| 丰满人妻一区二区三区四区| 啊啊啊 在线观看| 欧美日韩啪啪电影| 激情小说亚洲视频| 大香蕉啪啪网| 国产男女边吃边摸视频网站| 欧美综合网1| 亚洲天堂久久| 97色伦97色伦国产欧美| 亚洲伊人久久精品影院| 中文字幕在线免费观看视频| 久久免费少妇| 欧美论理片| 日本三级中国三级99人妇网站| 成人线上超碰| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | s片在线观看| 五月丁香狠狠爱| 亚洲av综合伊人久久| 九九热午夜欧亚国产视频| 久久婷婷五月天| 91丨九色丨国产丨人妻在线 | 日韩av一级黄片| 91精品人妻一区二区三区蜜桃| 欧美狠狠鲁| 90后性网国产欧美| 夜夜草我| 清纯唯美综合| 日韩美女,国产传媒,视频一区| 91狠狠综合久久| 免费少妇一区二区| 久热这里只有精品9| 久久綜合很很很| 五月天色五月| 特级毛片特黄久久免费看| 校园春色五月天| 亚洲天堂资源| 国产60区。| 熟妇在线视频一区二区| 日韩乱中文| 日韩一级欧美一级国产一级台湾| 欧美专区17页| 国产天美传媒精品| 人人妻人人操人人乐| 影音先锋国产精品| 18禁免费视频| 国产精品懂色tv影视免费观看| 噜噜噜亚洲精| 后入式视频国产自| 久久综合精品一区二区三区| 91精品久久综合熟女| 一级片在线观看高清无码| 无码国产精品96久久久久孕妇| 色香网| 久久宗合亚洲| 午夜福利区| 中文字幕av久久爽Av| 国产av尤物| 久久HD| 黄aaaaaaaaaaaaaaaaaa色网站| 福利社区午夜一区二区| 高清国产无码av| 久久精品一区二区三区四区五区| 国产美女91| chaopen97久久| 91女优在线观看 | 国产成人久久久精品免费AV| 亚洲欧洲日韩国产自在线| 日本成人A片网站| 国产精品黑人一区二区三区| 97精品| 92久久| 九九热三级片| 精品1区2区3区| 蜜臀99久久国产| 伊香蕉综合久久久久久久噜噜噜 | 五月丁香婷婷综合| av九九| 久热91| 五月天综合| 日韩久久三区| 另类综合另类| 亚洲中文字幕有码视频一区二区三区| 思思热在线视频在线| 天天综合-91入口| 中文字幕后石码三区四区| 极品另类| 国产高清吃奶免费视频网站| 国产黄色小视频网站| 午夜操逼不卡| 久久精品店| 国产精品一区二区黄片| 9久热| 97九色人妻| 亚洲丝袜B诱惑| 熟女高潮合集-永久久久-成人AV| 精品国产国产AV| 免看60秒涩涩视频| 啊啊啊好大好深| 狠狠爱综合网| 樱花蜜乳av| 唐山老熟妇露脸啪啪叫| 色婷视频| 成人精品电影| 色综合久久夜色精品国产天堂| 丝袜狂射91| 九热久| 少妇高潮流水av免费| 亚洲黄色a级片| 亚洲激情AV| 大香蕉伊人一区在线观看| 神马久久久久久久久久| 久久是精品| 亚州综合色| 变态乱伦伪娘灌肠一区二区| 免费看日产一区二区三区| 丰满人妻一区二区三区免费,| 人人澡综合涩| 久久久久女教师免费一区| 插入逼91| 97在线视频观看网站| 亚洲无码AV九九九| 久久久草成人网站久久久草成人久久久草久久久 | 久久香蕉国产传媒一区剧情天美| 好好的日:com久久九九| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 任我爽视频在线观看| A一级色女| 亚洲高清自拍| 最新日产中文在线麻豆| 色穴精品| 亚洲丝袜二区在线| 在线观看亚洲成人精品| 大香蕉人妻| 蜜桃视频一区二区三区| 亚洲91色| 一级啊性爱在线视频| 人妻精品综合中文字幕在线 | 好屌色综合| 亚洲天堂精品日韩电影| 亚洲中文一区二区三区视频| 久久夜嗨| 亲子敌伦对白在线播放| 丁香婷婷九月| 亚洲熟久久| 国产精品白丝在线播放| 大香交伊人网| 精品女同一区| 一区二区三区成人高清视频| 91 亚洲 欧洲| 夜夜夜爽www精品视频| 国产中文精品一区二区在线观看| 人人操天天爽| 一区二区三| 丁香久久| 中文字幕一区二区三区四五区| 欧美性爱中文字幕无线码| 怡红院怡春院| 热99这里有精品综合久久| 国产三级中文有码在线视频| 久久欧洲| 天天视频网站黄| 欧美日韩国第一区| 国产后入| 性欧美另类高清| 亚洲一区二区三区婷婷| 欧美日韩91| 日本一二三免费久久| 最新日韩黄片| 精品久久久久成人码免| 探花一区在线| 综合性视频99| 天堂中文资源在线bt| 97超碰免费生活| 国产精品久久久久久无码红治院| 东北女人被操| 最新日日夜夜天天干干| 美女91在线观看| 欧美性爱无码一区二区三区| 亚洲男人的天堂AV| 日本欧美一区二区三区视频麻豆| 中日韩久久人妻一区二区| 强奸乱伦AV一天堂网| 亚洲少妇诱惑| 国产在线激情视频| 久久久久网站-538在线视频-欧美永久乱码| 久久丁香久草综合网| 91麻豆天美国产| 久久黄色视频一区二区三区| 国产精品熟妇一区二区三| 日韩欧美aⅴ综合网站发布| 亚洲天堂日本| 国产精品无码在线| 亚洲图片 欧美电影| 九月丁香婷婷| 亚洲中文字幕熟女| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 亚洲熟妇一,二,三期| 国产农村妇女精品1区二区| 最新av网站在线观看| 91超碰碰在线| 伊人婷婷五月天| 欧美国产精品久久九九| 中国黑人三级片网站上区| 老司机老司机午夜影院| 日日摸日日弄日日拍| 亚洲一区二区三区久久 亚洲一区二区| 欧美18老人禁| 91亚洲丝袜| 啊啊啊啊嗯嗯嗯用力好爽| 天天射天天操天天干天天吃2018 | 久久91| 60秒免费小视频| 欧美色综合影院| 国产强奸乱伦第1页| 老司机免费视频在线91| 久久精品性| 青青青青青手机视频| AV女优男人的天堂| 天天摸夜夜摸| 免费看A片毛毛片在线播| 欧美九九九| 欧美精品久久96人妻无码| 全球成人中文在线| 日日爱99| 伊人精品国产| 超碰97起碰| www.av在线视频| 91亚洲电影| 97网址97| 久久久久久久久久久久久久久性生活视频| 在线中文字幕| 久久线上视频免费看| 九九夜精品九九在线| 啊视频在线| 午夜福利无毒不卡| 欲色综合| 超碰午夜| 欧美亚洲丝袜美女电影| 青娱乐日韩无码| 国产黄色在线播放观看| 蜜臀99久久国产| 啊啊啊久久久视频| 人人操天天爽| 丁香五月性爱| 国产精品一级毛片不卡视| 亚洲天天在线| 91 偷| 91久久久久久久| 蜜伊人色综合97| 色99视频| 国产精品久久伊人| 亚洲小电影免费涩涩成人在线高清 | 麻豆天天躁天天揉揉AV| 亚洲色91C| 91在线免费观看处女| 天天干,夜夜爽| 天堂8在线新版官网| 青草草免费网站av| 男女啪啪网站免费视频| 78m成人视线| 中文字幕av一区二区三区人妻少妇| 超碰综合色| 综合干干干av久久久综合网| 欧美亚洲综合色| av大香蕉| 色色色99| 久久老子无码午夜伦不卡| 久久毛卡| 精品亚洲国产成人精品| 大香蕉www.超碰| 久久久久久久久久va| 久久97| 国产一区二区二区按摩精品啪视频| 91美女片在线| 狠狠入| 91bbbbbb| 九久精品| 一区二区高清视频| 亚洲欧美高清| 97在线视频观看| 成人精品无码| 天天射天天操天天干天天吃2018| 熟妇乱伦一区二区| 日产操逼| 日韩欧洲操屄视频| 免费观看性欧美一级| 精品成人无码| 久久黄色性爱视频| 国内毛片婷婷六月色| 欧美日韩性爱无码| 免费操逼视频下载| 久操精品网| 国产精品麻豆成人AV艾秋| 日本福利社| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 久久深夜无码| 亚洲 另类 丝袜 自拍 动漫| 久久99深爱久久99精品| 国内成人圈中文字幕无码视频|