Flutter音频播放插件goat_player的使用

Flutter音频播放插件goat_player的使用

goat_player 是一个基于 video_playerChewie 的高级视频播放器插件。它解决了许多常见的问题,并且配置简单。由于 Better Player 的原作者不再维护该项目,goat_player 是对 Better Player 的改进版本,包含了许多修复和更新。

变更记录

Goat 最伟大的时刻

  • 修复:
    • 迁移到 AndroidX Media3
    • 依赖项更新 jhomlala/betterplayer#1291
    • 将 Gradle Wrapper 版本更改为 v7.5
    • 将 Gradle 构建工具版本更改为 v7.4.2
    • 将 Kotlin 插件版本更改为 v1.8.10
    • 重构并替换废弃 API
    • 修复 iOS 问题
  • 功能:
    • 添加了波斯语语言支持 jhomlala/betterplayer#1250

Goat Player


这是一个基于 video_playerChewie 的高级视频播放器,解决了很多典型的使用场景,并且易于运行。














介绍

该插件基于 Chewie。Chewie 是一个很棒的插件,在很多情况下表现良好。Better Player 是对 Chewie 中引入的想法的延续。Better Player 修复了常见错误,增加了更多配置选项,并解决了典型用例。

功能:

  • 修复常见错误
  • 增加高级配置选项
  • 重构播放器控件
  • 支持播放列表
  • 支持在 ListView 中播放视频
  • 支持字幕:格式包括 SRT、WEBVTT(支持 HTML 标签);来自 HLS 的字幕;视频的多个字幕
  • 支持 HTTP Header
  • 支持视频的 BoxFit
  • 支持播放速度
  • 支持 HLS(轨道、字幕(也支持分段)、音频轨道选择)
  • 支持 DASH(轨道、字幕、音频轨道选择)
  • 支持替代分辨率
  • 支持缓存
  • 支持通知
  • 支持画中画
  • 支持 DRM(令牌、Widevine、FairPlay EZDRM)

文档

重要信息

该插件仍在开发中,每个版本可能会遇到破坏性更改。该插件是免费的兼职开发项目。如果你需要其他在 pub.dev 上可用的播放器支持的功能,请随时创建 PR。所有有价值的贡献都欢迎!


使用示例

以下是一个完整的示例代码,展示如何在 Flutter 应用中使用 goat_player 插件:

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

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

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

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

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  GoatVideoPlayerController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化控制器
    _controller = GoatVideoPlayerController.network(
      'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4',
    )..initialize().then((_) {
        setState(() {});
      });
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Goat Player 示例'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? GoatVideoPlayer(_controller)
            : CircularProgressIndicator(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 播放或暂停视频
          if (_controller.value.isPlaying) {
            _controller.pause();
          } else {
            _controller.play();
          }
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

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

1 回复

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


goat_player 是一个用于 Flutter 的音频播放插件,它提供了简单易用的 API 来播放音频文件。以下是如何在 Flutter 项目中使用 goat_player 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 goat_player 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  goat_player: ^0.1.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 goat_player 插件。

import 'package:goat_player/goat_player.dart';

3. 初始化播放器

在使用播放器之前,你需要初始化它。通常你可以在 initState 方法中进行初始化。

class AudioPlayerScreen extends StatefulWidget {
  @override
  _AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}

class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
  GoatPlayer _player;

  @override
  void initState() {
    super.initState();
    _player = GoatPlayer();
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                await _player.play('https://www.example.com/audio.mp3');
              },
              child: Text('Play Audio'),
            ),
            ElevatedButton(
              onPressed: () async {
                await _player.pause();
              },
              child: Text('Pause Audio'),
            ),
            ElevatedButton(
              onPressed: () async {
                await _player.stop();
              },
              child: Text('Stop Audio'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 播放音频

你可以使用 play 方法来播放音频文件。你可以传递一个本地文件路径或一个网络 URL。

await _player.play('https://www.example.com/audio.mp3');

5. 暂停和停止音频

你可以使用 pausestop 方法来暂停和停止音频播放。

await _player.pause();
await _player.stop();

6. 释放资源

在不再需要播放器时,记得调用 dispose 方法来释放资源。

@override
void dispose() {
  _player.dispose();
  super.dispose();
}

7. 处理播放状态

你可以监听播放器的状态变化,例如播放、暂停、停止等。

_player.onPlayerStateChanged.listen((state) {
  print('Player state: $state');
});

8. 处理错误

你可以监听播放器的错误事件。

_player.onPlayerError.listen((error) {
  print('Player error: $error');
});

9. 控制音量

你可以使用 setVolume 方法来控制音量。

await _player.setVolume(0.5);  // 设置音量为 50%

10. 控制播放位置

你可以使用 seek 方法来跳转到指定的播放位置。

await _player.seek(Duration(seconds: 30));  // 跳转到 30 秒

11. 获取播放进度

你可以使用 positionStream 来获取当前的播放位置。

_player.positionStream.listen((position) {
  print('Current position: $position');
});

12. 获取音频时长

你可以使用 durationStream 来获取音频的总时长。

_player.durationStream.listen((duration) {
  print('Total duration: $duration');
});
回到顶部