Flutter视频信息获取插件flutter_video_info的使用

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

Flutter视频信息获取插件flutter_video_info的使用

插件简介

pub package Platform

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

1 回复

更多关于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。

回到顶部