Flutter屏幕录制插件ed_screen_recorder_v3的使用
Flutter屏幕录制插件ed_screen_recorder_v3的使用
ED Flutter Screen Recorder
Screen recorder插件用于Flutter。支持iOS和Android设备。请注意,该插件在iOS模拟器上无法工作。
Ekler
android/app/build.gradle
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.github.HBiSoft:HBRecorder:2.0.3'
implementation 'androidx.appcompat:appcompat:1.4.1'
}
android/app/src/main/AndroidManifest.xml
xmlns:tools="http://schemas.android.com/tools"
package="com.example">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
在Info.plist中添加以下权限信息:
<key>NSPhotoLibraryUsageDescription</key>
<string>保存视频到相册</string>
<key>NSMicrophoneUsageDescription</key>
<string>将音频保存到视频中</string>
Usage/Examples
import 'dart:async';
import 'dart:developer';
import 'dart:io';
import 'package:ed_screen_recorder_v3/ed_screen_recorder.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
EdScreenRecorder? screenRecorder;
Map<String, dynamic>? _response;
bool inProgress = false;
[@override](/user/override)
void initState() {
super.initState();
screenRecorder = EdScreenRecorder();
}
Future<void> startRecord({required String fileName}) async {
Directory? tempDir = await getApplicationDocumentsDirectory();
String? tempPath = tempDir.path;
try {
var startResponse = await screenRecorder?.startRecordScreen(
fileName: "Eren",
// 可选。如果你给定了文件路径,视频将保存在那里。
// 如果留空,则Android操作系统会将其保存到图库。
dirPathToSave: tempPath,
audioEnable: false,
);
setState(() {
_response = startResponse;
});
try {
screenRecorder?.watcher?.events.listen(
(event) {
log(event.type.toString(), name: "Event: ");
},
onError: (e) => kDebugMode ? debugPrint('ERROR ON STREAM: $e') : null,
onDone: () => kDebugMode ? debugPrint('Watcher closed!') : null,
);
} catch (e) {
kDebugMode ? debugPrint('ERROR WAITING FOR READY: $e') : null;
}
} on PlatformException {
kDebugMode
? debugPrint("Error: An error occurred while starting the recording!")
: null;
}
}
Future<void> stopRecord() async {
try {
var stopResponse = await screenRecorder?.stopRecord();
setState(() {
_response = stopResponse;
});
} on PlatformException {
kDebugMode
? debugPrint("Error: An error occurred while stopping recording.")
: null;
}
}
Future<void> pauseRecord() async {
try {
await screenRecorder?.pauseRecord();
} on PlatformException {
kDebugMode
? debugPrint("Error: An error occurred while pause recording.")
: null;
}
}
Future<void> resumeRecord() async {
try {
await screenRecorder?.resumeRecord();
} on PlatformException {
kDebugMode
? debugPrint("Error: An error occurred while resume recording.")
: null;
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("屏幕录制调试"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("文件: ${(_response?['file'] as File?)?.path}"),
Text("状态: ${(_response?['success']).toString()}"),
Text("事件: ${_response?['eventname']}"),
Text("进度: ${(_response?['progressing']).toString()}"),
Text("消息: ${_response?['message']}"),
Text("视频哈希: ${_response?['videohash']}"),
Text("开始日期: ${(_response?['startdate']).toString()}"),
Text("结束日期: ${(_response?['enddate']).toString()}"),
ElevatedButton(
onPressed: () => startRecord(fileName: "eren"),
child: const Text('开始录制')),
ElevatedButton(
onPressed: () => resumeRecord(),
child: const Text('恢复录制')),
ElevatedButton(
onPressed: () => pauseRecord(),
child: const Text('暂停录制')),
ElevatedButton(
onPressed: () => stopRecord(),
child: const Text('停止录制')),
],
),
),
);
}
}
更多关于Flutter屏幕录制插件ed_screen_recorder_v3的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter屏幕录制插件ed_screen_recorder_v3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ed_screen_recorder_v3
是一个 Flutter 插件,用于在 Android 和 iOS 设备上进行屏幕录制。以下是如何使用该插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 ed_screen_recorder_v3
插件的依赖:
dependencies:
flutter:
sdk: flutter
ed_screen_recorder_v3: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Dart 文件中导入插件并进行初始化:
import 'package:ed_screen_recorder_v3/ed_screen_recorder.dart';
final EdScreenRecorder screenRecorder = EdScreenRecorder();
3. 开始录制
使用 startRecordScreen
方法开始屏幕录制。你需要提供一个文件名(可选)和录制完成后的回调函数。
void startRecording() async {
try {
await screenRecorder.startRecordScreen(
"MyRecording", // 文件名(可选)
onRecordComplete: (String path) {
print("Recording completed and saved at: $path");
},
onRecordError: (String error) {
print("Error occurred while recording: $error");
},
);
print("Recording started");
} catch (e) {
print("Failed to start recording: $e");
}
}
4. 停止录制
使用 stopRecordScreen
方法停止录制:
void stopRecording() async {
try {
await screenRecorder.stopRecordScreen();
print("Recording stopped");
} catch (e) {
print("Failed to stop recording: $e");
}
}
5. 处理权限
在 Android 和 iOS 上,屏幕录制需要特定的权限。确保你已在应用中请求了这些权限。
Android
在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<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_MEDIA_PROJECTION" />
iOS
在 Info.plist
中添加以下权限:
<key>NSMicrophoneUsageDescription</key>
<string>We need access to the microphone to record audio.</string>
<key>NSCameraUsageDescription</key>
<string>We need access to the camera to record video.</string>
6. 处理用户界面
你可以使用按钮或其他 UI 元素来触发开始和停止录制的操作:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Screen Recorder'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: startRecording,
child: Text('Start Recording'),
),
ElevatedButton(
onPressed: stopRecording,
child: Text('Stop Recording'),
),
],
),
),
),
);
}
}