欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > iOS 集成ffmpeg

iOS 集成ffmpeg

2025/2/1 3:19:24 来源:https://blog.csdn.net/s12117719679/article/details/145326936  浏览:    关键词: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)")}}}}
}

最终输出

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com