Flutter音频播放之just_audio

简介: Flutter音频播放之just_audio

just_audio的使用

just_audio,它是一个用于播放音频的 Flutter 插件。

安装和导入 just_audio

要使用 just_audio 库,需要将其添加到项目的 pubspec.yaml 文件中

dependencies:
   just_audio: ^0.9.34

然后运行以下命令以安装该库:

flutter pub get

要使用 just_audio,需要在代码中导入它:

import 'package:just_audio/just_audio.dart';

播放本地音频文件

要播放本地音频文件,需要创建 AudioPlayer 对象并调用 setFilePath 方法将音频文件的路径传递给它。

以下是一个简单的示例代码,演示了如何使用 just_audio 播放本地音频文件

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  @override
  void initState() {
    super.initState();
    _player.setFilePath('assets/audio/sample.mp3');
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setFilePath 方法,将本地音频文件的路径传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放网络音频文件

要播放网络音频文件,需要调用 setUrl 方法将音频文件的 URL 传递给 AudioPlayer 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放网络音频文件:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3';
  @override
  void initState() {
    super.initState();
    _player.setUrl(_url);
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setUrl 方法,将网络音频文件的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放音频流

要播放音频流,需要创建一个 AudioPlayer 对象,并调用 setAudioSource 方法来设置音频源。setAudioSource 方法可以接收多种参数类型,包括本地文件路径、网络 URL、DASH/HLS URL、以及自定义的 AudioSource 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频流:

import'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://stream.radio.co/sb8ebfa4b0/listen';
  @override
  void initState() {
    super.initState();
    _player.setAudioSource(AudioSource.uri(Uri.parse(_url)));
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setAudioSource 方法,将音频流的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放音频列表

要播放音频列表,需要创建一个包含多个音频源的 ConcatenatingAudioSource 对象,并将其传递给 AudioPlayer 对象的 setAudioSource 方法。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频列表:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _playlist = ConcatenatingAudioSource(children: [
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3')),
  ]);
  @override
  void initState() {
    super.initState();
    _player.setAudioSource(_playlist);
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并创建了一个包含三个音频源的 ConcatenatingAudioSource 对象 _playlist。在 initState 方法中,我们调用了 _player.setAudioSource(_playlist) 方法,将音频列表传递给 _player 对象。在 build 方法中,我们创建了两个按钮,一个用于播放音频列表,另一个用于暂停音频列表。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频列表。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频列表。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


相关文章
|
缓存 Linux Android开发
Flutter音乐播放audioplayers
Flutter音乐播放audioplayers
|
3月前
|
编解码 Dart 网络协议
Flutter如何玩转超低延迟RTSP/RTMP播放,跨平台视频流体验大升级,让你的应用秒变直播神器!
【9月更文挑战第3天】Flutter作为谷歌推出的跨平台移动UI框架,凭借高性能和丰富的生态系统广受好评。本文详细介绍如何在Flutter应用中实现低延迟的跨平台RTSP/RTMP播放,并提供具体示例代码。首先介绍了如何使用`flutter_vlc_player`播放RTSP流,然后讨论了优化视频播放以降低延迟的方法,包括调整播放器配置等。通过选用合适的播放器插件并进行优化,Flutter可在视频流播放领域提供卓越的用户体验。随着生态的发展,Flutter有望成为视频流媒体开发的首选框架。
338 6
|
4月前
|
编解码 Dart 网络协议
"震撼揭秘!Flutter如何玩转超低延迟RTSP/RTMP播放,跨平台视频流体验大升级,让你的应用秒变直播神器!"
【8月更文挑战第15天】Flutter作为跨平台UI框架,以其高效性和丰富生态著称。本文详述如何利用flutter_vlc_player等插件在Flutter中实现低延迟RTSP/RTMP播放,并提供代码示例。通过优化播放器设置,如禁用缓冲、启用帧丢弃等,可进一步减少延迟,提升用户观看体验,展现了Flutter在视频流媒体应用中的强大潜力。
95 0
|
编解码 开发工具 Android开发
Flutter下实现低延迟的跨平台RTSP/RTMP播放
为什么要用Flutter? Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
475 0
Flutter的AspectRatio控件实现视频播放、图片播放按照长宽比缩放
Flutter的AspectRatio控件实现视频播放、图片播放按照长宽比缩放
|
网络协议 开发工具 Android开发
Flutter下实现低延迟的跨平台RTSP/RTMP播放
为什么要用Flutter? Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
5114 0
|
2月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
|
8天前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
22 2
|
2月前
|
开发者
鸿蒙Flutter实战:07-混合开发
鸿蒙Flutter混合开发支持两种模式:1) 基于har包,便于主项目开发者无需关心Flutter细节,但不支持热重载;2) 基于源码依赖,利于代码维护与热重载,需配置Flutter环境。项目结构包括AppScope、flutter_module等目录,适用于不同开发需求。
80 3
|
26天前
|
传感器 开发框架 物联网
鸿蒙next选择 Flutter 开发跨平台应用的原因
鸿蒙(HarmonyOS)是华为推出的一款旨在实现多设备无缝连接的操作系统。为了实现这一目标,鸿蒙选择了 Flutter 作为主要的跨平台应用开发框架。Flutter 的跨平台能力、高性能、丰富的生态支持和与鸿蒙系统的良好兼容性,使其成为理想的选择。通过 Flutter,开发者可以高效地构建和部署多平台应用,推动鸿蒙生态的快速发展。
170 0