Flutter音频流播放插件audio_streamer_ohos的使用
Flutter音频流播放插件audio_streamer_ohos的使用
audio_streamer_ohos
OpenHarmony 平台上用于播放 PCM 音频流的插件。
使用方法
dependencies:
audio_streamer: 4.1.1
audio_streamer_ohos: 0.0.2
更多细节请参考 audio_streamer
权限
在 OpenHarmony 项目的 module.json
文件中添加 ohos.permission.MICROPHONE
权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.MICROPHONE",
"reason": "Microphone permission is required to record audio."
}
]
}
}
示例代码
以下是一个完整的示例代码,展示了如何使用 audio_streamer_ohos
插件来录制和播放音频流。
import 'dart:math';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:audio_streamer/audio_streamer.dart';
import 'package:permission_handler/permission_handler.dart';
void main() => runApp(new AudioStreamingApp());
class AudioStreamingApp extends StatefulWidget {
[@override](/user/override)
AudioStreamingAppState createState() => new AudioStreamingAppState();
}
class AudioStreamingAppState extends State<AudioStreamingApp> {
int? sampleRate;
bool isRecording = false;
List<double> audio = [];
List<double>? latestBuffer;
double? recordingTime;
StreamSubscription<List<double>>? audioSubscription;
/// 检查麦克风权限是否已授予。
Future<bool> checkPermission() async => await Permission.microphone.isGranted;
/// 请求麦克风权限。
Future<void> requestPermission() async => await Permission.microphone.request();
/// 处理音频样本回调。
void onAudio(List<double> buffer) async {
audio.addAll(buffer);
// 获取实际采样率,如果尚未知道的话。
sampleRate ??= await AudioStreamer().actualSampleRate;
recordingTime = audio.length / sampleRate!;
setState(() => latestBuffer = buffer);
}
/// 错误处理回调。
void handleError(Object error) {
setState(() => isRecording = false);
print(error);
}
/// 开始音频采样。
void start() async {
// 检查是否可以使用麦克风。
if (!(await checkPermission())) {
await requestPermission();
}
// 设置采样率(仅在 Android 上有效)。
AudioStreamer().sampleRate = 22100;
// 开始监听音频流。
audioSubscription = AudioStreamer().audioStream.listen(onAudio, onError: handleError);
setState(() => isRecording = true);
}
/// 停止音频采样。
void stop() async {
audioSubscription?.cancel();
setState(() => isRecording = false);
}
[@override](/user/override)
Widget build(BuildContext context) => MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin: EdgeInsets.all(25),
child: Column(children: [
Container(
child: Text(isRecording ? "Mic: ON" : "Mic: OFF",
style: TextStyle(fontSize: 25, color: Colors.blue)),
margin: EdgeInsets.only(top: 20),
),
Text(''),
Text('Max amp: ${latestBuffer?.reduce(max)}'),
Text('Min amp: ${latestBuffer?.reduce(min)}'),
Text('${recordingTime?.toStringAsFixed(2)} seconds recorded.'),
])),
])),
floatingActionButton: FloatingActionButton(
backgroundColor: isRecording ? Colors.red : Colors.green,
child: isRecording ? Icon(Icons.stop) : Icon(Icons.mic),
onPressed: isRecording ? stop : start,
),
),
);
}
更多关于Flutter音频流播放插件audio_streamer_ohos的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频流播放插件audio_streamer_ohos的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
audio_streamer_ohos
是一个用于在 OpenHarmony(OHOS)平台上播放音频流的 Flutter 插件。以下是使用该插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 audio_streamer_ohos
插件的依赖:
dependencies:
flutter:
sdk: flutter
audio_streamer_ohos: ^0.0.1 # 请根据实际情况填写版本号
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 audio_streamer_ohos
插件:
import 'package:audio_streamer_ohos/audio_streamer_ohos.dart';
3. 初始化音频流
在需要播放音频的地方,初始化音频流:
AudioStreamer audioStreamer = AudioStreamer();
4. 播放音频
使用 play
方法播放音频流,传入音频流的 URL:
String audioUrl = "https://example.com/your-audio-file.mp3";
audioStreamer.play(audioUrl);
5. 暂停和恢复播放
你可以使用 pause
和 resume
方法来控制音频的播放状态:
audioStreamer.pause(); // 暂停播放
audioStreamer.resume(); // 恢复播放
6. 停止播放
使用 stop
方法停止播放:
audioStreamer.stop();
7. 释放资源
在不再需要播放器时,释放资源:
audioStreamer.release();
8. 处理播放状态
你可以监听播放状态的变化,例如播放完成、播放错误等:
audioStreamer.onPlayerStateChanged.listen((state) {
if (state == PlayerState.completed) {
print("播放完成");
} else if (state == PlayerState.error) {
print("播放错误");
}
});
9. 音量控制
你可以使用 setVolume
方法来调整音量:
audioStreamer.setVolume(0.5); // 设置音量为50%
10. 进度控制
你可以使用 seekTo
方法来跳转到指定时间点:
audioStreamer.seekTo(Duration(seconds: 30)); // 跳转到30秒
11. 获取当前播放位置
你可以使用 getCurrentPosition
方法来获取当前播放位置:
Duration position = await audioStreamer.getCurrentPosition();
print("当前播放位置: $position");
12. 获取音频总时长
你可以使用 getDuration
方法来获取音频的总时长:
Duration duration = await audioStreamer.getDuration();
print("音频总时长: $duration");
13. 处理错误
你可以监听错误事件来处理播放过程中可能出现的错误:
audioStreamer.onError.listen((error) {
print("播放错误: $error");
});
示例代码
以下是一个简单的示例代码,展示了如何使用 audio_streamer_ohos
插件播放音频流:
import 'package:flutter/material.dart';
import 'package:audio_streamer_ohos/audio_streamer_ohos.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: AudioPlayerScreen(),
);
}
}
class AudioPlayerScreen extends StatefulWidget {
[@override](/user/override)
_AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}
class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
AudioStreamer audioStreamer = AudioStreamer();
String audioUrl = "https://example.com/your-audio-file.mp3";
[@override](/user/override)
void initState() {
super.initState();
audioStreamer.onPlayerStateChanged.listen((state) {
if (state == PlayerState.completed) {
print("播放完成");
} else if (state == PlayerState.error) {
print("播放错误");
}
});
}
[@override](/user/override)
void dispose() {
audioStreamer.release();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('音频流播放器'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () => audioStreamer.play(audioUrl),
child: Text('播放'),
),
ElevatedButton(
onPressed: () => audioStreamer.pause(),
child: Text('暂停'),
),
ElevatedButton(
onPressed: () => audioStreamer.resume(),
child: Text('恢复'),
),
ElevatedButton(
onPressed: () => audioStreamer.stop(),
child: Text('停止'),
),
],
),
),
);
}
}