You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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而无法操作。

求助问题

  1. 有没有办法强制Flutter的video_player插件使用特定旧版本的androidx.media3,以此规避这种Surface重分配循环的问题?
  2. 有没有开发者遇到过类似的、ExoPlayer硬件解码器在特定Android设备上卡顿/失效的场景?
  3. 是否可以通过给VideoPlayerController传递客户端配置或能力标志,绕过当前的硬件解码问题?
  4. 该问题是否与Flutter 3.27版本在Android平台的Texture渲染逻辑有关?

希望能得到无需重构整个视频播放架构的解决方案,感谢各位的帮助!

火山引擎 最新活动