`
包su
  • 浏览: 31044 次
  • 来自: 南京
社区版块
存档分类
最新评论

linux虚拟机下面编译ffmpeg,并调用其main方法

 
阅读更多

ffmpeg的确非常的强大,但是它显的太专业:
很多像我这样的菜鸟,不知道怎么编译
很多人在linux环境下编译通过,但是在cygwin下编译不通过
很多人成功编译了ffmpeg 0.8.x,但是却编译不通过更高的版本
很多人不明白configure文件中的--enable--x到底是什么意思
...
还有,很多人编译出了so,但是却没有将ffmpeg.c编译进去(即是:你可以获得ffmpeg的版本号,但是你使用不了命令行的方式,也就意味着:如果你想使用ffmpeg强大的API,那么你必须了解ffmpeg的绝大多数的类),然后,就死活编译不进去

一个简洁的api:诸如linux下面的一条命令,形式诸如:ffmpeg -r 10 -f image2 -i ...

我非常想在windows下编译,但是,最终,我妥协了(实验了无数次,选择了linux虚拟机),并且,采用了最极端的方式:傻瓜版

**********************************************

参见:
https://github.com/halfninja/android-ffmpeg-x264

目的:可以调用ffmpeg中的main方法,以通过“cmd string”的方式与ffmpeg交互
条件:你需要下载一个虚拟机,并且遵循它的步骤

流程:

执行步骤First time stuff

其中1的目的是:下载ffmpeg和libx264的源码
在执行步骤change之前
修改Project/jni/setttings.sh
minimal_featureset=0
因为:作者只是做了:JPEG decoding and x264 encoding
而我们这样做,将获得everything of ffmpeg
修改Project/jni/ffmpeg/libavformat/file.c
在static int file_check(URLContext *h, int mask)中添加
ret |= st.st_mode&S_IRUSR ? mask&AVIO_FLAG_READ : 0;
ret |= st.st_mode&S_IRGRP ? mask&AVIO_FLAG_READ : 0;
ret |= st.st_mode&S_IROTH ? mask&AVIO_FLAG_READ : 0;
ret |= st.st_mode&S_IWUSR ? mask&AVIO_FLAG_WRITE : 0;
ret |= st.st_mode&S_IWGRP ? mask&AVIO_FLAG_WRITE : 0;
ret |= st.st_mode&S_IWOTH ? mask&AVIO_FLAG_WRITE : 0;
因为:我们也许需要使用ffmpeg的功能:图片转换成视频,并写入sdcard。则,需要设置权限
修改jni.c,以符合我们的包结构
执行步骤change

分享到:
评论
1 楼 jspjson 2013-11-01  
把ffmpeg.c编译进去,请教怎么做呢,

相关推荐

Global site tag (gtag.js) - Google Analytics