You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter VLC Player返回页面后应用崩溃问题求助

Flutter VLC Player 返回页面后崩溃问题解决

问题现象

集成Flutter VLC Player后,从播放页面返回时应用直接崩溃,使用pub.dev官方示例代码测试仍出现相同问题,报错信息如下:

D/apitrace(22547): apitrace: warning: caught signal 6
D/apitrace(22547): call flush from exceptionCallback
F/libc (22547): Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 23200
(AWindowHandler), pid 22547 (.webyte.vidflix)


Build fingerprint: 'OPPO/CPH2015/OP4C7D:9/PPR1.180610.011/1640680627:user/release-keys'
Revision: '0'
ABI: 'arm64'
pid: 22547, tid: 23200, name: AWindowHandler >>> com.webyte.vidflix <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'java_vm_ext.cc:542] JNI DETECTED ERROR IN APPLICATION: JNI GetJavaVM called with pending exception java.lang.RuntimeException: Error during detachFromGLContext (see logcat for details)'

当前使用的核心代码:

@override
void initState() {
  super.initState();

  _videoPlayerController = VlcPlayerController.network(
    'https://media.w3.org/2010/05/sintel/trailer.mp4',
    hwAcc: HwAcc.full,
    autoPlay: true,
    options: VlcPlayerOptions(),
  )..initialize();
}

@override
void dispose() async {
  super.dispose();
  await _videoPlayerController!.stopRendererScanning();
  await _videoPlayerController!.dispose();
}

解决方法

  • 调整dispose执行顺序:将super.dispose()移到控制器资源释放之后,避免父组件释放后VLC控制器的JNI调用失去上下文:
    @override
    void dispose() async {
      await _videoPlayerController!.stopRendererScanning();
      await _videoPlayerController!.dispose();
      super.dispose();
    }
    
  • 降低硬件加速级别:部分设备对HwAcc.full支持不佳,改为HwAcc.auto或HwAcc.disable尝试:
    _videoPlayerController = VlcPlayerController.network(
      'https://media.w3.org/2010/05/sintel/trailer.mp4',
      hwAcc: HwAcc.auto,
      autoPlay: true,
      options: VlcPlayerOptions(),
    )..initialize();
    
  • 添加状态校验:在释放前检查控制器是否已初始化,避免无效状态下的JNI调用:
    @override
    void dispose() async {
      if (_videoPlayerController != null && _videoPlayerController!.value.isInitialized) {
        await _videoPlayerController!.stopRendererScanning();
        await _videoPlayerController!.dispose();
      }
      super.dispose();
    }
    

内容的提问来源于stack exchange,提问作者Sheikh Rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:43