首先,GPUImage有3个版本分别是:GPUImage,GPUImage2,GPUImage3
GPUImage 最早的OC版本
GPUImage2 相当于Swift版本
GPUImage3 Swift 区别于1和2,将底层框架由OPENGL(ES)改为METAL,性能更好
不过。。。各种功能未完成 - -!
因为项目使用的就是swift语言,所以最终选择了GPUImage2.
不过不论是OC版,还是swift版本,当使用预览页播放视频时(oc:GPUImageView,Swift:RenderView),都没有声音!!
于是本人很直接的手动添加avplayer,同步播放音频。。。
问题来了!音画不同步!!!
最后发现,GPUImage作者说他压根没考虑这点,也就是说,接口都没给你,必须代码侵入
经过一番周折,在git上找到了GPUimage2的分支:
https://github.com/joshbernfeld/GPUImage2
不知道为什么这个作者申请的提交没有被GPUImage2的作者批准合并到自己的master中
因为git上项目的结构问题,最简单的方式是手动将工程拖入自己的项目,不过,为了顺眼,我找到了使用pod导入的方法:
GPUImage2.podspec :
Pod::Spec.new do |s|
s.name = 'GPUImage2'
s.version = '0.1.0'
s.license = 'BSD'
s.summary = 'An open source iOS framework for GPU-based image and video processing.'
s.homepage = 'https://github.com/joshbernfeld/GPUImage2'
s.author = { 'Brad Larson' => 'contact@sunsetlakesoftware.com' }
# This commit on that fork of GPUImage should contain just upgrades needed for Swift 4 compatibility. See https://github.com/BradLarson/GPUImage2/pull/212
# Replace with https://github.com/BradLarson/GPUImage2.git when merged
# into BradLarson's repository.
s.source = { :git => 'https://github.com/joshbernfeld/GPUImage2', :commit => '21ac77dfef1bcbb40a5fade6f48a911d23601bea' }
s.source_files = 'framework/Source/**/*.{swift}','framework/Source/**/*.{h}','framework/Source/**/*.{m}'
s.resources = 'framework/Source/Operations/Shaders/*.{fsh}'
s.requires_arc = true s.xcconfig = { 'CLANG_MODULES_AUTOLINK' => 'YES', 'OTHER_SWIFT_FLAGS' => "$(inherited) -DGLES"}
s.ios.deployment_target = '8.0'
s.ios.exclude_files = 'framework/Source/Mac', 'framework/Source/Linux', 'framework/Source/Operations/Shaders/ConvertedShaders_GL.swift' s.frameworks = ['OpenGLES', 'CoreMedia', 'QuartzCore', 'AVFoundation']
end
其中要注意的是:
s.source 是下载的链接地址,我这里使用的是分支,并不是原版GPUImage2
s.source_files 是需要下载的文件,这里除了.h还有.m文件,是因为这个版本的声音播放需要两份OC文件
podfile中添加:
pod 'GPUImage2', :podspec => './GPUImage2.podspec'
然后就是调用pod install
完成后,如果编译报错
将pod下的该framework语言改为swift4即可
另,如果编写podspec时,下载的文件源只写了swift,那么最后项目编译会报找不到两份OC文件的错,下载文件手动添加进pod下,并设置.h文件为public
最后在GPUImage2-umbrella中添加OC头文件即可,并不需要手动在pods中创建桥文件,否则会报错
最后的最后,如果有人使用Carthage编译GPUImage2为framework成功了,望留言指教指教🤣