cgo+ffmpeg+linux的简单使用


cgo+ffmpeg+linux的简单使用

cgo+ffmpeg+windows的简单使用

上面一篇说了如何在windows搭建开发环境,这一篇讨论一下linux的情况。


环境所需

和windows一样,在linux上面编译运行ffmpeg程序,一样需要ffmpeg静态库和动态库。

所以需要在linux上去编译ffmpeg(带动态库的)。

另外,为了支持x264,先去编译一个x264。


x264编译

先去下载一个x264的编译器http://www.videolan.org/developers/x264.html

使用下面命令编译(make install需要sudo权限):

1
2
3
./configure --enable-static --enable-shared
make
make install

如果提示没有yasm,则装一个就行。


ffmpeg编译

[https://ffmpeg.org/download.html#releases]https://ffmpeg.org/download.html#releases

去ffmpeg官网下载一个自己需要版本的ffmpeg,我这里下载的4.3.1。

这里编译成动态库:

1
2
3
./configure --enable-shared --disable-static --enable-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-pthreads
make
make install

添加一下动态链接库

/etc/ld.so.conf.d/下面创建一个新文件,把ffmpeg动态链接库路径加进去就行。

1
2
3
4
5
6
7
vim /etc/ld.so.conf.d/ffmpeg-4.3.1.conf
cat /etc/ld.so.conf.d/ffmpeg-4.3.1.conf
/usr/local/lib
// 执行
ldconfig

cgo编译

可以将go代码中改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
/*
#cgo windows CFLAGS: -ID:/ffmpeg/include
#cgo windows LDFLAGS: -LD:/ffmpeg/lib -llibavformat -llibavcodec -llibavutil -llibavdevice -llibavfilter -llibswresample -llibswscale
#cgo linux CFLAGS: -I/usr/local/include
#cgo linux LDFLAGS: -L/usr/local/lib -lavformat -lavcodec -lavutil -lavdevice -lavfilter -lswresample -lswscale
#include <stdlib.h>
#include "snapshot-v3.h"
*/
import "C"

在其中加入windows和linux,编译时会自动对环境进行识别。

直接在项目文件夹下面执行go build即可。


纯c代码编译

有可能需要调试代码,这时候可能只想编译一些纯c的测试文件:

1
gcc snapshot-v2.c -o snapshot -I/usr/local/include -L/usr/local/lib -lavformat -lavcodec -lavutil -lavdevice -lavfilter -lswresample -lswscale

也可以把这句话放到makefile里面,以后每次编译直接make:

1
2
3
4
cat makefile
snapshot: snapshot-v2.c
gcc snapshot-v2.c -o snapshot -I/usr/local/include -L/usr/local/lib -lavformat -lavcodec -lavutil -lavdevice -lavfilter -lswresample -lswscale

---------------------------------END---------------------------------