389951 deehy 20 0 5847900 301896 126860 S 17.2 1.1 0:04.92 fvp_example
390927 deehy 20 0 2474324 226592 69536 S 6.0 0.8 0:00.99 mpv
播放相同的本地片源,mpv 的播放命令为 mpv --hwdec=auto assets/test_5mins.mkv,flutter 嵌入视频播放器后占用相对于 mpv,高了大概 10%。
我个人推测似乎是 flutter 在 linux 平台上的固有问题,测试 media_kit,或者是基于 video_player 的 interface 自己实现的 mpv 插件,都存在近乎相近的额外占用。
不知道个人理解是不是正确,发出来讨论讨论。
使用 example 中的循环播放 asset 下的 mkv 文件。
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 8d9fa62..b58b77b 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -24,7 +24,7 @@ class _App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DefaultTabController(
- length: 3,
+ length: 4,
child: Scaffold(
key: const ValueKey<String>('home_page'),
appBar: AppBar(
@@ -52,6 +52,7 @@ class _App extends StatelessWidget {
),
Tab(icon: Icon(Icons.insert_drive_file), text: 'Asset'),
Tab(icon: Icon(Icons.list), text: 'List example'),
+ Tab(icon: Icon(Icons.repeat), text: 'Loop mkv'),
],
),
),
@@ -60,6 +61,7 @@ class _App extends StatelessWidget {
_BumbleBeeRemoteVideo(),
_ButterFlyAssetVideo(),
_ButterFlyAssetVideoInList(),
+ _LoopingMkvVideo(),
],
),
),
@@ -202,6 +204,66 @@ class _ButterFlyAssetVideoState extends State<_ButterFlyAssetVideo> {
}
}
+/// Plays the bundled `assets/test_5mins.mkv` on a loop.
+///
+/// fvp (registered in `main`) handles mkv decoding; `setLooping(true)` makes
+/// playback restart from the beginning whenever it reaches the end.
+class _LoopingMkvVideo extends StatefulWidget {
+ @override
+ _LoopingMkvVideoState createState() => _LoopingMkvVideoState();
+}
+
+class _LoopingMkvVideoState extends State<_LoopingMkvVideo> {
+ late VideoPlayerController _controller;
+
+ @override
+ void initState() {
+ super.initState();
+ _controller = VideoPlayerController.asset('assets/test_5mins.mkv');
+
+ _controller.addListener(() {
+ setState(() {});
+ });
+ _controller.setLooping(true);
+ _controller.initialize().then((_) => setState(() {}));
+ _controller.play();
+ }
+
+ @override
+ void dispose() {
+ _controller.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return SingleChildScrollView(
+ child: Column(
+ children: <Widget>[
+ Container(
+ padding: const EdgeInsets.only(top: 20.0),
+ ),
+ const Text('Looping asset mkv'),
+ Container(
+ padding: const EdgeInsets.all(20),
+ child: AspectRatio(
+ aspectRatio: _controller.value.aspectRatio,
+ child: Stack(
+ alignment: Alignment.bottomCenter,
+ children: <Widget>[
+ VideoPlayer(_controller),
+ _ControlsOverlay(controller: _controller),
+ VideoProgressIndicator(_controller, allowScrubbing: true),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
+
class _BumbleBeeRemoteVideo extends StatefulWidget {
@override
_BumbleBeeRemoteVideoState createState() => _BumbleBeeRemoteVideoState();
@@ -221,7 +283,7 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> {
void initState() {
super.initState();
_controller = VideoPlayerController.network(
- 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4',
+ 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/vchart/landingPage/vchart-show-video.mp4',
closedCaptionFile: _loadCaptions(),
videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true),
);
播放相同的本地片源,mpv 的播放命令为
mpv --hwdec=auto assets/test_5mins.mkv,flutter 嵌入视频播放器后占用相对于 mpv,高了大概 10%。我个人推测似乎是 flutter 在 linux 平台上的固有问题,测试 media_kit,或者是基于 video_player 的 interface 自己实现的 mpv 插件,都存在近乎相近的额外占用。
不知道个人理解是不是正确,发出来讨论讨论。
使用 example 中的循环播放 asset 下的 mkv 文件。