芙蓉区营销型网站建设定制,网站ftp上传工具哪个好用,毕业设计团购网站建设,东莞企业宣传片制作公司flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题
在开发过程中#xff0c;我这里使用video_player播放多个视频的时候#xff0c;出现了MediaCodecVideoRenderer error
一、使用video_player播放视频
使用video_player播放单个视频请查看 htt…flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题
在开发过程中我这里使用video_player播放多个视频的时候出现了MediaCodecVideoRenderer error
一、使用video_player播放视频
使用video_player播放单个视频请查看 https://blog.csdn.net/gloryFlow/article/details/132124837
这里记录一下解决多个视频MediaCodecVideoRenderer error问题。
二、在app/build.gradle下添加依赖
在app/build.gradle下添加依赖
dependencies{implementation com.google.android.exoplayer:exoplayer:2.17.1
}实现播放视频的Widget在播放测试过程中出现只能播放一个视频可以设置VideoPlayerOptions将VideoPlayerOptions的mixWithOthers设置为true。
Futurevoid waitVideoPlay() async {_controller?.dispose();_controller VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl),videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true,allowBackgroundPlayback: false,),);await _controller?.initialize().then((_) {// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.setState(() {});});await _controller!.setLooping(true);if (widget.autoPlay) {await _controller?.play();} else {await _controller?.pause();}}完整VideoPlayerWidget代码如下
import package:flutter/material.dart;
import package:video_player/video_player.dart;// 视频播放测试
class VideoPlayerWidget extends StatefulWidget {const VideoPlayerWidget({Key? key,required this.videoUrl,required this.isLooping,this.autoPlay true,required this.width,required this.height,}) : super(key: key);final String videoUrl;final bool isLooping;final bool autoPlay;final double width;final double height;overrideStateVideoPlayerWidget createState() _VideoPlayerWidgetState();
}class _VideoPlayerWidgetState extends StateVideoPlayerWidget {VideoPlayerController? _controller;overridevoid initState() {super.initState();waitVideoPlay();}Futurevoid waitVideoPlay() async {_controller?.dispose();_controller VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl),videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true,allowBackgroundPlayback: false,),);await _controller?.initialize().then((_) {// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.setState(() {});});await _controller!.setLooping(true);if (widget.autoPlay) {await _controller?.play();} else {await _controller?.pause();}}overrideWidget build(BuildContext context) {if (_controller ! null _controller!.value.isInitialized) {return Container(width: widget.width,height: widget.height,child: AspectRatio(aspectRatio: _controller!.value.aspectRatio,child: VideoPlayer(_controller!),),);}return Container(width: widget.width,height: widget.height,color: Colors.orange,);}overridevoid dispose() {// TODO: implement dispose_controller?.dispose();super.dispose();}
}三、video_player播放界面播放多个视频
在使用VideoPlayerWidget播放多个视频
Widget buildVideoContainer(BuildContext context) {Size screenSize MediaQuery.of(context).size;return Container(width: screenSize.width,height: screenSize.height,color: Colors.white,child: Wrap(spacing: 24.0.r, // 主轴(水平)方向间距runSpacing: 12.0.r, // 纵轴垂直方向间距alignment: WrapAlignment.center, //沿主轴方向居中children: buildVideoListWidget(context),),);}ListWidget buildVideoListWidget(BuildContext context) {ListWidget list [];for (int i 0; i 4; i) {String videoUrl videoList[i];VideoPlayerWidget widget VideoPlayerWidget(key: GlobalKey(),videoUrl: videoUrl,isLooping: true,width: 320.r,height: 480.r,delayDuration: Duration(seconds: i),);list.add(widget);}return list;}完整video_page代码如下
class VideoPage extends StatefulWidget {const VideoPage({super.key});overrideStateVideoPage createState() _VideoPageState();
}class _VideoPageState extends StateVideoPagewith AutomaticKeepAliveClientMixin {ListString videoList [];overridevoid initState() {// TODO: implement initStateinitVideoList();super.initState();}void initVideoList() {videoList.add(https://v-qiniu.laikeshuo.com/1648693943358lkGhcDwFQzw3Ix266OsW7WWkzhY0.mp4);videoList.add(https://v-qiniu.laikeshuo.com/833134651693235939767);videoList.add(https://v-qiniu.laikeshuo.com/fb52e680058440a8b220ff7d2d555632);videoList.add(https://v-qiniu.laikeshuo.com/f6967489119040319a5fdda8be3e5662);videoList.add(https://v-qiniu.laikeshuo.com/7364b2eb14d54234b205d77147106b7f);videoList.add(https://v-qiniu.laikeshuo.com/ceee6bedf4814fbcaf4178ea5fb84fc0);videoList.add(https://v-qiniu.laikeshuo.com/3f7a60531042461eb10bf29f0c31ec6b);videoList.add(https://v-qiniu.laikeshuo.com/515211835007418da0e6b26425de907c);videoList.add(https://v-qiniu.laikeshuo.com/0bd0eaf2d30e4a66a4d7a5eb9970ed2a);videoList.add(https://v-qiniu.laikeshuo.com/35b2548bcf5140bc93425dcd69054294);videoList.add(https://v-qiniu.laikeshuo.com/3f7a60531042461eb10bf29f0c31ec6b);// videoList// .add(https://dphoto.qiniu.laikeshuo.com/bc7a2df5143a4d3a84c8a8407b22e933.mp4);// videoList// .add(https://dalat-qiniu.laikeshuo.com/31c5040167ec43168d7ec80c9bf33104.mp4);}overridevoid dispose() {// TODO: implement disposesuper.dispose();}overrideWidget build(BuildContext context) {return Scaffold(body: ProviderWidgetVideoModel(model: VideoModel(),onModelReady: (model) model.initData(),builder: (context, model, child) {if (model.isBusy) {return Container();} else if (model.isError) {return Container();} else if (model.isEmpty) {return Container();}return buildVideoContainer(context);},),);}Widget buildVideoContainer(BuildContext context) {Size screenSize MediaQuery.of(context).size;return Container(width: screenSize.width,height: screenSize.height,color: Colors.white,child: Wrap(spacing: 24.0.r, // 主轴(水平)方向间距runSpacing: 12.0.r, // 纵轴垂直方向间距alignment: WrapAlignment.center, //沿主轴方向居中children: buildVideoListWidget(context),),);}ListWidget buildVideoListWidget(BuildContext context) {ListWidget list [];for (int i 0; i 4; i) {String videoUrl videoList[i];VideoPlayerWidget widget VideoPlayerWidget(key: GlobalKey(),videoUrl: videoUrl,isLooping: true,width: 320.r,height: 480.r,delayDuration: Duration(seconds: i),);list.add(widget);}return list;}override// TODO: implement wantKeepAlivebool get wantKeepAlive true;
}经过测试发现播放多个视频播放三个正常多于三个时候会报告如下错误。我使用的是低配置的Android主板设备性能差
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(VideoError, Video player had error x0.q: MediaCodecVideoRenderer error, index0, formatFormat(1, null, null, video/avc, avc1.64001E, -1, null, [1080, 1920, 30.0], [-1, -1]), format_supportedYES, null, null)
三、小结
flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题。
https://blog.csdn.net/gloryFlow/article/details/132676760
学习记录每天不停进步。