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

1 回复

更多关于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. 处理全屏播放

你还可以处理全屏播放的逻辑,例如通过 FtlPlayerControllersetFullScreen 方法来切换全屏模式:

_controller.setFullScreen(true);  // 进入全屏模式
_controller.setFullScreen(false); // 退出全屏模式

9. 处理播放器生命周期

确保在页面销毁时释放播放器资源,以避免内存泄漏:

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