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

Better Player
基于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
更多关于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
BetterPlayerHlsWidget
是 better_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();
},
),
],
),
],
),
);
}
}