Flutter升级SDK及Android compileSdk至36后,特定Redmi设备上video_player播放视频卡顿或无法播放的问题求助
Flutter升级SDK及Android compileSdk至36后,特定Redmi设备上video_player播放视频卡顿或无法播放的问题求助
问题背景
我正在开发一款类似WhatsApp的Flutter聊天应用,核心功能包含视频流展示模块。近期在完成两项更新后——将Flutter SDK升级至最新稳定版、Android compileSdk从35升级到36——发现某款Redmi设备上的视频播放完全失效或出现严重卡顿,但在iOS、三星等绝大多数测试设备上,视频播放依然正常。
环境配置
- Flutter SDK:最新稳定版本
- 依赖包:
video_player: ^2.11.1(基于VideoPlayerController.networkUrl实现核心播放逻辑) - Android编译配置:compileSdk 36(因项目依赖的Firestore/core类插件明确要求,无法回退到35)
- 实现逻辑:将
VideoPlayerController实例存入列表,在ListView/Column组件中批量构建VideoPlayer播放组件
问题详情与日志
升级前,同一视频在该Redmi设备上播放完全正常;但升级后,初始化VideoPlayerController时视频往往无法正常渲染,Logcat中持续输出解码器、BufferQueueProducer循环相关错误,偶尔还会抛出java.lang.IllegalArgumentException: start failed异常。
以下是该设备上的关键Logcat日志片段:
W/AudioCapabilities(26151): Unsupported mime audio/x-adpcm-ms W/AudioCapabilities(26151): Unsupported mime audio/x-adp /OMXClient(26151): IOmx service obtained D/SurfaceUtils(26151): connecting to surface 0x785f6d4010, reason connectToSurface D/Surface (26151): Surface::connect(this=0x785f6d4000,api=3) I/BufferQueueProducer(26151): [ImageReader-1x1f22m7-26151-3](this:0x7801d2b800,id:3,api:3,p:26151,c:26151) connect(P): api=3 producer=(26151:com.my.app) producerControlledByApp=true I/MediaCodec(26151): [OMX.MTK.VIDEO.DECODER.AVC] setting surface generation to 26778628 D/SurfaceUtils(26151): disconnecting from surface 0x785f6d4010, reason connectToSurface(reconnect) D/Surface (26151): Surface::disconnect(this=0x785f6d4000,api=3) I/BufferQueueProducer(26151): [ImageReader-1x1f22m7-26151-3](this:0x7801d2b800,id:3,api:3,p:26151,c:26151) disconnect(P): api 3 D/SurfaceUtils(26151): connecting to surface 0x785f6d4010, reason connectToSurface(reconnect) D/Surface (26151): Surface::connect(this=0x785f6d4000,api=3)
我的初步猜想
由于video_player_android插件底层依赖androidx.media3(即ExoPlayer),我推测升级compileSdk到36后,Gradle自动拉取了更高版本的Media3/ExoPlayer库,结合Flutter Android嵌入层的Surface创建逻辑,导致该特定设备出现间歇性硬件解码器缓冲区分配失败的问题。
我曾尝试将compileSdk降级回35,但因其他依赖插件明确要求compileSdk 36而无法操作。
求助问题
- 有没有办法强制Flutter的
video_player插件使用特定旧版本的androidx.media3,以此规避这种Surface重分配循环的问题? - 有没有开发者遇到过类似的、ExoPlayer硬件解码器在特定Android设备上卡顿/失效的场景?
- 是否可以通过给
VideoPlayerController传递客户端配置或能力标志,绕过当前的硬件解码问题? - 该问题是否与Flutter 3.27版本在Android平台的Texture渲染逻辑有关?
希望能得到无需重构整个视频播放架构的解决方案,感谢各位的帮助!




