Flutter社交媒体录制插件social_media_recorder的使用

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

Flutter社交媒体录制插件social_media_recorder的使用

social_media_recorder 是一个适用于Flutter的音频录制插件,支持Android和iOS平台。它提供了通过按钮开始和停止录音的功能,类似于社交媒体应用中的语音消息录制按钮。

功能特性

  • 支持多种音频编码格式。
  • 可以设置最大录音时长。
  • 提供回调函数用于处理录音开始、结束等事件。

视频演示

视频演示

界面截图

界面截图

配置指南

Android配置

AndroidManifest.xml文件中添加如下权限声明:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
        ...
        android:requestLegacyExternalStorage="true">

最低SDK版本为16(如果使用OPUS编码则需要29)。

iOS配置

Info.plist文件中添加麦克风访问描述:

<key>NSMicrophoneUsageDescription</key>
<string>We need to access to the microphone to record audio file</string>

同时,在ios/Podfile文件中添加以下内容以确保正确编译:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
         '$(inherited)',

         ## dart: PermissionGroup.microphone
         'PERMISSION_MICROPHONE=1',
       ]
    end
  end
end

最低iOS SDK版本为8.0(如果使用OPUS编码则需要11.0)。

支持的编码器

以下是social_media_recorder支持的音频编码器枚举:

enum AudioEncoder {
  /// Will output to MPEG_4 format container
  AAC,

  /// Will output to MPEG_4 format container
  AAC_LD,

  /// Will output to MPEG_4 format container
  AAC_HE,

  /// sampling rate should be set to 8kHz
  /// Will output to 3GP format container on Android
  AMR_NB,

  /// sampling rate should be set to 16kHz
  /// Will output to 3GP format container on Android
  AMR_WB,

  /// Will output to MPEG_4 format container
  /// /!\ SDK 29 on Android /!\
  /// /!\ SDK 11 on iOs /!\
  OPUS,
}

更多关于编码器的信息可以参考官方文档:

使用示例

下面是一个完整的示例代码,展示了如何在Flutter项目中集成并使用social_media_recorder插件。

import 'package:flutter/material.dart';
import 'package:social_media_recorder/audio_encoder_type.dart';
import 'package:social_media_recorder/screen/social_media_recorder.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowMaterialGrid: false,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);
  
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Social Media Recorder Example'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.only(top: 140, left: 4, right: 4),
          child: Align(
            alignment: Alignment.centerRight,
            child: SocialMediaRecorder(
              maxRecordTimeInSecond: 10, // 设置最大录音时间为10秒
              startRecording: () {
                print("开始录音...");
              },
              stopRecording: (time) {
                print("录音结束,时长:$time 秒");
              },
              sendRequestFunction: (soundFile, time) {
                print("录音文件路径:${soundFile.path},时长:$time 秒");
              },
              encode: AudioEncoderType.AAC, // 使用AAC编码
            ),
          ),
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个简单的Flutter应用程序,其中包含了一个SocialMediaRecorder小部件。当用户点击录音按钮时,会触发相应的回调函数,并且可以在控制台输出相关信息。此外,还设置了最大录音时间为10秒,并选择了AAC作为默认的音频编码格式。

希望这篇教程能帮助你更好地理解和使用social_media_recorder插件!如果有任何问题或建议,请随时提问。


更多关于Flutter社交媒体录制插件social_media_recorder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交媒体录制插件social_media_recorder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter的social_media_recorder插件来录制视频的示例代码。这个插件允许你在Flutter应用中录制视频和音频。以下是一个简单的示例,展示了如何集成和使用该插件。

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

dependencies:
  flutter:
    sdk: flutter
  social_media_recorder: ^latest_version  # 请替换为最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用social_media_recorder插件:

  1. 导入插件
import 'package:social_media_recorder/social_media_recorder.dart';
  1. 初始化插件

在你的主文件(通常是main.dart)中,初始化SocialMediaRecorder

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SocialMediaRecorder
  final SocialMediaRecorder recorder = SocialMediaRecorder();
  
  // 检查并请求权限(可选,但推荐)
  await recorder.requestPermissions();

  runApp(MyApp());
}
  1. 创建录制界面

在你的UI文件中,添加录制按钮和显示预览的组件。

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Social Media Recorder Demo'),
        ),
        body: RecorderScreen(),
      ),
    );
  }
}

class RecorderScreen extends StatefulWidget {
  @override
  _RecorderScreenState createState() => _RecorderScreenState();
}

class _RecorderScreenState extends State<RecorderScreen> {
  late SocialMediaRecorder recorder;
  CameraController? cameraController;
  bool isRecording = false;

  @override
  void initState() {
    super.initState();
    recorder = SocialMediaRecorder();
    initializeCamera();
  }

  Future<void> initializeCamera() async {
    // 初始化相机控制器(注意:这里需要处理相机权限和选择相机等逻辑)
    // 这里只是一个简单示例,实际使用中需要更详细的错误处理和权限请求
    cameraController = await recorder.initializeCamera();
    cameraController?.startPreview();
    if (mounted) {
      setState(() {});
    }
  }

  Future<void> startRecording() async {
    if (!isRecording) {
      setState(() {
        isRecording = true;
      });
      String? filePath = await recorder.startRecording(
        cameraController!,
        videoQuality: VideoQuality.HD_720p,
      );
      // 这里可以保存filePath到某个地方,以便后续使用
      print('Recording started. File will be saved at: $filePath');
    }
  }

  Future<void> stopRecording() async {
    if (isRecording) {
      File? videoFile = await recorder.stopRecording(cameraController!);
      setState(() {
        isRecording = false;
      });
      // 处理录制的视频文件,比如保存到服务器或显示给用户
      print('Recording stopped. Video saved at: ${videoFile?.path}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        if (cameraController?.value.isInitialized ?? false)
          AspectRatio(
            aspectRatio: cameraController!.value.aspectRatio,
            child: CameraPreview(cameraController!),
          ),
        Positioned(
          bottom: 20,
          left: 20,
          child: ElevatedButton(
            onPressed: isRecording ? stopRecording : startRecording,
            child: Text(isRecording ? 'Stop Recording' : 'Start Recording'),
          ),
        ),
      ],
    );
  }

  @override
  void dispose() {
    cameraController?.dispose();
    super.dispose();
  }
}

这个示例展示了如何初始化SocialMediaRecorder,请求相机权限,开始和停止视频录制,并在UI中显示相机预览。注意,实际应用中需要更详细的错误处理和权限管理逻辑。

另外,由于social_media_recorder插件可能会随版本更新而变化,因此建议查阅最新的官方文档和示例代码以确保兼容性和最佳实践。

回到顶部