如何在 Flutter 中播放视频列表?
How to play a List of video in Flutter?
我正在使用 flutter video_player
包来播放视频列表。
List sourceList;
sourceList = [
{
"size": 69742504,
"name": "lucky-roulette.mp4",
"mimetype": "video/mp4",
},
{
"size": 69742504,
"name": "BigBuckBunny.mp4",
"mimetype": "video/mp4",
}
];
我已经检查过 this issue,并在上面做了一些自定义代码。
void play() {
log.fine("Now playing: $_nowPlayingUrl");
_adController = VideoPlayerController.network(_nowPlayingUrl);
_adController.initialize().then((_) => setState(() {}));
_adController.play();
_adController.addListener(checkIfVideoFinished);
}
void checkIfVideoFinished() {
if (_adController == null ||
_adController.value == null ||
_adController.value.position == null ||
_adController.value.duration == null) return;
if (_adController.value.position.inSeconds ==
_adController.value.duration.inSeconds) {
_adController.removeListener(checkIfVideoFinished);
_adController.dispose();
// Change _nowPlayingIndex
setState(() {
_nowPlayingIndex = (_nowPlayingIndex + 1) % _totalIndex;
});
play();
}
}
但是使用这个代码片段会发出异常Another exception was thrown: A VideoPlayerController was used after being disposed.
有没有更好的方法在 Flutter 中播放和循环播放视频列表?
您必须在Override dispose 方法中调用视频控制器dispose 方法。
removevideo时不需要调用dispose方法。
最近测试了视频列表示例。请检查 github FlutterVideoListSample 中的来源。我认为必须处理视频小部件。
在我的例子中,我在初始化之前清除了旧的 VideoPlayerController。而且我不使用 chewie
在进入全屏时创建新页面的插件,因此无法处理下一个视频小部件。
依赖关系
video_player: '>=0.10.11+1 <2.0.0'
FlutterVideoListSample 中的一些代码
VideoPlayerController _controller;
void _initializeAndPlay(int index) async {
print("_initializeAndPlay ---------> $index");
final clip = _clips[index];
final controller = VideoPlayerController.asset(clip.videoPath());
final old = _controller;
if (old != null) {
old.removeListener(_onControllerUpdated);
old.pause(); // mute instantly
}
_controller = controller;
setState(() {
debugPrint("---- controller changed");
});
controller
..initialize().then((_) {
debugPrint("---- controller initialized");
old?.dispose();
_playingIndex = index;
controller.addListener(_onControllerUpdated);
controller.play();
setState(() {});
});
}
我正在使用 flutter video_player
包来播放视频列表。
List sourceList;
sourceList = [
{
"size": 69742504,
"name": "lucky-roulette.mp4",
"mimetype": "video/mp4",
},
{
"size": 69742504,
"name": "BigBuckBunny.mp4",
"mimetype": "video/mp4",
}
];
我已经检查过 this issue,并在上面做了一些自定义代码。
void play() {
log.fine("Now playing: $_nowPlayingUrl");
_adController = VideoPlayerController.network(_nowPlayingUrl);
_adController.initialize().then((_) => setState(() {}));
_adController.play();
_adController.addListener(checkIfVideoFinished);
}
void checkIfVideoFinished() {
if (_adController == null ||
_adController.value == null ||
_adController.value.position == null ||
_adController.value.duration == null) return;
if (_adController.value.position.inSeconds ==
_adController.value.duration.inSeconds) {
_adController.removeListener(checkIfVideoFinished);
_adController.dispose();
// Change _nowPlayingIndex
setState(() {
_nowPlayingIndex = (_nowPlayingIndex + 1) % _totalIndex;
});
play();
}
}
但是使用这个代码片段会发出异常Another exception was thrown: A VideoPlayerController was used after being disposed.
有没有更好的方法在 Flutter 中播放和循环播放视频列表?
您必须在Override dispose 方法中调用视频控制器dispose 方法。 removevideo时不需要调用dispose方法。
最近测试了视频列表示例。请检查 github FlutterVideoListSample 中的来源。我认为必须处理视频小部件。
在我的例子中,我在初始化之前清除了旧的 VideoPlayerController。而且我不使用 chewie
在进入全屏时创建新页面的插件,因此无法处理下一个视频小部件。
video_player: '>=0.10.11+1 <2.0.0'
FlutterVideoListSample 中的一些代码
VideoPlayerController _controller;
void _initializeAndPlay(int index) async {
print("_initializeAndPlay ---------> $index");
final clip = _clips[index];
final controller = VideoPlayerController.asset(clip.videoPath());
final old = _controller;
if (old != null) {
old.removeListener(_onControllerUpdated);
old.pause(); // mute instantly
}
_controller = controller;
setState(() {
debugPrint("---- controller changed");
});
controller
..initialize().then((_) {
debugPrint("---- controller initialized");
old?.dispose();
_playingIndex = index;
controller.addListener(_onControllerUpdated);
controller.play();
setState(() {});
});
}