Flutter屏幕录制插件ldev_screen_recording的使用

Flutter屏幕录制插件ldev_screen_recording的使用

flutter_screen_recording

这是一个用于在Flutter应用中录制屏幕的新插件。该插件要求Android SDK版本为21及以上,iOS系统版本为10及以上。


开始使用

1. 开始录制

bool started = FlutterScreenRecording.startRecordScreen(videoName);

或者

bool started = FlutterScreenRecording.startRecordScreenAndAudio(videoName);

上述代码中的videoName是用户定义的视频文件名。

2. 停止录制

String path = FlutterScreenRecording.stopRecordScreen;

path变量将包含录制完成后的视频文件路径。


Android配置

此插件本身不需要请求权限,但为了确保功能正常运行,建议使用permission_handler插件来管理权限。你需要在AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

此外,在AndroidManifest.xml<application>标签内添加以下服务配置:

<service
    android:name="com.foregroundservice.ForegroundService"
    android:foregroundServiceType="mediaProjection">
</service>

iOS配置

Info.plist文件中添加以下权限描述信息:

<key>NSPhotoLibraryUsageDescription</key>
<string>Save video in gallery</string>
<key>NSMicrophoneUsageDescription</key>
<string>Save audio in video</string>

Web支持

从版本2.0.0开始,该插件支持Web平台。


完整示例Demo

以下是一个完整的Flutter屏幕录制示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenRecordingPage(),
    );
  }
}

class ScreenRecordingPage extends StatefulWidget {
  [@override](/user/override)
  _ScreenRecordingPageState createState() => _ScreenRecordingPageState();
}

class _ScreenRecordingPageState extends State<ScreenRecordingPage> {
  String _status = "未开始";
  String _videoPath = "";

  // 开始录制
  void _startRecording() async {
    bool started = await FlutterScreenRecording.startRecordScreen("test_video");
    if (started) {
      setState(() {
        _status = "正在录制";
      });
    } else {
      setState(() {
        _status = "录制失败";
      });
    }
  }

  // 停止录制
  void _stopRecording() async {
    String path = await FlutterScreenRecording.stopRecordScreen;
    setState(() {
      _videoPath = path;
      _status = "录制完成";
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("屏幕录制示例"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_status),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _startRecording,
              child: Text("开始录制"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _stopRecording,
              child: Text("停止录制"),
            ),
            SizedBox(height: 20),
            Text("录制路径: $_videoPath"),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter屏幕录制插件ldev_screen_recording的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


ldev_screen_recording 是一个用于在 Flutter 应用中实现屏幕录制的插件。它允许开发者捕获设备的屏幕内容并将其保存为视频文件。以下是如何在 Flutter 项目中使用 ldev_screen_recording 插件的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 ldev_screen_recording 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  ldev_screen_recording: ^1.0.0 # 请使用最新版本

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

2. 配置 Android 和 iOS 项目

由于屏幕录制涉及到系统权限,你需要在 Android 和 iOS 项目中配置相应的权限。

Android

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

iOS

Info.plist 文件中添加以下权限:

<key>NSMicrophoneUsageDescription</key>
<string>We need access to the microphone to record audio.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to the photo library to save the recorded video.</string>

3. 使用插件

在 Flutter 代码中,你可以使用 ldev_screen_recording 插件来开始和停止屏幕录制。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenRecordingDemo(),
    );
  }
}

class ScreenRecordingDemo extends StatefulWidget {
  [@override](/user/override)
  _ScreenRecordingDemoState createState() => _ScreenRecordingDemoState();
}

class _ScreenRecordingDemoState extends State<ScreenRecordingDemo> {
  bool _isRecording = false;
  String _filePath = '';

  void _startRecording() async {
    if (!_isRecording) {
      bool hasPermission = await LdevScreenRecording.checkPermission();
      if (hasPermission) {
        String filePath = await LdevScreenRecording.startRecording();
        setState(() {
          _isRecording = true;
          _filePath = filePath;
        });
      } else {
        // Handle permission denied
      }
    }
  }

  void _stopRecording() async {
    if (_isRecording) {
      await LdevScreenRecording.stopRecording();
      setState(() {
        _isRecording = false;
      });
      // You can now use _filePath to access the recorded video
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Recording Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_isRecording ? 'Recording...' : 'Not Recording'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isRecording ? _stopRecording : _startRecording,
              child: Text(_isRecording ? 'Stop Recording' : 'Start Recording'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部