【问题标题】:flutter can not play more than 3 video in video player颤振无法在视频播放器中播放超过 3 个视频
【发布时间】:2019-11-24 16:10:01
【问题描述】:

我创建了一个播放视频的小部件,并在控制器中放置了视频文件和视频网络,但是当播放 3 个视频时出现此错误

Playback error.
E/ExoPlayerImplInternal(24720): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal(24720):     at    com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.jav  a:441)
 E/ExoPlayerImplInternal(24720):    at    com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal(24720):     at android.os.Handler.dispatchMessage(Handler.java:98)
E/ExoPlayerImplInternal(24720):     at android.os.Looper.loop(Looper.java:154)
E/ExoPlayerImplInternal(24720):     at android.os.HandlerThread.run(HandlerThread.java:61)
E/ExoPlayerImplInternal(24720): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, video/avc, -1, null, [1280, 720, -1.0], [-1, -1])
E/ExoPlayerImplInternal(24720):     ... 9 more
E/ExoPlayerImplInternal(24720): Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77
E/ExoPlayerImplInternal(24720):     at android.media.MediaCodec.native_configure(Native Method)
E/ExoPlayerImplInternal(24720):     at android.media.MediaCodec.configure(MediaCodec.java:1884)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:450)
E/ExoPlayerImplInternal(24720):     at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:418)
E/ExoPlayerImplInternal(24720):     ... 8 more

这是我在其他页面中使用的小部件

ChewieDemoState(this.url);
VideoPlayerController _controller;

@override
void initState() {
super.initState();
final path =Provider.of<DiractoryPath>(context,listen:false).diractory;

_controller = new File("$path/${url.split('/').last.replaceAll("%20", "_")}").existsSync()?
VideoPlayerController.file(new File("$path/${url.split('/').last.replaceAll("%20", "_")}")):
VideoPlayerController.network(url);

}
@override
void dispose() {
_controller.dispose();
super.dispose();

  }
  @override
 Widget build(BuildContext context) {
 return  new Center(
            child: new Chewie(
              _controller,
              aspectRatio: 3 / 2,
              autoPlay: true,
              looping: true,

              // Try playing around with some of these other options:

              // showControls: false,
               materialProgressColors: new ChewieProgressColors(
                 playedColor: Colors.blue,

                 handleColor: Colors.blue,
                 backgroundColor: Color(0xFF282828),
                 bufferedColor: Colors.lightGreen,
               ),
               placeholder: new Container(
                 color:  Color(0xFF282828),
               ),
              // autoInitialize: true,
            ),
          );
  }
}

如何解决这个错误我在三个视频尝试后得到这个错误我给它视频文件和视频网络我正确使用 dispose 方法是什么? 播放了三个视频,但我使用的多半是咀嚼包

【问题讨论】:

  • 手机等小型设备无法同时播放多个视频。解码视频会占用已耗尽的硬件资源。
  • 如何修复它我需要代码
  • 无法修复,无代码
  • @mohammadshabani 你的问题解决了吗?我有同样的错误,我找不到解决方案。提前致谢。

标签: android video flutter dart


【解决方案1】:

有点晚了,但这里是解决方案。我扯了很多头发终于得出结论。

“pub.dev”中的“video_player”库没有像我们预期的那样管理资源。

如果您在不处理控制器本身的情况下初始化一个新视频,它会分配新资源,如果您继续初始化超过 3 个视频,则手机的平台特定播放器在这种情况下“exoplayer2”无法注销正确的错误消息

确保每次播放不同的视频时都会释放控制器并创建一个新控制器。

编辑:

Future<void> playVideo() async{
    VideoPlayerController _old = videoPlayerController;
    if(mounted)
      setState(() {
        videoPlayerController = null;
      });
    videoPlayerController = VideoPlayerController.file(widget.videoFiles[itemIndex]);
    await videoPlayerController.initialize();
    if(mounted)
      setState(() {duration = videoPlayerController.value.duration;});
    await videoPlayerController.play();
    Future.delayed(Duration(seconds: 1),(){
      _old?.dispose();
    });
  }

【讨论】:

  • 如果它被释放并创建了新的,它会抛出这个错误 -> 未处理的异常:A VideoPlayerController 在被释放后被使用。
  • 这个问题的任何解决方案,我都一样。 forums.plex.tv/t/…
【解决方案2】:

使用低于框架的宽度和高度。 宽度 1280 & 高度 720 我已经在 Flutter 开发中正确使用了这帧视频和显示。

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2021-04-03
    • 2020-06-13
    • 1970-01-01
    • 2019-12-10
    • 2014-05-01
    • 2020-03-02
    • 2022-07-22
    相关资源
    最近更新 更多