iOS 集成ffmpeg

前言

本来打算用flutter去实现一个ffmpeg的项目的,不过仔细分析了一下,我后期需要集成OpenGL ES做视频渲染处理,OpenGL ES的使用目前在flutter上面还不是很成熟,所以最后还是选择用原生来开发

ffmpeg集成到iOS工程

iOS对于ffmpeg的使用,看了网上,很多人说自己去编译ffmpeg源码,弄了半天,没弄好,放弃了,直接使用现成的第三方库 ffmpeg-kit-ios-full-gpl

这是我工程的Podfile文件

platform:ios,'13.0'target 'ffmpeg03' do
pod 'ffmpeg-kit-ios-full-gpl', '6.0'end

遇到的问题

集成上面的裤,pod install之后,工程是运行不起来的,会报下面的错误:

Sandbox: rsync(31518) deny(1) file-write-create

解决方法 

方法一:修改Targets -> Build Settings 中 ENABLE_USER_SCRIPT_SANDBOXING 设置 NO

image.png

方法二:项目使用cocoaPods进行三方管理 且 使用了 use_frameworks,把 use_frameworks 注释掉,重新pod install 然后运行

platform:ios,'13.0'target 'ffmpeg03' do
pod 'ffmpeg-kit-ios-full-gpl', '6.0'end

编译通过

测试

工程目录:

 项目代码

实现一个视频从mp4转avi

import ffmpegkit
import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()}override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {convertVideoFormat()}func convertVideoFormat() {// 获取输入文件路径guard let inputFile = Bundle.main.path(forResource: "12345", ofType: "mp4") else {print("未找到输入文件")return}// 设置输出文件路径let documentsDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]let outputFile = "\(documentsDir)/output.avi"// 构建 FFmpeg 命令let ffmpegCommand = "-i \"\(inputFile)\" -c:v libx264 -c:a aac \"\(outputFile)\""print("执行的命令:ffmpeg \(ffmpegCommand)")// 执行转换FFmpegKit.executeAsync(ffmpegCommand) { session inlet state = session?.getState()let returnCode = session?.getReturnCode()print("Return Code:\(String(describing: returnCode))")if ReturnCode.isSuccess(returnCode) {// 转换成功print("视频转换成功!输出文件位于:\(outputFile)")DispatchQueue.main.async {// 在主线程中更新 UI 或进行下一步操作}} else {// 转换失败if let output = session?.getAllLogsAsString() {print("转换失败,输出日志:\n\(output)")}if let failStackTrace = session?.getFailStackTrace() {print("失败堆栈跟踪:\n\(failStackTrace)")}}}}
}

最终输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7707.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tmux 介绍与使用

tmux有什么用 1.关闭终端时&#xff0c;在终端运行着的程序不会一起被关闭。 比如&#xff0c;我在终端命令行执行htop。当我关闭这个终端时&#xff0c;htop进程也随着这个终端的关闭而结束。我在终端运行着一个程序&#xff0c;它应该一直运行着。我一不小心把终端关闭了&a…

独立开发者常见开发的应用有哪些

1. 工具类应用 工具类应用旨在解决用户的特定问题或提高效率&#xff0c;通常功能简单&#xff0c;但实用性强。这类应用开发周期较短&#xff0c;适合独立开发者。 常见例子&#xff1a; 生产力工具&#xff1a;待办事项管理&#xff08;如 Todoist&#xff09;、日历同步工…

Linux Futex学习笔记

Futex 简介 概述&#xff1a; Futex(Fast Userspace Mutex)是linux的一种特有机制&#xff0c;设计目标是避免传统的线程同步原语&#xff08;如mutex、条件变量等&#xff09;在用户空间和内核空间之间频繁的上下文切换。Futex允许在用户空间处理锁定和等待的操作&#xff0…

Neural networks 神经网络

发展时间线 基础概念 多层神经网络结构 神经网络中一个网络层的数学表达 TensorFlow实践 创建网络层 神经网络的创建、训练与推理 推理 推理可以理解为执行一次前向传播 前向传播 前向传播直观数学表达 前向传播直观数学表达的Python实现 前向传播向量化实现 相关数学知识…

浅谈Redis

2007 年&#xff0c;一位程序员和朋友一起创建了一个网站。为了解决这个网站的负载问题&#xff0c;他自己定制了一个数据库。于2009 年开发&#xff0c;称之为Redis。这位意大利程序员是萨尔瓦托勒桑菲利波(Salvatore Sanfilippo)&#xff0c;他被称为Redis之父&#xff0c;更…

在Qt中实现点击一个界面上的按钮弹窗到另一个界面

文章目录 步骤 1&#xff1a;创建新窗口类步骤 2&#xff1a;设计窗口的 UI步骤 3&#xff1a;设计响应函数 以下是一个完整的示例&#xff0c;展示在Qt中如何实现在一个窗口中通过点击按钮弹出一个新窗口。 步骤 1&#xff1a;创建新窗口类 假设你要创建一个名为 WelcomeWidg…

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注&#xff1a; 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务&#xff1a;强化学习的目标是让智能体&#xff08;agent&#xff09;在一个环境&#xff08;environment&#xff09;中采取一系列行动&#xff08;actions&#xff09;以完成一个…

攻防世界bad_python

文件名pyre.cpython-36.pyc&#xff0c;说明是在python3.6环境下编译的&#xff0c;要把pyc反编译成py 但是显示失败了&#xff0c;结合题的名字文件的应该是文件头部被破坏 把第一行改为33 0D 0D 0A 0C 63 4A 63 61 02 00 00 E3 00 00 00 之后就能反编译了&#xff0c;得到源…

网络安全 | F5-Attack Signatures详解

关注&#xff1a;CodingTechWork 关于攻击签名 攻击签名是用于识别 Web 应用程序及其组件上攻击或攻击类型的规则或模式。安全策略将攻击签名中的模式与请求和响应的内容进行比较&#xff0c;以查找潜在的攻击。有些签名旨在保护特定的操作系统、Web 服务器、数据库、框架或应…

Linux的常用指令的用法

目录 Linux下基本指令 whoami ls指令&#xff1a; 文件&#xff1a; touch clear pwd cd mkdir rmdir指令 && rm 指令 man指令 cp mv cat more less head tail 管道和重定向 1. 重定向&#xff08;Redirection&#xff09; 2. 管道&#xff08;Pipes&a…

Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好

一、前言说明 在监控系统中&#xff0c;一般主界面肯定带了多个通道比如16/64通道的画面预览&#xff0c;随着电脑性能的增强和多屏幕的发展&#xff0c;再加上现在监控摄像头数量的增加&#xff0c;越来越多的用户希望在不同的屏幕预览不同的实时画面&#xff0c;一个办法是打…

【BUUCTF】October 2019 Twice SQL Injection1及知识点整理

打开题目页面&#xff0c;是一个登陆界面 先进行注册&#xff0c;尝试使用SQL注入看看会返回什么 跳转到登陆界面&#xff0c;我们用刚才注册的登录 显示的界面如下 在这个页面输入SQL注入语句&#xff0c;发现将单引号转义为了\&#xff0c;其他关键字并没有过滤 查看给出的源…

vue3 获取百度天气

获取百度应用key 需要开通百度天气api&#xff0c;进入 控制台 | 百度地图开放平台&#xff0c; 1、创建应用 2、填写名称 3、勾选上天气、百度地图逆地理编码 4、会得到一个key vue获取天气 应该用的是接口获取&#xff0c;这里会有跨域的问题&#xff0c;vue上用的是pro…

[极客大挑战 2019]BuyFlag1

题目 查看页面源码代码 有个pay.php文件打开查看 查看页面源代码&#xff0c;下面是主要代码 <!--~~~post money and password~~~ if (isset($_POST[password])) {$password $_POST[password];if (is_numeric($password)) {echo "password cant be number</br>…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;。由于一个共享内存段会称…

电力场效应晶体管(电力 MOSFET),全控型器件

电力场效应晶体管&#xff08;Power MOSFET&#xff09;属于全控型器件是一种电压触发的电力电子器件&#xff0c;一种载流子导电&#xff08;单极性器件&#xff09;一个器件是由一个个小的mosfet组成以下是相关介绍&#xff1a; 工作原理&#xff08;栅极电压控制漏极电流&a…

Spring Boot整合JavaMail实现邮件发送

一. 发送邮件原理 发件人【设置授权码】 - SMTP协议【Simple Mail TransferProtocol - 是一种提供可靠且有效的电子邮件传输的协议】 - 收件人 二. 获取授权码 开通POP3/SMTP&#xff0c;获取授权码 授权码是QQ邮箱推出的&#xff0c;用于登录第三方客户端的专用密码。适用…

PHP防伪溯源一体化管理系统小程序

&#x1f50d; 防伪溯源一体化管理系统&#xff0c;品质之光&#xff0c;根源之锁 &#x1f680; 引领防伪技术革命&#xff0c;重塑品牌信任基石 我们自豪地站在防伪技术的前沿&#xff0c;为您呈现基于ThinkPHP和Uniapp精心锻造的多平台&#xff08;微信小程序、H5网页&…

飞牛 fnOS 安装8852be网卡驱动并成功连接

飞牛fnos安装8852be网卡驱动 本人使用的是迷你主机 由于debian内核不识别8852be的网卡&#xff0c;所以需要自行安装网卡驱动 为此搜索了一堆教程 最后折腾过程以及代码如下&#xff0c;建议看完一遍再食用 fnos版本&#xff1a;0.8.36 debian内核版本&#xff1a;6.6.38-tri…

Linux通过docker部署京东矩阵容器服务

获取激活码 将京东无线宝app升级到最新版,然后打开首页,点击号 选择添加容器矩阵,然后获取激活码 运行容器 read -p "请输入你的激活码: " ACTIVECODE;read -p "请输入宿主机的缓存路径: " src;docker rm -f cmatrix;docker run -d -it --name cmatrix …