欢迎访问博客原文:https://lightfish.cn/2018-12-24-ffmpeg-cgo
前言
继上一篇 ffmpeg音视频C编程入门, 使用高性能的C语言进行音视频的处理,比较执行效率比较高,但是业务需求,快捷开发需要使用更方便的语言,比如 golang,本文介绍如何将 将视频转成GIF 的C语言方法封装成 golang 方法以便调用。
认识cgo的封装技巧
最简单的 cgo 封装例子看这篇 cgo快速入门
我这里讲几个注意事项
-
CGO构建程序会自动构建当前目录下的C源文件,即是 go 会将当前目录下 *.c 文件都编译成 *.o目标文件,再链接汇编,这个特点衍生出几个注意事项:
- go 代码以静态库或动态库方式引用 C 函数的话,需要将对应的C源文件移出 go源文件所在的目录
- 如果想要将 C 函数编译到 go 程序,就需要将 C源文件与 go 文件放在同一目录下
-
在C/C++混编下, go 中引用 C 函数,需要将 C 函数名置于全局,即
extern C
开始编程
第一步,处理例子中已经写好的 gen_gif 方法,修改 gen_gif.h 文件
#ifdef __cplusplus
extern "C" {
#endif
int gen_gif(const int gifSeconds, const int rotate, void* data, int data_size, void* outBuf, int outBufLen, int *outSize);