首页 > 解决方案 > 在颤动延迟后,如何使用 Chewie 控制器播放视频?

问题描述

class _MyAppState extends State<MyApp> {
  final ImagePicker _picker = ImagePicker();
  ChewieController? chewieController;
  _pickvideo() async{
    Future.delayed(Duration(milliseconds: 100), () {
      _playVideo();
    });
  }

    _playVideo(){
  VideoPlayerController _videoPlay = VideoPlayerController.asset(
      "assets/videoplayback.mp4");

  chewieController = ChewieController(videoPlayerController: _videoPlay,
      autoInitialize: true,
      aspectRatio: 16 / 9,
      errorBuilder: (context, errorMessage) {
        return Center(
          child: Text("Error"),
        );
      });
}


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(children: [

          RaisedButton(
            onPressed: ()  {
              setState(()async {
                 await _pickvideo();
              });

            },
            child: Text("Play After button Pressed"),
          ),
          (chewieController!=null)?Expanded(child: Chewie(controller: chewieController!)):Text("Error Message"),
        ]),
      ),
    );
  }

如果我使用延迟并调用 _playVideo() 函数,则视频播放器无法正常工作,但如果我没有延迟调用,它就可以正常工作。如何让视频播放器在延迟后播放。

但实际上,我需要从存储中挑选一个视频文件并使用咀嚼控制器播放它。但是图像选择器有一个 await 关键字。与延迟相同的错误正在发生。

终端出现错误

I/ExoPlayerImpl( 2722): Release 8b63f91 [ExoPlayerLib/2.14.1] [generic_x86_arm, sdk_gphone_x86_arm, Google, 30] [goog.exo.core]
D/CCodecBuffers( 2722): [c2.android.aac.decoder#470:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
D/CCodecBuffers( 2722): [c2.android.aac.decoder#470:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 1
D/CCodecBuffers( 2722): [c2.android.aac.decoder#470:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 2
D/CCodecBuffers( 2722): [c2.android.aac.decoder#470:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 3
I/CCodecConfig( 2722): query failed after returning 19 values (BAD_INDEX)
D/CCodecConfig( 2722): c2 config diff is   c2::i32 coding.drc.compression-mode.value = 3

标签: flutterdartvideo-player

解决方案


尝试将延迟时间增加到 800 毫秒

  Future.delayed(Duration(milliseconds: 800), () {
      _playVideo();
    });
  }

推荐阅读