我尝试使用video_player 和chewie 来显示视频,但是当用户已经观看了视频时,用户必须发送该视频的反馈。问题是当用户发送他们的反馈并且他们想观看其他视频时,视频没有显示,我收到如下错误:
未处理的异常: PlatformException(VideoError, Video player has error com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.VIDEO.DECODER.AVC, Format (1, null, null, video/avc, null, -1, null, [1920, 976, -1.0], [-1, -1]), null)
但是当我关闭应用程序并再次打开它时,问题就消失了,但如果用户再次发送反馈,问题就会发生。
这是应用程序中问题的图片。
[ the problem ]
这张图片是当用户还没有发送反馈时视频的显示方式。
[ the video ]
这是我显示视频的代码
class ChewieListItem extends StatefulWidget{
final VideoPlayerController videoPlayerController;
final bool looping;
ChewieListItem({
@required this.videoPlayerController,
this.looping,
Key key,
}) : super(key: key);
@override
_ChewieListItemState createState() => _ChewieListItemState();
}
class _ChewieListItemState extends State<ChewieListItem>{
ChewieController _chewieController;
@override
void initState(){
super.initState();
_chewieController = ChewieController(
videoPlayerController: widget.videoPlayerController,
aspectRatio: 3/1.5 ,
autoInitialize: true,
looping: widget.looping,
autoPlay: false,
errorBuilder: (context, errorMessage){
return Center(
child: Text(errorMessage,
style: TextStyle(color: Colors.white),
),
);
}
);
}
@override
Widget build(BuildContext context){
return Padding(
padding: const EdgeInsets.all(2.0),
child: Chewie(
controller: _chewieController,
),
);
}
@override
void dispose(){
super.dispose();
widget.videoPlayerController.dispose();
_chewieController.dispose();
}
}
感谢您的回答和建议。
最佳答案
当电话设备使用许多视频解码器实例时,可能会发生此错误。对于 RAM 限制,几乎每个设备都在应用程序之间共享解码器实例的这种限制。
最好使用一个播放器实例并在之后处理它。
有关更多信息和详细信息,请参阅此问题
https://github.com/google/ExoPlayer/issues/5799
关于flutter - Flutter 中的视频播放器错误 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186395/