Flutter仿TikTok分页后视频加载失败:ExoPlayer播放异常
先排查视频资源本身
分页加载的视频大概率是资源环节出了问题:要么是网络请求中断导致资源损坏,要么是数据库存储的路径/URL失效。先把分页返回的视频地址打印出来,手动验证是否能正常播放。另外就算格式显示支持,部分视频可能使用了非标准编码参数(比如特殊的H.264 profile),照样会导致MediaCodec解码失败,要核对新加载视频的编码信息和初始正常视频是否一致。检查Player的复用与释放逻辑
垂直滑动短视频通常会复用Player或播放View,分页后容易出现旧Player未彻底释放的情况。滑出屏幕的视频,必须调用player.release();新视频加载前,要么重置Player状态,要么重新初始化实例。如果用的是RecyclerView,ViewHolder绑定新数据时,先让Player执行stop()和clearMediaItems(),再设置新的媒体资源,避免旧播放任务干扰新视频加载。解决MediaCodec资源耗尽问题
加载大量视频后,系统分配的MediaCodec实例可能被耗尽(系统对该资源有数量限制)。可以给ExoPlayer的DefaultRenderersFactory开启解码器降级开关,让Player自动切换到兼容的解码器:val renderersFactory = DefaultRenderersFactory(context) .setEnableDecoderFallback(true) val player = ExoPlayer.Builder(context, renderersFactory).build()避免在UI线程处理视频加载逻辑
分页加载时如果在UI线程执行视频初始化、资源加载操作,很容易导致MediaCodec初始化延迟或异常。把这些操作放到子线程中,仅将播放状态回调到UI线程即可。升级ExoPlayer版本
部分旧版本ExoPlayer存在批量加载视频时Codec资源泄漏的bug,检查当前使用的版本,直接升级到最新稳定版,多数已知的播放异常问题都能得到修复。
内容的提问来源于stack exchange,提问作者user22433389

