Flutter视频播放插件videos_player的使用

videos_player 是一个用于 Flutter 的视频播放插件,它在后台使用了 chewievideo_player 来播放视频列表。该插件可以轻松地切换视频,而无需复杂的配置。

video_player 插件提供了对视频播放的基本访问功能,而 chewie 则在其基础上添加了友好的 Material 或 Cupertino 风格的用户界面。

videos_player 将这两种配置整合到一个包中,简化了开发流程。


Demo

以下展示了 videos_player 的两种样式:

样式 1 样式 2

安装

在您的 Flutter 项目中的 pubspec.yaml 文件里添加以下依赖:

dependencies:
  videos_player: <latest_version>

然后运行以下命令以更新依赖项:

flutter pub get

使用方法

以下是一个完整的示例代码,展示如何使用 videos_player 插件来播放视频列表:

import 'package:flutter/material.dart';
import 'package:videos_player/model/video.model.dart';
import 'package:videos_player/videos_player.dart';
import 'package:videos_player/model/control.model.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Videos Player'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: VideosPlayer(
        // 视频列表
        networkVideos: [
          new NetworkVideo(
              id: "2",
              name: "Elephant Dream",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ElephantsDream.jpg",
              videoControl: new NetworkVideoControl(
                fullScreenByDefault: true, // 默认全屏
              )),
          new NetworkVideo(
              id: "3",
              name: "Big Buck Bunny",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg",
              videoControl: new NetworkVideoControl(autoPlay: true)), // 自动播放
          new NetworkVideo(
              id: "4",
              name: "For Bigger Blazes",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ForBiggerBlazes.jpg"),
          new NetworkVideo(
              id: "5",
              name: "For Bigger Escape",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ForBiggerEscapes.jpg"),
          new NetworkVideo(
              id: "6",
              name: "For Bigger Fun",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ForBiggerFun.jpg"),
          new NetworkVideo(
              id: "7",
              name: "For Bigger Joyrides",
              videoUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerJoyrides.mp4",
              thumbnailUrl:
                  "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ForBiggerJoyrides.jpg"),
        ],
        playlistStyle: Style.Style2, // 设置样式为 Style2
      ),
    );
  }
}

视频控制

每个视频都可以根据需求设置不同的控制选项,例如自动播放、默认全屏等。具体参数如下:

  • autoPlay: 是否自动播放。
  • fullScreenByDefault: 是否默认进入全屏模式。

示例代码

您可以直接运行以下代码来测试 videos_player 的功能。请确保将代码保存到 main.dart 文件中,并运行项目:

flutter run
1 回复

更多关于Flutter视频播放插件videos_player的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


video_player 是 Flutter 官方提供的一个用于播放视频的插件。它支持在 Android 和 iOS 平台上播放本地和网络视频。以下是如何使用 video_player 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 video_player 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  video_player: ^2.4.7

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用 video_player 的 Dart 文件中导入插件:

import 'package:video_player/video_player.dart';

3. 创建 VideoPlayerController

VideoPlayerController 是控制视频播放的核心类。你可以通过它来加载视频、控制播放、暂停、调整音量等。

VideoPlayerController _controller;

[@override](/user/override)
void initState() {
  super.initState();
  
  // 加载网络视频
  _controller = VideoPlayerController.network(
    'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
  )..initialize().then((_) {
    // 确保视频加载完成后更新 UI
    setState(() {});
  });
}

4. 显示视频

使用 VideoPlayer widget 来显示视频:

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Video Player Example'),
    ),
    body: Center(
      child: _controller.value.isInitialized
          ? AspectRatio(
              aspectRatio: _controller.value.aspectRatio,
              child: VideoPlayer(_controller),
            )
          : CircularProgressIndicator(),
    ),
  );
}

5. 控制视频播放

你可以通过 _controller 来控制视频的播放、暂停、停止等操作。例如,添加一个按钮来控制播放和暂停:

FloatingActionButton(
  onPressed: () {
    setState(() {
      if (_controller.value.isPlaying) {
        _controller.pause();
      } else {
        _controller.play();
      }
    });
  },
  child: Icon(
    _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
  ),
),

6. 释放资源

dispose 方法中释放 VideoPlayerController 的资源,以避免内存泄漏:

[@override](/user/override)
void dispose() {
  super.dispose();
  _controller.dispose();
}

7. 完整示例

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

class VideoPlayerExample extends StatefulWidget {
  [@override](/user/override)
  _VideoPlayerExampleState createState() => _VideoPlayerExampleState();
}

class _VideoPlayerExampleState extends State<VideoPlayerExample> {
  VideoPlayerController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller = VideoPlayerController.network(
      'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
    )..initialize().then((_) {
        setState(() {});
      });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player Example'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? AspectRatio(
                aspectRatio: _controller.value.aspectRatio,
                child: VideoPlayer(_controller),
              )
            : CircularProgressIndicator(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller.value.isPlaying) {
              _controller.pause();
            } else {
              _controller.play();
            }
          });
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();
    _controller.dispose();
  }
}

void main() => runApp(MaterialApp(
  home: VideoPlayerExample(),
));
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!