当前位置: 首页 > article >正文

flutter执行Asset中的可执行文件

一、背景

之前做一个音视频合成的工具类,需要将ffmpeg打包进Asset中,但是没有很好的办法运行Asset中的ffmpeg。

二、实现

思路:获取系统临时目录,将ffmpeg从Asset中读取,然后写入到系统临时目录中再使用。

import 'dart:io';

import 'package:flutter/services.dart';

class FFmpegUtil {
  static final ffmpegExeFileName = Platform.isWindows ? 'ffmpeg.exe' : 'ffmpeg';
  static String? _ffmpegPath;

  static Future<void> init() async {
    final documentsDir = Directory.systemTemp;
    final ffmpegFile = File('${documentsDir.path}/$ffmpegExeFileName');
    final ffmpegBytes =
        await rootBundle.load('assets/ffmpeg/$ffmpegExeFileName');

    if (ffmpegFile.existsSync() &&
        ffmpegFile.lengthSync() == ffmpegBytes.buffer.lengthInBytes) {
      print('Will use existed ffmpeg file: $ffmpegFile');
      _ffmpegPath = ffmpegFile.path;
      return;
    }

    print('Will copy to ffmpeg file: $ffmpegFile');

    // 将 FFmpeg 可执行文件写入应用程序的文档目录
    await ffmpegFile.writeAsBytes(ffmpegBytes.buffer.asUint8List());

    // 设置文件权限为可执行
    if (Platform.isMacOS) {
      await Process.run('chmod', ['+x', ffmpegFile.path]);
    }
    _ffmpegPath = ffmpegFile.path;
  }
}

http://www.kler.cn/a/282349.html

相关文章:

  • WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇
  • 工化企业内部能源能耗过大 落实能源管理
  • 【Python · PyTorch】卷积神经网络(基础概念)
  • 整数唯一分解定理
  • 基于Java Web 的家乡特色菜推荐系统
  • Android Studio 控制台输出的中文显示乱码
  • PHP $_GET 变量
  • Oceanbase 使用OBD 一键性能测试(Sysbench,TPCC,TPCH)
  • Superset 连接elasticsearch
  • 深度学习基础—简单的卷积神经网络
  • OpenCV绘图函数(10)根据指定像素计算字体大小的函数getFontScaleFromHeight()的使用
  • 8月28日
  • 若依微服务Admin控制台不显示ruoyi-file问题解决
  • Mysql在服务器中的源码部署
  • Ps:渲染视频
  • 关于springboot对接chatglm3-6b大模型的尝试
  • 消息称华为纯血鸿蒙部分应用采用虚拟机方案
  • 三级_网络技术_53_应用题
  • pytorch Dataset类代码学习
  • 在PyCharm终端使用where命令不返回路径问题
  • 顶级域名服务器 - TLD服务器
  • RK方案有时一开机要设置GPIO口点平
  • Sentinel-1 Level 1数据处理的详细算法定义(九)
  • QT多线程遍历注册表
  • vray材质forC4D测试
  • Java相关工具/插件的安装教程汇总