前面通过阅读《FFmpeg Basic》这本书,对ffmpeg工程和视频编解码的基本知识有了一定的理解,学习编程最重要的当然是动手实践了,所以这片博客,我将会完整记录自己第一次编写视频解码程序的过程。 这个程序能将一个视频转换为一帧一帧的图片。这个程序参考了decoding_encoding.c文件,但使它们还是有很大的不同。
编译自己的程序
在编写程序之前,先搭建一下编译环境。
我当时编译ffmepg源码是这样的:
1.执行./configure –disable-yasm –enable-shared –prefix=tmp
2.make
3.make install
因此,编译完成后,头文件和库都在tmp目录下,那我现在编译程序需要头文件和苦呀,所以都需要从这里去找。因此,我们写一个makefile和一个Init.sh脚本,init.sh脚本只有一行,就是告诉需要运行的程序,动态链接库去哪里找,init.sh脚本如下:
export LD_LIBRARY_PATH=/home/jinwei/work/ffmpeg-2.7.6/tmp/lib
makefile如下:
VAR_INCLUDE := -I ../../../ffmpeg-2.7.6/tmp/include
VAR_SHARED_LIB_DIR = -L ../../../ffmpeg-2.7.6/tmp/lib
VAR_SHARED_LIBS = -l avcodec -l avformat -l avdevice -l avutil -l swresample -l avfilter -l swscale
avio_reading.bin:avio_reading.o
gcc -o $@ $^ $(VAR_INCLUDE) $(VAR_SHARED_LIB_DIR) $(VAR_SHARED_LIBS)
%.o:%.c
gcc -c $< $(VAR_INCLUDE) $(VAR_SHARED_LIB_DIR) $(VAR_SHARED_LIBS)
clean:
rm -rf *.o *.bin
这个Makefile非常简单,我们这里编译的是bin:avio_reading.c这个例子。如果对Makefile稍作了解,这个Makefile一眼就能看懂做了什么事情吧,所以就不废话了。
执行make后,会生成avio_reading.bin文件,执行这个文件:
./avio_reading.bin hello.mp4
打印如下:
ptr:0x7f1aacc26000 size:167773