Flutter音频播放插件kdplayer的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter音频播放插件kdplayer的使用

获取开始

这个项目是一个新的Flutter插件包的起点,包括Android和/或iOS平台的具体实现代码。

对于如何开始使用Flutter,你可以查看我们的在线文档,其中包含教程、示例、移动开发指南以及完整的API参考。

使用kdplayer插件

以下是使用kdplayer插件的完整示例代码:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:kdplayer/kdplayer.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final Kdplayer _kdplayer = Kdplayer();
  bool isPlaying = false;
  double durationPlayer = 0.1;
  double currentPlayer = 0.0;
  List<String>? metadata;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlayer();
  }

  void initPlayer() {
    // 设置媒体项
    _kdplayer.setMediaItem('Radio Player',
        'https://www.bensound.com/bensound-music/bensound-ukulele.mp3');

    // 监听播放状态变化
    _kdplayer.stateStream.listen((value) {
      if (kDebugMode) {
        print(value);
      }
      setState(() {
        isPlaying = value;
      });
    });

    // 监听元数据变化
    _kdplayer.metadataStream.listen((value) {
      setState(() {
        metadata = value;
      });
    });

    // 监听当前播放位置
    _kdplayer.currentStream.listen((value) {
      if (kDebugMode) {
        print("currentStream: $value");
      }
      if (value < 0) return;
      setState(() {
        currentPlayer = value;
      });
    });

    // 监听总时长
    _kdplayer.durationtStream.listen((value) {
      if (kDebugMode) {
        print("durationtStream: $value");
      }
      setState(() {
        durationPlayer = value;
      });
    });
  }

  // 将毫秒数转换为时间格式
  String intToTimeLeft(double? value) {
    if (value == null || value == 0 || value.isNaN) {
      return '00:00';
    }
    var aaa = value / 1000;
    var h = (aaa ~/ 3600);
    var m = ((aaa - h * 3600)) ~/ 60;
    var s = (aaa - (h * 3600) - (m * 60)).toInt();

    String hourLeft = h.toString().length < 2 ? "0" + h.toString() : h.toString();

    String minuteLeft = m.toString().length < 2 ? "0" + m.toString() : m.toString();

    String secondsLeft = s.toString().length < 2 ? "0" + s.toString() : s.toString();

    String result = "$hourLeft:$minuteLeft:$secondsLeft";
    if (h == 0) {
      result = "$minuteLeft:$secondsLeft";
    }
    return result;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  IconButton(
                      onPressed: () {}, icon: const Icon(Icons.skip_previous)),
                  IconButton(
                      onPressed: () {
                        isPlaying ? _kdplayer.pause() : _kdplayer.play();
                      },
                      icon: isPlaying
                          ? const Icon(Icons.pause)
                          : const Icon(Icons.play_arrow)),
                  IconButton(
                      onPressed: () {}, icon: const Icon(Icons.skip_next)),
                ],
              ),
              Slider(
                value: currentPlayer,
                min: 0.0,
                max: durationPlayer,
                onChanged: (value) {
                  _kdplayer.setSeekTo(value);
                },
              ),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20.0),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(intToTimeLeft(currentPlayer)),
                    Text(intToTimeLeft(durationPlayer)),
                  ],
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 初始化播放器

    void initPlayer() {
      // 设置媒体项
      _kdplayer.setMediaItem('Radio Player',
          'https://www.bensound.com/bensound-music/bensound-ukulele.mp3');
    
  2. 监听播放状态

    _kdplayer.stateStream.listen((value) {
      if (kDebugMode) {
        print(value);
      }
      setState(() {
        isPlaying = value;
      });
    });
    
  3. 监听元数据

    _kdplayer.metadataStream.listen((value) {
      setState(() {
        metadata = value;
      });
    });
    
  4. 监听当前播放位置

    _kdplayer.currentStream.listen((value) {
      if (kDebugMode) {
        print("currentStream: $value");
      }
      if (value < 0) return;
      setState(() {
        currentPlayer = value;
      });
    });
    
  5. 监听总时长

    _kdplayer.durationtStream.listen((value) {
      if (kDebugMode) {
        print("durationtStream: $value");
      }
      setState(() {
        durationPlayer = value;
      });
    });
    
  6. 将毫秒数转换为时间格式

    String intToTimeLeft(double? value) {
      if (value == null || value == 0 || value.isNaN) {
        return '00:00';
      }
      var aaa = value / 1000;
      var h = (aaa ~/ 3600);
      var m = ((aaa - h * 3600)) ~/ 60;
      var s = (aaa - (h * 3600) - (m * 60)).toInt();
    
      String hourLeft = h.toString().length < 2 ? "0" + h.toString() : h.toString();
    
      String minuteLeft = m.toString().length < 2 ? "0" + m.toString() : m.toString();
    
      String secondsLeft = s.toString().length < 2 ? "0" + s.toString() : s.toString();
    
      String result = "$hourLeft:$minuteLeft:$secondsLeft";
      if (h == 0) {
        result = "$minuteLeft:$secondsLeft";
      }
      return result;
    }
    
  7. 构建UI

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: [
                    IconButton(
                        onPressed: () {}, icon: const Icon(Icons.skip_previous)),
                    IconButton(
                        onPressed: () {
                          isPlaying ? _kdplayer.pause() : _kdplayer.play();
                        },
                        icon: isPlaying
                            ? const Icon(Icons.pause)
                            : const Icon(Icons.play_arrow)),
                    IconButton(
                        onPressed: () {}, icon: const Icon(Icons.skip_next)),
                  ],
                ),
                Slider(
                  value: currentPlayer,
                  min: 0.0,
                  max: durationPlayer,
                  onChanged: (value) {
                    _kdplayer.setSeekTo(value);
                  },
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 20.0),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(intToTimeLeft(currentPlayer)),
                      Text(intToTimeLeft(durationPlayer)),
                    ],
                  ),
                )
              ],
            ),
          ),
        ),
      );
    }
    

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用kdplayer插件进行音频播放的代码示例。kdplayer是一个用于Flutter的音频播放插件,支持多种音频格式和播放控制功能。

首先,确保你已经在pubspec.yaml文件中添加了kdplayer依赖:

dependencies:
  flutter:
    sdk: flutter
  kdplayer: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,是一个简单的Flutter应用示例,演示如何使用kdplayer进行音频播放:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'KdPlayer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AudioPlayerScreen(),
    );
  }
}

class AudioPlayerScreen extends StatefulWidget {
  @override
  _AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}

class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
  KdPlayerController? _playerController;

  @override
  void initState() {
    super.initState();
    // 初始化KdPlayerController
    _playerController = KdPlayerController(
      audioUrl: 'https://www.example.com/audio/sample.mp3', // 替换为你的音频URL
      autoPlay: false, // 是否自动播放
      looping: false, // 是否循环播放
    );

    // 监听播放状态变化
    _playerController?.addListener(() {
      setState(() {});
    });
  }

  @override
  void dispose() {
    // 释放资源
    _playerController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('KdPlayer Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '播放状态: ${_playerController?.isPlaying == true ? '播放中' : '已暂停'}',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                if (_playerController?.isPlaying == true) {
                  _playerController?.pause();
                } else {
                  _playerController?.play();
                }
              },
              child: Text(_playerController?.isPlaying == true ? '暂停' : '播放'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _playerController?.stop();
              },
              child: Text('停止'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _playerController?.seek(Duration(seconds: 10)); // 跳转到10秒处
              },
              child: Text('跳转到10秒'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. 初始化KdPlayerController:在initState方法中,我们创建了一个KdPlayerController实例,并设置了音频URL、是否自动播放和是否循环播放。

  2. 监听播放状态:通过addListener方法监听播放状态的变化,以便在UI中更新播放状态。

  3. 播放控制:提供了播放、暂停、停止和跳转播放位置的功能按钮。

  4. 释放资源:在dispose方法中释放KdPlayerController资源,以避免内存泄漏。

请确保将音频URL替换为你自己的音频文件URL,并根据需要调整其他参数。这个示例应该能够帮助你快速上手kdplayer插件的使用。

回到顶部