Flutter视频播放器插件apivideo_player的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter视频播放器插件apivideo_player的使用

目录

项目描述

api.video 是为产品构建者提供的视频基础设施。它提供了闪电般快速的视频API,用于集成、扩展和管理应用程序中的按需和低延迟直播功能。

开始使用

安装

在项目的根目录下运行以下命令以安装 apivideo_player 插件:

flutter pub add apivideo_player

文档

实例化

1. ApiVideoPlayerController

要使用视频播放器,必须先实例化一个新的控制器。ApiVideoPlayerController 的参数如下:

参数 是否必填 类型 描述
videoOptions VideoOptions 视频选项
autoplay 否 (默认false) bool 是否自动播放
onReady VoidCallback 当视频准备好播放时调用的回调函数
onPlay VoidCallback 当视频播放时调用的回调函数
onPause VoidCallback 当视频暂停时调用的回调函数
onEnd VoidCallback 当视频结束时调用的回调函数
onError Function(Object) 发生错误时调用的回调函数

实例化并初始化控制器:

final ApiVideoPlayerController controller = ApiVideoPlayerController(
  videoOptions: VideoOptions(videoId: 'VIDEO_ID'), // `VIDEO_ID` 是视频ID或直播流ID
  // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
);

await controller.initialize();

2. ApiVideoPlayer

这是一个显示视频及其控件的小部件。ApiVideoPlayer 构造函数接受以下参数:

参数 是否必填 类型 描述
controller ApiVideoPlayerController 控制视频播放器的控制器
fit 否 (默认 BoxFit.contain) BoxFit 播放器如何嵌入其盒子中
style 否 (默认 api.video 风格) PlayerStyle 自定义视频播放器的颜色、形状等
child 否 (默认 api.video 覆盖层) Widget 替换 api.video 覆盖层

使用控制器创建 ApiVideoPlayer 小部件:

Widget build(BuildContext context) {
  return ApiVideoPlayer(
    controller: controller,
  );
}

方法

一旦 ApiVideoPlayerController 实例化后,可以使用其方法控制播放器:

方法 描述
play() 播放视频
pause() 暂停视频
seek(Duration offset) 增加/减少当前时间
setVolume(double volume) 设置音量(0到1)
setIsMuted(bool isMuted) 静音/取消静音
setAutoplay(bool autoplay) 设置是否自动播放
setIsLooping(bool isLooping) 设置是否循环播放
setCurrentTime(Duration currentTime) 设置当前播放时间
setVideoOptions(VideoOptions videoOptions) 设置视频选项

示例:

final ApiVideoPlayerController controller = ApiVideoPlayerController(
  videoOptions: VideoOptions(videoId: 'VIDEO_ID'),
  // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
);

await controller.initialize();

controller.play(); // 播放视频

属性

一旦 ApiVideoPlayerController 实例化后,可以访问视频播放器的属性:

属性 类型 描述
isCreated Future<bool> 检查播放器是否已创建
isPlaying Future<bool> 检查视频是否正在播放
videoOptions Future<VideoOptions> 获取当前视频选项
currentTime Future<Duration> 获取当前播放时间
duration Future<Duration> 获取视频总时长
autoplay Future<bool> 检查视频是否自动播放
isMuted Future<bool> 检查视频是否静音
isLooping Future<bool> 检查视频是否循环播放
volume Future<double> 获取当前音量
videoSize Future<Size?> 获取当前视频尺寸

示例:

final ApiVideoPlayerController controller = ApiVideoPlayerController(
  videoOptions: VideoOptions(videoId: 'VIDEO_ID'),
  // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
);

await controller.initialize();

final bool isMuted = await controller.isMuted;

事件监听器

添加新的事件监听器 方法1

实例化 ApiVideoPlayerController 时绑定回调:

final ApiVideoPlayerController controller = ApiVideoPlayerController(
  videoOptions: VideoOptions(videoId: 'VIDEO_ID'),
  // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
  onPlay: () => print('PLAY'),
  onPause: () => print('PAUSE'),
);

添加新的事件监听器 方法2

实例化后绑定回调:

final ApiVideoPlayerController controller = ApiVideoPlayerController(
  videoOptions: VideoOptions(videoId: 'VIDEO_ID'),
  // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
);

await controller.initialize();

final ApiVideoPlayerControllerEventsListener eventsListener =
ApiVideoPlayerControllerEventsListener(
  onPlay: () => print('PLAY'),
);

controller.addListener(eventsListener);

移除事件监听器

移除事件监听器:

controller.removeListener(eventsListener);

示例应用

完整的示例应用代码如下:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final ApiVideoPlayerController _controller = ApiVideoPlayerController(
    videoOptions: VideoOptions(videoId: 'VIDEO_ID'),
    // 对于私有视频:VideoOptions(videoId: "YOUR_VIDEO_ID", token: "YOUR_PRIVATE_TOKEN")
    onPlay: () => print('PLAY'),
  );
  String _duration = 'Get duration';

  @override
  void initState() {
    super.initState();
    _controller.initialize();
    _controller.addListener(
      ApiVideoPlayerControllerEventsListener(
        onPause: () => print('PAUSE'),
      ),
    );
  }

  void _getDuration() async {
    final Duration duration = await _controller.duration;
    setState(() {
      _duration = 'Duration: $duration';
    });
  }

  void _muteVideo() {
    _controller.setIsMuted(true);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Builder(builder: (context) {
        return Scaffold(
          body: Center(
            child: Column(
              children: <Widget>[
                SizedBox(
                  width: 400.0,
                  height: 300.0,
                  child: ApiVideoPlayer(
                    controller: _controller,
                  ),
                ),
                IconButton(
                  icon: const Icon(Icons.volume_off),
                  onPressed: _muteVideo,
                ),
                TextButton(
                  onPressed: _getDuration,
                  child: Text(
                    _duration,
                    textAlign: TextAlign.center,
                  ),
                ),
              ],
            ),
          ),
        );
      }),
    );
  }
}

依赖

我们使用了外部库:

插件 README
Exoplayer README.md

常见问题

如果有任何问题,请在 社区 中提问或使用 issues


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

1 回复

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


当然,以下是一个关于如何使用 apivideo_player Flutter 插件来播放视频的简单示例代码。这个插件允许你在 Flutter 应用中嵌入和播放视频。

首先,确保你已经在 pubspec.yaml 文件中添加了 apivideo_player 依赖项:

dependencies:
  flutter:
    sdk: flutter
  apivideo_player: ^最新版本号  # 请替换为实际最新版本号

然后运行 flutter pub get 来获取依赖项。

接下来,在你的 Flutter 项目中,你可以按照以下步骤使用 apivideo_player

  1. 导入插件

在你的 Dart 文件中导入 apivideo_player 插件:

import 'package:apivideo_player/apivideo_player.dart';
import 'package:flutter/material.dart';
  1. 创建视频播放器组件

你可以创建一个自定义的视频播放器组件,或者直接在页面中嵌入视频播放器。以下是一个简单的例子,展示了如何在 Scaffold 中嵌入视频播放器:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VideoPlayerScreen(),
    );
  }
}

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  ApiVideoPlayerController? _controller;

  @override
  void initState() {
    super.initState();
    // 初始化视频控制器
    _controller = ApiVideoPlayerController.network(
      'https://your-video-url.com/video.mp4', // 替换为你的视频URL
      ApiVideoPlayerOptions(
        autoPlay: false, // 是否自动播放
        muted: false,    // 是否静音
        looping: false,  // 是否循环播放
      ),
    );

    // 监听视频播放完成事件
    _controller?.addListener(() {
      if (_controller!.value.position == _controller!.value.duration) {
        setState(() {}); // 更新状态以触发UI变化(如果需要)
        print('视频播放完成');
      }
    });
  }

  @override
  void dispose() {
    _controller?.dispose(); // 释放资源
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('视频播放器示例'),
      ),
      body: Center(
        child: _controller == null
            ? Text('加载视频...')
            : AspectRatio(
                aspectRatio: _controller!.value.aspectRatio,
                child: ApiVideoPlayer(_controller!),
              ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller!.value.isPlaying) {
              _controller?.pause();
            } else {
              _controller?.play();
            }
          });
        },
        child: Icon(
          _controller?.value.isPlaying ?? false
              ? Icons.pause
              : Icons.play_arrow,
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个 VideoPlayerScreen 页面,它包含一个 ApiVideoPlayerController 实例来管理视频播放。我们设置了视频源 URL 和一些播放选项,如自动播放、静音和循环播放。然后,我们使用 ApiVideoPlayer 组件来显示视频播放器,并添加一个浮动操作按钮来控制播放和暂停。

请确保将 'https://your-video-url.com/video.mp4' 替换为实际的视频 URL。

这个示例展示了如何使用 apivideo_player 插件来播放网络视频。你可以根据需要进一步自定义和扩展这个示例。

回到顶部