探索 GPUImage 音视频技术(5):平台特定设置

这个系列文章我们来介绍一位海外工程师如何探索 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 Libraries
4. Header Search Paths 设为framework/目录并勾选recursive
5. 代码里 #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
CocoaPodsPodfile写:
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
CocoaPodsPodfile写:
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、平台差异速览

特性iOSmacOS
摄像头✅ GPUImageVideoCameraGPUImageStillCamera✅ 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: _CVOpenGLESTextureCacheCreateWeak-linkCoreVideo.framework(Link Binary → Optional)
Interface Builder Unknown class GPUImageViewBuild 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 的全部能力。

学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】

探索 GPUImage 音视频技术(5):平台特定设置

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

(0)

相关推荐

发表回复

登录后才能评论