在Flutter中实现视频播放,可以使用 video_player 或功能更强大的 better_player。以下是两者的实现方法和区别:
1. video_player(官方基础包)
- 特点:官方维护,支持基础播放控制,但功能较简单。
- 实现步骤:
- 添加依赖到
pubspec.yaml:
dependencies:
video_player: ^2.8.2
- 基本使用代码:
import 'package:video_player/video_player.dart';
class BasicVideoPlayer extends StatefulWidget {
@override
_BasicVideoPlayerState createState() => _BasicVideoPlayerState();
}
class _BasicVideoPlayerState extends State<BasicVideoPlayer> {
late VideoPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.network(
'https://example.com/sample.mp4',
)..initialize().then((_) {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: CircularProgressIndicator(),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
2. better_player(功能增强包)
- 特点:基于
video_player 封装,支持字幕、画质切换、手势控制等高级功能。
- 实现步骤:
- 添加依赖:
dependencies:
better_player: ^0.0.83
- 基本使用代码:
import 'package:better_player/better_player.dart';
class AdvancedVideoPlayer extends StatelessWidget {
@override
Widget build(BuildContext context) {
BetterPlayerController controller = BetterPlayerController(
BetterPlayerConfiguration(
aspectRatio: 16 / 9,
controlsConfiguration: BetterPlayerControlsConfiguration(
enableSkips: false, // 禁用快进快退
),
),
betterPlayerDataSource: BetterPlayerDataSource(
BetterPlayerDataSourceType.network,
'https://example.com/sample.mp4',
),
);
return Scaffold(
body: BetterPlayer(controller: controller),
);
}
}
选择建议:
- video_player:适合简单播放需求,无需额外控件。
- better_player:需要高级功能(如全屏、字幕、播放列表)时使用。
注意:播放网络视频需在 AndroidManifest.xml 和 Info.plist 中配置网络权限。