这个系列文章我们来介绍一位海外工程师如何探索 GPUImage 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,本篇介绍 GPUImage 平台特定设置。
——来自公众号“关键帧Keyframe”的分享
GPUImage 同时支持 iOS(iPhone / iPad)与 macOS,底层均依赖 OpenGL / OpenGL ES 实现 GPU 加速。
通用前提:
- OpenGL 支持
- 启用 ARC
- 最低系统版本:iOS 5.0+ / macOS 10.6+
1、iOS 集成
1.1、系统要求
- 部署版本:iOS 5.0+(如需拍照预览需 4.3+)
- 硬件:iPhone 3GS+ / iPod touch 3 代+(需支持 OpenGL ES 2.0)
1.2、必需系统框架
CoreMedia
CoreVideo
OpenGLES
AVFoundation
QuartzCore
1.3、集成方式
方式 | 步骤 |
---|---|
静态库(Objective-C 项目) | 1. 拖 GPUImage.xcodeproj 进工程2. Target → Build Phases →Target Dependencies添加 GPUImage 3. 将 libGPUImage.a 拖到Link Binary With Libraries4. Header Search Paths 设为 framework/ 目录并勾选recursive5. 代码里 #import "GPUImage.h" |
Framework(Swift 或 iOS 8+) | 1. 拖 GPUImage.xcodeproj 进工程2. Build Phases →Target Dependencies添加 GPUImageFramework 3.Link Binary With Libraries添加 GPUImage.framework 4. 新增Copy FilesPhase,Destination 选Frameworks,加入 GPUImage.framework 5. Swift 里 import GPUImage |
CocoaPods | Podfile 写:pod 'GPUImage', '~> 0.1.7' pod install |
1.4、iOS 专属组件
GPUImageVideoCamera
— 实时摄像头GPUImageStillCamera
— 拍照GPUImageFilterPipeline
— 复杂滤镜链管理GPUImageMovieComposition
— 多视频合成GPUImageUIElement
— 渲染 UIView 为输入纹理
2、macOS 集成
2.1、系统要求
- 系统:macOS 10.6+
- 硬件:支持 OpenGL 的 Mac
2.2、必需系统框架
OpenGL
CoreMedia
QuartzCore
AVFoundation
2.3、集成方式
方式 | 步骤 |
---|---|
Framework(推荐) | 1. 拖 GPUImageMac.xcodeproj 进工程2. Build Phases →Target Dependencies添加 GPUImage 3.Link Binary With Libraries添加 GPUImage.framework 4. 新增Copy FilesPhase,Destination 选Frameworks,加入 GPUImage.framework 5. Objective-C: #import <GPUImage/GPUImage.h> Swift: import GPUImage |
CocoaPods | Podfile 写:ruby<br>platform :osx, '10.6'<br>pod 'GPUImage', '~> 0.1.7'<br> pod install |
2.4、macOS 特有实现
- 用
GPUImageAVCamera
取代GPUImageVideoCamera
- OpenGL 纹理管理不同于 OpenGL ES
- 无
GPUImageUIElement
(macOS 不提供 UIView 层级渲染)
3、平台差异速览
特性 | iOS | macOS |
---|---|---|
摄像头 | ✅ GPUImageVideoCamera / GPUImageStillCamera | ✅ GPUImageAVCamera |
UI 元素渲染 | ✅ GPUImageUIElement | ❌ |
大图纹理 | 2048×2048 限制(旧设备需分块) | 更大尺寸支持,无需分块 |
性能 | 受移动 GPU 限制 | 桌面 GPU 更充裕 |
4、快速起步示例
4.1、iOS Objective-C
#import "GPUImage.h"
UIImage *input = [UIImage imageNamed:@"sample.jpg"];
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
UIImage *output = [filter imageByFilteringImage:input];
4.2、iOS Swift
import GPUImage
let input = UIImage(named: "sample.jpg")!
let filter = GPUImageSepiaFilter()
let output = filter.image(byFilteringImage: input)
4.3、macOS Objective-C
#import <GPUImage/GPUImage.h>
NSImage *input = [NSImage imageNamed:@"sample.jpg"];
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
NSImage *output = [filter imageByFilteringImage:input];
4.4、macOS Swift
import GPUImage
let input = NSImage(named: "sample.jpg")!
let filter = GPUImageSepiaFilter()
let output = filter.image(byFilteringImage: input)
5、常见集成问题与解决
5.1、iOS
报错现象 | 解决 |
---|---|
Symbol not found: _CVOpenGLESTextureCacheCreate | Weak-linkCoreVideo.framework(Link Binary → Optional) |
Interface Builder Unknown class GPUImageView | Build Settings → Other Linker Flags添加 -ObjC |
iOS 4.x ARC 报错 | Other Linker Flags添加 -fobjc-arc |
5.2、macOS
报错现象 | 解决 |
---|---|
Missing GPUImage.framework | 确认 Copy FilesPhase 已正确配置 |
OpenGL 编译错误 | 确保使用 GPUImageMac.xcodeproj 而非 iOS 工程 |
6、小结
- iOS:关注摄像头、UI 渲染、纹理大小限制
- macOS:专注高分辨率处理、无 UI 元素捕获
- 通用:Source → Filter → Target 模式一致,迁移成本低
按上述步骤配置即可在对应平台快速启用 GPUImage 的全部能力。
学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至[email protected] 举报,一经查实,本站将立刻删除。