Flutter视频信息获取插件flutter_video_info的使用
Flutter视频信息获取插件flutter_video_info的使用
插件简介
flutter_video_info
插件通过原生 Android 的 MediaMetadataRetriever
类来获取视频文件的基本元数据信息。该插件支持以下平台:
- Android
- iOS
支持提取的信息包括:
title
: 视频标题path
: 视频路径author
: 作者mimetype
: MIME类型height
: 高度width
: 宽度filesize
: 文件大小duration
: 持续时间(毫秒)orientation
: 方向date
: 日期framerate
: 帧率location
: 地理位置
安装与使用
1. 添加依赖
在 pubspec.yaml
文件中添加 flutter_video_info
依赖:
dependencies:
flutter_video_info: ^1.3.1
2. 导入库
在 Dart 文件中导入 flutter_video_info
:
import 'package:flutter_video_info/flutter_video_info.dart';
3. 使用示例代码
下面是一个完整的示例代码,展示了如何使用 flutter_video_info
插件来获取视频信息:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_video_info/flutter_video_info.dart';
import 'package:permission_handler/permission_handler.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final videoInfo = FlutterVideoInfo();
String info = "";
String videoFilePath = "";
// 请求外部存储权限
getExternalStoragePermission() async {
Map<Permission, PermissionStatus> statuses = await [
Permission.videos,
Permission.photos,
Permission.storage,
].request();
}
@override
void initState() {
if (Platform.isAndroid) {
getExternalStoragePermission();
}
super.initState();
}
// 获取视频信息
getVideoInfo() async {
if (Platform.isIOS) {
videoFilePath =
"/Users/User/Library/Developer/CoreSimulator/Devices/6A0D4244-1DEB-49C3-9837-C08E19DAED31/data/Media/DCIM/100APPLE/IMG_0011.mp4";
} else if (Platform.isAndroid) {
videoFilePath = "storage/emulated/0/Geocam/Videos/4.mp4";
}
var a = await videoInfo.getVideoInfo(videoFilePath);
setState(() {
info =
"title=> ${a?.title}\npath=> ${a?.path}\nauthor=> ${a?.author}\nmimetype=> ${a?.mimetype}";
info +=
"\nheight=> ${a?.height}\nwidth=> ${a?.width}\nfileSize=> ${a?.filesize} Bytes\nduration=> ${a?.duration} milisec";
info +=
"\norientation=> ${a?.orientation}\ndate=> ${a?.date}\nframerate=> ${a?.framerate}";
info += "\nlocation=> ${a?.location}";
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
floatingActionButton: FloatingActionButton.extended(
backgroundColor: Colors.white,
label: Text(
"Get Info",
style: TextStyle(color: Colors.black),
),
icon: Icon(
Icons.video_call_outlined,
color: Colors.purple,
),
onPressed: () {
getVideoInfo();
}),
appBar: AppBar(
centerTitle: true,
backgroundColor: Colors.purple,
title: const Text('Video Info'),
),
body: Padding(
padding: const EdgeInsets.all(30.0),
child: Center(
child: Text(
info,
style: TextStyle(fontSize: 21),
),
),
),
),
);
}
}
iOS 特别注意
如果你的应用需要从相册选择视频,请确保在 ios/Runner/Info.plist
文件中添加以下键值对:
<key>NSPhotoLibraryUsageDescription</key>
<string>描述为什么你的应用需要访问相册</string>
这被称为“隐私 - 相册使用说明”在 Xcode 的可视化编辑器中。
故障排除
如果遇到问题,可以参考 Troubleshooting 文档。
欢迎贡献
欢迎提交 PR 来改进此插件。当前的 issues 列表 中有一些待解决的问题,感谢所有贡献者的帮助!
希望这篇文档对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter视频信息获取插件flutter_video_info的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter视频信息获取插件flutter_video_info的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_video_info
插件来获取视频信息的 Flutter 代码示例。这个插件允许你获取视频文件的元数据,如时长、分辨率、比特率等。
首先,你需要在你的 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_video_info: ^x.y.z # 请将 x.y.z 替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,在你的 Dart 文件中使用 flutter_video_info
插件。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:flutter_video_info/flutter_video_info.dart';
import 'dart:io';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: VideoInfoScreen(),
);
}
}
class VideoInfoScreen extends StatefulWidget {
@override
_VideoInfoScreenState createState() => _VideoInfoScreenState();
}
class _VideoInfoScreenState extends State<VideoInfoScreen> {
VideoInfo? videoInfo;
String? errorMessage;
void _getVideoInfo(File file) async {
try {
videoInfo = await FlutterVideoInfo.videoInfo(file.path);
setState(() {});
} catch (e) {
errorMessage = e.toString();
setState(() {});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Video Info Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
ElevatedButton(
onPressed: () async {
// 在这里选择一个视频文件,例如使用文件选择器插件
// 这里为了简化,假设你已经有了一个 File 对象
File file = File('/path/to/your/video.mp4');
_getVideoInfo(file);
},
child: Text('Get Video Info'),
),
if (errorMessage != null)
Text(
'Error: $errorMessage',
style: TextStyle(color: Colors.red),
),
if (videoInfo != null)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Duration: ${videoInfo!.duration.inSeconds} seconds'),
Text('Width: ${videoInfo!.width} pixels'),
Text('Height: ${videoInfo!.height} pixels'),
Text('Bitrate: ${videoInfo!.bitrate} kbps'),
Text('Rotation: ${videoInfo!.rotation} degrees'),
],
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个按钮用于获取视频信息。点击按钮后,它会尝试读取指定路径的视频文件的元数据,并在屏幕上显示这些信息。
请注意,实际使用时,你可能需要使用文件选择器插件(如 file_picker
)来让用户选择一个视频文件,而不是硬编码文件路径。
确保你在实际项目中处理文件路径和错误情况,并根据需要调整 UI。