将ffmpeg改造成一个可以链接的library

一、事件起因:

最近有个项目,需要搞音频格式转换,需要满足一下功能:

1. amr <--> wav

2. amr <--> mp3

3. 以接口加动态库的形式提供上面1和2的功能

在网上搜索了很久,没有找到合适的library。

在找的过程中发现ffmpeg能实现1和2的功能,但是它不满足3的功能,所以有了将ffmpeg改造成library的想法。


二、改造的步骤:

1. 提取必要的参数:-ab,-ar,-ac,-acodec;

2. 根据1中的参数编写相应的接口,like this:

int convert(char* inflie, char* outfile, char* ab, char* ar, char* ac, char* acodec, char* err_msg);
3. 实现2中的接口;

4. 编写makefile文件,将原来生成可执行文件的逻辑改成生成动态链接库。


三、遇到的问题:

1. 由于需要调试ffmpeg程序,所以想编译一个没有优化的程序,用“disable-optimizations”老是不能编译成功,需要修改源码或是调整confiure选项;

2. 走了弯路:修改了ffmpeg的很多源码,经好友@baoxue提醒,改变了修改策略;

3. ffmpeg代码中有很多直接调用exit,使得调用进程意外退出,这个问题很严重,因为调用进程可能是服务器进程。这个问题通过创建一个线程,在线程内处理格式转换,最终解决了这个问题。


四、代码

代码已ok,但是性能没有测试,所以没有贴出来。

TODO:性能测试通过后会将代码链接贴出来。


你可能感兴趣的:(c,源码,linux,ffmpeg,library)