Flutter媒体播放插件ftl_player的使用
Flutter媒体播放插件ftl_player的使用
基于TXLiteAVSDK_Player 腾讯播放器封装的 Flutter SDK 目前支持直播。SDK 只提供核心功能,具体功能需要自定义,example 里有一套附带的 UI。
简单使用
在 main.dart
文件中初始化 FTLPlayer
并创建一个 FTLPlayerWidget
来播放视频流。
[@override](/user/override)
void initState() {
super.initState();
FTLPlayer.init().then((value){
this.livePlayerController = value;
this.setState(() {});
});
}
Container(height: 200, child: FTLPlayerWidget(this.livePlayerController)),
完整示例代码
以下是完整的示例代码,展示了如何使用 ftl_player
插件来播放视频。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:ftl_player/ftl_player.dart';
void main() => runApp(app());
Widget app() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.white,
statusBarIconBrightness: Brightness.dark,
));
return MaterialApp(initialRoute: "/", routes: {
"/": (context) => HomePage(),
"/page1": (context) => PlayerExample(),
});
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: CupertinoButton(
child: Text("Player"),
onPressed: () {
Navigator.of(context).pushNamed("/page1");
},
),
),
);
}
}
class PlayerExample extends StatefulWidget {
[@override](/user/override)
State<StatefulWidget> createState() {
return PlayerExampleState();
}
}
class PlayerExampleState extends State<PlayerExample> {
FTLPlayerController? livePlayerController;
[@override](/user/override)
void initState() {
super.initState();
FTLPlayer.init().then((value) {
this.livePlayerController = value;
this.setState(() {});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Column(
children: [
Padding(padding: EdgeInsets.only(top: 50)),
Container(height: 200, child: FTLPlayerWidget(this.livePlayerController)),
Padding(padding: EdgeInsets.only(top: 30)),
_optBtn()
],
),
),
);
}
Widget _optBtn() {
return Padding(
padding: const EdgeInsets.only(left: 45.0, right: 45.0, top: 0.0, bottom: 50.0),
child: Wrap(
children: [
CupertinoButton(
onPressed: () {
this.livePlayerController!.start("http://1011.hlsplay.aodianyun.com/demo/game.flv");
},
child: new Text("Start"),
),
CupertinoButton(
onPressed: () {
this.livePlayerController!.pause();
},
child: Text("pause"),
),
CupertinoButton(
onPressed: () {
this.livePlayerController!.resume();
},
child: new Text("resume"),
),
CupertinoButton(
onPressed: () {
this.livePlayerController!.dispose();
},
child: new Text("dispose"),
),
CupertinoButton(
onPressed: () {
this.livePlayerController!.pause();
Navigator.of(context).pushNamed("/page1").then((value) {
this.livePlayerController!.resume();
});
},
child: new Text("new page"),
)
],
),
);
}
}
更多关于Flutter媒体播放插件ftl_player的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter媒体播放插件ftl_player的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ftl_player
是一个用于 Flutter 的媒体播放插件,主要用于播放直播流媒体(如 RTMP、HLS 等)。以下是如何在 Flutter 项目中使用 ftl_player
的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 ftl_player
插件的依赖:
dependencies:
flutter:
sdk: flutter
ftl_player: ^0.0.1 # 请确保使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在需要使用 ftl_player
的 Dart 文件中导入插件:
import 'package:ftl_player/ftl_player.dart';
3. 创建播放器实例
创建一个 FtlPlayerController
实例来控制播放器。你可以在 initState
方法中初始化播放器:
class MyPlayer extends StatefulWidget {
[@override](/user/override)
_MyPlayerState createState() => _MyPlayerState();
}
class _MyPlayerState extends State<MyPlayer> {
FtlPlayerController _controller;
[@override](/user/override)
void initState() {
super.initState();
_controller = FtlPlayerController();
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Ftl Player'),
),
body: Center(
child: FtlPlayer(
controller: _controller,
),
),
);
}
}
4. 设置播放源
你可以使用 _controller.setDataSource
方法来设置播放源。例如,播放一个 RTMP 流:
[@override](/user/override)
void initState() {
super.initState();
_controller = FtlPlayerController();
_controller.setDataSource(
'rtmp://your-rtmp-server-url/live/stream',
autoPlay: true,
);
}
5. 控制播放器
你可以通过 FtlPlayerController
来控制播放器的行为,例如播放、暂停、停止等:
_controller.play(); // 播放
_controller.pause(); // 暂停
_controller.stop(); // 停止
6. 处理播放器状态
你可以监听播放器的状态变化,例如播放完成、播放错误等:
_controller.onPlayerStateChanged.listen((state) {
if (state == FtlPlayerState.COMPLETED) {
print('播放完成');
} else if (state == FtlPlayerState.ERROR) {
print('播放错误');
}
});
7. 自定义播放器UI
FtlPlayer
提供了基本的播放器界面,但你也可以根据需要自定义 UI。例如,添加播放/暂停按钮:
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Ftl Player'),
),
body: Column(
children: [
FtlPlayer(
controller: _controller,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.play_arrow),
onPressed: () => _controller.play(),
),
IconButton(
icon: Icon(Icons.pause),
onPressed: () => _controller.pause(),
),
],
),
],
),
);
}
8. 处理全屏播放
你还可以处理全屏播放的逻辑,例如通过 FtlPlayerController
的 setFullScreen
方法来切换全屏模式:
_controller.setFullScreen(true); // 进入全屏模式
_controller.setFullScreen(false); // 退出全屏模式
9. 处理播放器生命周期
确保在页面销毁时释放播放器资源,以避免内存泄漏:
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}