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

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

Better Player

pub package pub package pub package

基于video_playerChewie的高级视频播放器。它解决了许多典型用例,并且易于运行。

引言

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

特性:

  • ✔️ 修复常见错误
  • ✔️ 增加高级配置选项
  • ✔️ 重构播放器控件
  • ✔️ 支持播放列表
  • ✔️ 在ListView中支持视频
  • ✔️ 支持字幕(格式:SRT,WEBVTT,支持HTML标签;从HLS获取字幕;视频多字幕)
  • ✔️ 支持HTTP头
  • ✔️ 支持BoxFit视频
  • ✔️ 支持播放速度
  • ✔️ 支持HLS(轨道,字幕(分段),音频轨道选择)
  • ✔️ 支持DASH(轨道,字幕,音频轨道选择)
  • ✔️ 支持替代分辨率
  • ✔️ 支持缓存
  • ✔️ 支持通知
  • ✔️ 支持画中画
  • ✔️ 支持DRM(令牌,Widevine,FairPlay EZDRM)。
  • ✔️ 更多功能…

文档

重要信息

该插件仍在开发中。每个版本可能会有破坏性更改。该插件是免费的兼职开发。如果你需要一些由其他在pub dev上的播放器支持的功能,那么你可以创建PR。所有有价值的贡献都欢迎!

使用示例

主程序文件

import 'package:custom_better_player_example/pages/welcome_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Shortcuts(
        shortcuts: <LogicalKeySet, Intent>{
          LogicalKeySet(LogicalKeyboardKey.select): const ActivateIntent(),
        },
        child: MaterialApp(
          title: 'Better player demo',
          localizationsDelegates: [
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
          ],
          supportedLocales: [
            const Locale('en', 'US'),
            const Locale('pl', 'PL'),
          ],
          theme: ThemeData(
            primarySwatch: Colors.green,
          ),
          home: WelcomePage(),
        ));
  }
}

欢迎页面文件

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

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

class _WelcomePageState extends State<WelcomePage> {
  // 初始化BetterPlayerController
  BetterPlayerController _betterPlayerController;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 设置控制器
    _betterPlayerController = BetterPlayerController(BetterPlayerConfiguration(
      aspectRatio: 16 / 9,
    ));

    // 设置视频源
    _betterPlayerController.setupDataSource(BetterPlayerDataSource(
      BetterPlayerDataSourceType.network,
      "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4",
    ));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Better Player Demo"),
      ),
      body: Center(
        child: // 使用BetterPlayer组件
          BetterPlayer(
            controller: _betterPlayerController,
          ),
      ),
    );
  }
}

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

1 回复

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


custom_better_player 是一个基于 better_player 的 Flutter 视频播放器插件,提供了更多的自定义选项和功能。它支持多种视频格式、字幕、播放速度控制、画中画、全屏播放等功能。以下是如何在 Flutter 项目中使用 custom_better_player 的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 custom_better_player 依赖:

dependencies:
  flutter:
    sdk: flutter
  custom_better_player: ^0.0.3  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 custom_better_player 包:

import 'package:custom_better_player/custom_better_player.dart';

3. 基本使用

你可以使用 CustomBetterPlayer 组件来播放视频。以下是一个简单的示例:

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

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

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late CustomBetterPlayerController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    initializePlayer();
  }

  void initializePlayer() {
    var dataSource = CustomBetterPlayerDataSource(
      CustomBetterPlayerDataSourceType.network,
      "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4",
    );

    _controller = CustomBetterPlayerController(
      CustomBetterPlayerConfiguration(),
      betterPlayerDataSource: dataSource,
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Better Player'),
      ),
      body: Column(
        children: [
          AspectRatio(
            aspectRatio: 16 / 9,
            child: CustomBetterPlayer(
              controller: _controller,
            ),
          ),
        ],
      ),
    );
  }
}

4. 自定义配置

CustomBetterPlayerConfiguration 允许你自定义播放器的各种配置。例如,你可以设置自动播放、循环播放、全屏选项等:

CustomBetterPlayerConfiguration(
  autoPlay: true,
  looping: true,
  fullScreenByDefault: false,
  allowedScreenSleep: false,
  controlsConfiguration: CustomBetterPlayerControlsConfiguration(
    showControls: true,
    enableProgressBar: true,
    enablePlayPause: true,
    enableFullscreen: true,
  ),
)

5. 处理全屏模式

custom_better_player 支持全屏播放。你可以通过 CustomBetterPlayerController 来处理全屏模式:

_controller.enterFullScreen();
_controller.exitFullScreen();

6. 添加字幕

你可以通过 CustomBetterPlayerSubtitlesSource 来添加字幕:

var dataSource = CustomBetterPlayerDataSource(
  CustomBetterPlayerDataSourceType.network,
  "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4",
  subtitles: [
    CustomBetterPlayerSubtitlesSource(
      type: CustomBetterPlayerSubtitlesSourceType.network,
      name: "English",
      urls: ["https://www.example.com/subtitles_en.vtt"],
    ),
  ],
);

7. 处理播放事件

你可以监听播放器的事件,例如播放、暂停、完成等:

_controller.addEventsListener((event) {
  if (event.betterPlayerEventType == CustomBetterPlayerEventType.play) {
    print("Video started playing");
  } else if (event.betterPlayerEventType == CustomBetterPlayerEventType.pause) {
    print("Video paused");
  } else if (event.betterPlayerEventType == CustomBetterPlayerEventType.finished) {
    print("Video finished");
  }
});

8. 释放资源

在页面销毁时,记得释放播放器资源:

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