最近由于公司项目需要,用上了GPUImage 框架进行视频处理,其中踩了不少的坑。
GPUIMageMovie 解码
为了方便获取视频的sampleBuffer 以及推送到下一个关系链中,采用了 GPUImageMovie 的 部分源代码进行组装。
其中发现,解码出来的视频颜色效果与原视频有明显的差别,偏亮。
原因:
是 GPUImageMovie 中 yuvConversionSetup() 中 设置默认配置的kColorConversion709 的问题。-
解决方法:
把 GPUImageColorConversion.m中修改参数就可以恢复原来的视频颜色了。
因为通过pod 最新tag的代码 和 用git 下载Master代码, 变量所在的位置有所不同。
在GPUImageVideoCamera 或 GPUImageColorConversion 找到 kColorConversion601Default 和 kColorConversion709Default的定义进行修改。
// BT.601, which is the standard for SDTV.
GLfloat kColorConversion601Default[] = {
// 1.164, 1.164, 1.164,
// 0.0, -0.392, 2.017,
// 1.596, -0.813, 0.0,
1, 1, 1,
0, -.39465, 2.03211,
1.13983, -.58060, 0,
};
// BT.709, which is the standard for HDTV.
GLfloat kColorConversion709Default[] = {
// 1.164, 1.164, 1.164,
// 0.0, -0.213, 2.112,
// 1.793, -0.533, 0.0,
1, 1, 1,
0, -.21482, 2.12798,
1.28033, -.38059, 0,
};
附上参考链接:
https://github.com/Roxasora/GPUImage/commit/f8d799b4b3b8530a956064854e8e9f0dae5b5c06#diff-6e45d120bce1ec0d189a21669de57160