Flutter HLS视频播放插件better_player_hls的使用

Flutter HLS视频播放插件better_player_hls的使用

Better Player

pub package GitHub许可证 平台

基于video_player和Chewie的高级视频播放器。它解决了许多常见的用例,并且易于运行。

介绍

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

功能:

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

文档

重要信息

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

示例代码

import 'package:better_player_hls_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
  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(),
      ),
    );
  }
}

上述代码展示了如何设置一个基本的应用程序,包括国际化和主题设置。你可以根据需要进一步扩展和自定义它以实现HLS视频播放。


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

1 回复

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


better_player_hls 是一个基于 better_player 的 Flutter 插件,专门用于播放 HLS(HTTP Live Streaming)视频。HLS 是一种由 Apple 开发的流媒体协议,广泛用于视频直播和点播。

下面是如何在 Flutter 项目中使用 better_player_hls 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  better_player_hls: ^0.0.1

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

2. 导入包

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

import 'package:better_player_hls/better_player_hls.dart';

3. 使用 BetterPlayerHlsWidget

BetterPlayerHlsWidgetbetter_player_hls 提供的主要组件,用于播放 HLS 视频。以下是一个简单的示例:

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

class VideoPlayerScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('HLS Video Player'),
      ),
      body: Center(
        child: BetterPlayerHlsWidget(
          hlsUrl: 'https://www.example.com/your-video.m3u8',
          configuration: BetterPlayerHlsConfiguration(
            autoPlay: true,
            looping: false,
          ),
        ),
      ),
    );
  }
}

4. 配置 BetterPlayerHlsConfiguration

BetterPlayerHlsConfiguration 允许你配置播放器的行为。以下是一些常用的配置选项:

  • autoPlay: 是否自动播放视频,默认为 false
  • looping: 是否循环播放视频,默认为 false
  • aspectRatio: 视频的宽高比,默认为 16 / 9
  • controls: 是否显示播放控件,默认为 true
  • placeholder: 在视频加载时显示的占位符部件。

5. 处理播放事件

你可以监听播放器的各种事件,例如播放、暂停、完成等。以下是一个示例:

BetterPlayerHlsWidget(
  hlsUrl: 'https://www.example.com/your-video.m3u8',
  configuration: BetterPlayerHlsConfiguration(
    autoPlay: true,
    looping: false,
  ),
  onPlayerInitialized: (controller) {
    controller.addListener(() {
      if (controller.value.isPlaying) {
        print('Video is playing');
      } else {
        print('Video is paused');
      }
    });
  },
);

6. 处理错误

你可以通过 onError 回调来处理播放过程中发生的错误:

BetterPlayerHlsWidget(
  hlsUrl: 'https://www.example.com/your-video.m3u8',
  configuration: BetterPlayerHlsConfiguration(
    autoPlay: true,
    looping: false,
  ),
  onError: (error) {
    print('Error occurred: $error');
  },
);

7. 自定义 UI

如果你需要自定义播放器的 UI,可以使用 BetterPlayerHlsController 来控制播放器的行为,并自定义 UI 部件。

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

class _CustomVideoPlayerState extends State<CustomVideoPlayer> {
  BetterPlayerHlsController _controller;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Video Player'),
      ),
      body: Column(
        children: [
          BetterPlayerHlsWidget(
            hlsUrl: 'https://www.example.com/your-video.m3u8',
            configuration: BetterPlayerHlsConfiguration(
              autoPlay: true,
              looping: false,
            ),
            onPlayerInitialized: (controller) {
              setState(() {
                _controller = controller;
              });
            },
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              IconButton(
                icon: Icon(Icons.play_arrow),
                onPressed: () {
                  _controller.play();
                },
              ),
              IconButton(
                icon: Icon(Icons.pause),
                onPressed: () {
                  _controller.pause();
                },
              ),
            ],
          ),
        ],
      ),
    );
  }
}
回到顶部