Flutter视频播放插件bestplayer的使用
Flutter视频播放插件bestplayer的使用
最佳实践
bestplayer
是一个用于在 Flutter 应用中实现视频播放功能的插件。它支持多种视频格式,并且可以集成广告功能。
获取开始
这个项目是一个插件包的起点,适用于 Android 和/或 iOS 平台的原生代码实现。
如果你对 Flutter 开发还不熟悉,可以参考以下资源:
示例代码
以下是一个完整的示例代码,展示了如何使用 bestplayer
插件来播放视频并处理广告。
示例代码
import 'package:bestplayer/bestplayer-adschedule.model.dart';
import 'package:bestplayer/bestplayer-vod.model.dart';
import 'package:bestplayer/bestplayer_controller.dart';
import 'package:bestplayer/bestplayer_event_type.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:bestplayer/bestplayer.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final controller = BestplayerController.instance;
final iosLicense = "YOUR_IOS_LICENSE_KEY_HERE"; // 替换为你的 iOS 许可证密钥
final androidLicense = "YOUR_ANDROID_LICENSE_KEY_HERE"; // 替换为你的 Android 许可证密钥
[@override](/user/override)
void initState() {
super.initState();
initPlayer();
}
void listener(event) {
// 处理事件
switch (event.type) {
case BestPlayerEventType.ready:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.progress:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.play:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.pause:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.finish:
{
break;
}
case BestPlayerEventType.adPlay:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.adComplete:
{
setState(() {}); // 更新界面状态
break;
}
case BestPlayerEventType.error:
{
break;
}
}
}
Future<void> initPlayer() async {
Timer(const Duration(seconds: 5), () {
// 创建 VOD 模型
final vod = BestplayerVodModel(
file: "https://cdn.jwplayer.com/manifests/NjhRveIM.m3u8", // 视频文件 URL
title: "TCN Top20 Countdown Ep 509", // 视频标题
mediaId: "NjhRveIM", // 媒体 ID
);
// 创建广告计划模型
final adSchedule = BestPlayerAdScheduleModel(
tag:
"https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=", // 广告标签
offset: "pre", // 广告位置(预播)
);
// 设置广告配置
vod.setAdvertisementConfig([adSchedule]);
// 配置数据源
controller.setupDataSource(vod);
// 添加监听器
controller.addListener(listener);
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.black, // 背景色设置为黑色
body: Center(
child: Column(
children: [
Expanded(
child: Stack(
children: [
Align(
alignment: Alignment.topLeft,
child: SizedBox(
width: 500,
height: 300,
child: BestPlayer(
androidLicense: androidLicense, // Android 许可证密钥
iosLicense: iosLicense, // iOS 许可证密钥
),
),
),
Align(
alignment: Alignment.bottomLeft,
child: Container(
width: 500,
height: 200,
color: Colors.white,
child: Column(
children: [
Text("DURATION: ${controller.duration.inSeconds}"), // 视频总时长
Text("POSITION: ${controller.position.inSeconds}"), // 当前播放位置
Text("PLAYING: ${controller.isPlaying ? "TRUE" : "FALSE"}"), // 是否正在播放
Text("READY: ${controller.isReady ? "TRUE" : "FALSE"}"), // 是否准备就绪
Text("AD PLAYING: ${controller.isAdPlaying ? "TRUE" : "FALSE"}"), // 是否正在播放广告
],
),
),
)
],
),
),
],
),
),
),
);
}
}
更多关于Flutter视频播放插件bestplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频播放插件bestplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bestplayer
是一个功能强大的 Flutter 视频播放插件,支持多种视频格式和流媒体协议。它基于 exoplayer
和 ijkplayer
,提供了丰富的功能和灵活的配置选项。以下是如何在 Flutter 项目中使用 bestplayer
插件的详细步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 bestplayer
插件的依赖:
dependencies:
flutter:
sdk: flutter
bestplayer: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在需要使用 bestplayer
的 Dart 文件中导入插件:
import 'package:bestplayer/bestplayer.dart';
3. 创建播放器实例
创建一个 BestPlayerController
实例来控制视频播放:
BestPlayerController _controller = BestPlayerController(
BestPlayerConfiguration(
autoPlay: true,
looping: false,
aspectRatio: 16 / 9,
allowedScreenSleep: false,
fullScreenByDefault: false,
deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],
controlsConfiguration: BestPlayerControlsConfiguration(
showControls: true,
enableFullscreen: true,
enableSkips: true,
enablePlayPause: true,
enableMute: true,
enableProgressBar: true,
enableProgressBarDrag: true,
enableSubtitles: true,
enableQualities: true,
enablePlaybackSpeed: true,
),
),
);
4. 设置视频源
设置要播放的视频源。你可以播放本地文件、网络视频或流媒体:
_controller.setDataSource(
BestPlayerDataSource(
BestPlayerDataSourceType.network,
"https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4",
),
);
5. 显示播放器
使用 BestPlayer
小部件来显示视频播放器:
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BestPlayer Example'),
),
body: Center(
child: BestPlayer(
controller: _controller,
),
),
);
}
6. 控制播放器
你可以通过 BestPlayerController
来控制视频的播放、暂停、停止等操作:
_controller.play();
_controller.pause();
_controller.stop();
_controller.seekTo(Duration(seconds: 10));
7. 释放资源
在页面销毁时,记得释放播放器资源以避免内存泄漏:
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
8. 其他功能
bestplayer
还支持字幕、播放速度调整、全屏播放等功能。你可以通过 BestPlayerController
和 BestPlayerControlsConfiguration
来配置这些功能。
示例代码
以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:bestplayer/bestplayer.dart';
class VideoPlayerScreen extends StatefulWidget {
[@override](/user/override)
_VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
BestPlayerController _controller;
[@override](/user/override)
void initState() {
super.initState();
_controller = BestPlayerController(
BestPlayerConfiguration(
autoPlay: true,
looping: false,
aspectRatio: 16 / 9,
allowedScreenSleep: false,
fullScreenByDefault: false,
deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],
controlsConfiguration: BestPlayerControlsConfiguration(
showControls: true,
enableFullscreen: true,
enableSkips: true,
enablePlayPause: true,
enableMute: true,
enableProgressBar: true,
enableProgressBarDrag: true,
enableSubtitles: true,
enableQualities: true,
enablePlaybackSpeed: true,
),
),
);
_controller.setDataSource(
BestPlayerDataSource(
BestPlayerDataSourceType.network,
"https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4",
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BestPlayer Example'),
),
body: Center(
child: BestPlayer(
controller: _controller,
),
),
);
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
}
void main() => runApp(MaterialApp(
home: VideoPlayerScreen(),
));