iOS 集成ffmpeg

devtools/2025/1/24 12:08:29/

前言

本来打算用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.ppmy.cn/devtools/153125.html

相关文章

【逆境中绽放:万字回顾2024我在挑战中突破自我】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…

Nginx 性能优化技巧与实践(一)

一、引言 在当今数字化时代&#xff0c;Web 服务已成为人们生活和工作中不可或缺的一部分。无论是日常浏览的新闻资讯网站&#xff0c;还是便捷的在线购物平台&#xff0c;背后都离不开强大的 Web 服务器支持。而 Nginx&#xff0c;作为一款高性能的 HTTP 和反向代理服务器&am…

开源鸿蒙开发者社区记录

lava鸿蒙社区可提问 Laval社区 开源鸿蒙项目 OpenHarmony 开源鸿蒙开发者论坛 OpenHarmony 开源鸿蒙开发者论坛

反向代理模块1

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

Mac cursor设置jdk、Maven版本

基本配置 – Cursor 使用文档 首先是系统用户级别的设置参数&#xff0c;运行cursor&#xff0c;按下ctrlshiftp&#xff0c;输入Open User Settings(JSON)&#xff0c;在弹出的下拉菜单中选中下面这样的&#xff1a; 在打开的json编辑器中追加下面的内容&#xff1a; {"…

vue2使用flv.js在浏览器打开flv格式视频

组件地址&#xff1a;GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…

AWS App Runner

AWS App Runner 是 Amazon Web Services (AWS) 提供的一项完全托管的服务&#xff0c;旨在帮助开发人员轻松地从源代码或容器映像构建和部署 Web 应用程序和 API&#xff0c;而无需管理底层基础设施。它简化了应用程序的部署过程&#xff0c;适用于需要快速启动、自动扩展、无需…

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑&#xff1a;电竞新宠崛起 在电竞游戏不断发展的今天&#xff0c;硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度&#xff0c;玩家们往往需要投入大量资金购置高性能电脑。然而&#xff0c;云电脑技术的出现&#xff0c;为玩家们提供了一种…