Flutter音频流处理插件flutter_audio_streaming的使用
Flutter音频流处理插件flutter_audio_streaming的使用
flutter_audio_streaming
是一个用于通过RTMP录制或流式传输音频的 Flutter 插件。
开始使用
对于 Android 平台,我使用了 rtmp-rtsp-stream-client-java
。对于 iOS 平台,我使用了 HaishinKit.swift
。
功能特性
- 推送 RTMP 音频
- 录制音频(开发模式)
安装
首先,在你的 pubspec.yaml
文件中添加 flutter_audio_streaming
作为依赖项。
iOS 配置
在 ios/Runner/Info.plist
文件中添加两行:
- 一行带有键
Privacy - Camera Usage Description
和描述。 - 另一行带有键
Privacy - Microphone Usage Description
和描述。
或者以文本格式添加以下键:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>UIBackgroundModes</key>
<array>
<string>processing</string>
</array>
<key>NSMicrophoneUsageDescription</key>
<string>App requires access to the microphone for live streaming feature.</string>
Android 配置
在 android/app/build.gradle
文件中将最小 Android SDK 版本改为 21 或更高版本:
minSdkVersion 21
还需要在打包选项中排除一个文件,否则 Gradle 在构建时会报错:
packagingOptions {
exclude 'project.clj'
}
示例代码
以下是完整的示例代码,展示了如何使用 flutter_audio_streaming
插件进行音频流处理。
import 'package:flutter/material.dart';
import 'streaming.dart';
import 'streaming_and_record.dart';
Future<void> main() async {
runApp(App());
}
class App extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Home(),
);
}
}
class Home extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.multitrack_audio_outlined),
const SizedBox(
width: 4,
),
Text(
"Recording",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
)
],
)),
const SizedBox(
height: 24,
),
ElevatedButton(
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (_) => StreamingExample())),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.audiotrack_rounded),
const SizedBox(
width: 4,
),
Text(
"Streaming",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
)
],
)),
const SizedBox(
height: 24,
),
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (_) => StreamingAndRecordExample())),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.audiotrack_rounded),
Icon(Icons.multitrack_audio_outlined),
const SizedBox(
width: 4,
),
Text(
"Streaming And Record",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
)
],
))
],
),
));
}
}
更多关于Flutter音频流处理插件flutter_audio_streaming的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频流处理插件flutter_audio_streaming的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用flutter_audio_streaming
插件进行音频流处理的示例代码。这个插件允许你实时录制和处理音频数据。请确保你已经在pubspec.yaml
文件中添加了flutter_audio_streaming
依赖,并运行了flutter pub get
。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
flutter_audio_streaming: ^0.8.0 # 请确保版本号是最新的
2. 配置权限
在Android的AndroidManifest.xml
中添加录音权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
在iOS的Info.plist
中添加麦克风使用描述:
<key>NSMicrophoneUsageDescription</key>
<string>App needs access to microphone to record audio</string>
3. 使用flutter_audio_streaming
插件
以下是一个简单的Flutter应用示例,展示了如何使用flutter_audio_streaming
插件来录制和处理音频数据:
import 'package:flutter/material.dart';
import 'package:flutter_audio_streaming/flutter_audio_streaming.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AudioStreamingExample(),
);
}
}
class AudioStreamingExample extends StatefulWidget {
@override
_AudioStreamingExampleState createState() => _AudioStreamingExampleState();
}
class _AudioStreamingExampleState extends State<AudioStreamingExample> {
FlutterAudioStreaming? _audioStreaming;
bool _isRecording = false;
@override
void initState() {
super.initState();
_audioStreaming = FlutterAudioStreaming();
// 配置音频参数
_audioStreaming?.configure(
AudioSessionConfiguration(
android: AndroidAudioSessionConfiguration(
audioManager: AudioManager.STREAM_MUSIC,
audioAttributes: AudioAttributes.USAGE_MEDIA,
),
ios: IosAudioSessionConfiguration(
category: AVAudioSessionCategoryPlayAndRecord,
mode: AVAudioSessionModeDefault,
options: [AVAudioSessionCategoryOptionMixWithOthers, AVAudioSessionCategoryOptionDuckOthers],
),
),
);
// 设置音频数据回调
_audioStreaming?.setAudioDataCallback((data, duration) {
// 在这里处理音频数据
// data 是 PCM 数据,duration 是数据的时长(毫秒)
print('Received audio data: $data with duration: $duration ms');
});
}
@override
void dispose() {
_audioStreaming?.stop();
_audioStreaming?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Audio Streaming Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
if (!_isRecording) {
await _audioStreaming?.start();
setState(() {
_isRecording = true;
});
} else {
await _audioStreaming?.stop();
setState(() {
_isRecording = false;
});
}
},
child: Text(_isRecording ? 'Stop Recording' : 'Start Recording'),
),
),
);
}
}
4. 运行应用
确保你的设备或模拟器有麦克风权限,然后运行应用。点击按钮开始或停止录音,音频数据将通过回调方法实时获取。
这个示例展示了如何配置音频会话、启动和停止录音以及处理音频数据。你可以根据需要对音频数据进行进一步的处理,比如保存到文件、进行实时分析等。