好消息,写了第一个使用了ffmpeg的库的小程序。
看起来就是这么简单的一个消息,但是you have no idea how much work that I did before it works...
 
废话少说,总结记录之。。。
一、安装好Linux的虚拟机。
    我用的是FEDORA-16,当然别的也许能行,不过没亲测。什么叫安装好,大概定义一下:1、安装能进入系统,安装的时候用FEDORA-DVD.ISO比较好,不推荐用LIVE-CD。因为DVD可以自带更多的软件,并且在安装的时候可以选择“软件开发”这个选项,这样的话,就会默认安装好很多软件以及其依赖的库,那样之后的工作会简单很多。
    待虚拟机安装好之后,
二、更新系统软件
    执行“sudo yum update”,可使得很多软件更新完毕,当然,耗时有点长,取决于机器性能和网络环境。
三、安装git,并且拉取最新ffmpeg源代码
    因为ffmpeg是用git来维护整个项目的,所以我们必须安装好git,然后用git去拉去最新的源代码。
    执行“sudo yum install git”,来安装git。
    执行“git clone git://source.ffmpeg.org/ffmpeg.git”,完毕后会发现当前目录下会有一个ffmpeg目录,这就是最新的源代码了。
四、编译ffmpeg
    进入ffmpeg文件夹,三部曲,”./configure“,”make“,”sudo make install“。
    在执行./configure的时候,可能会提示没有安装yasm,那么执行”sudo yum install yasm“即可。
    在执行make,就是编译整个ffmpeg项目了,会生成一些二进制文件,例如:ffplay、ffserver、ffmpeg、ffprobe。
    在执行sudo make install时候,会把编译生成的.a归档复制到/usr/local/lib下,下面看结果
[michael@localhost /]$ ll /usr/local/lib
total 69676
-rw-r--r--. 1 root root 51473968 May  9 16:48 libavcodec.a
-rw-r--r--. 1 root root   582964 May  9 16:48 libavdevice.a
-rw-r--r--. 1 root root  1855462 May  9 16:48 libavfilter.a
-rw-r--r--. 1 root root 15274554 May  9 16:48 libavformat.a
-rw-r--r--. 1 root root   219562 May  9 16:48 libavresample.a
-rw-r--r--. 1 root root   576360 May  9 16:48 libavutil.a
-rw-r--r--. 1 root root   189182 May  9 16:48 libswresample.a
-rw-r--r--. 1 root root  1157418 May  9 16:48 libswscale.a
drwxr-xr-x. 2 root root     4096 May  9 16:48 pkgconfig
[michael@localhost /]$ 
   还会把ffmpeg的一些.h的头文件复制到/usr/local/include下,看结果:
[michael@localhost /]$ ll /usr/local/include/
total 32
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavcodec
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavdevice
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavfilter
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavformat
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavresample
drwxr-xr-x. 2 root root 4096 May  9 16:48 libavutil
drwxr-xr-x. 2 root root 4096 May  9 16:48 libswresample
drwxr-xr-x. 2 root root 4096 May  9 16:48 libswscale
[michael@localhost /]$ 
    注意,你可以看到上面这几个都是目录,不然进入libavformat看看,看结果:
[michael@localhost /]$ ll /usr/local/include/libavformat/
total 92
-rw-r--r--. 1 root root 71469 May  9 16:48 avformat.h
-rw-r--r--. 1 root root 16168 May  9 16:48 avio.h
-rw-r--r--. 1 root root  2858 May  9 16:48 version.h
[michael@localhost /]$ 
    可见真正的头文件都在对应名字的目录内,那么我们在程序中引用头文件的时候,应该这样写”#include libavformat/avformat.h“,而不是这样写”#include avformat.h“,为什么呢?因为你不指定路径的情况下,gcc会去/usr/local;/usr下找avformat.h,当然找不到(因为avformat.h在/usr/local/libavformat目录下,而不是在/usr/local下)。所以往往有人编译的时候报错,找不到头文件,就是这个原因。五、写一个调用了ffmpeg库的小程序    既然ffmpeg安装完毕,那么就自己编一个小程序,在程序里面调用ffmpeg的API吧。
    源代码如下所示:(应该是非常简短的了)
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/avutil.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
        printf("going to av_register_all\n");
        av_register_all();
        return 0;
}
    编译命令如下所示:
gcc -o test ./shortest.c -lavformat -lavcodec -lavutil -lz -lm -lpthread -lbz2
    说一下,为什么使用这个编译命令。
    首先,av_register_all()函数里面嵌套了更多的函数,他们的声明在avcodec.h、avformat.h、avutil.h中,所以需要包含这三个头文件,这一步做好了,可保证编译不出错;其次,链接阶段,需要去找这些被声明的函数的定义部分,所以需要链接这些库,libavformat.a、libavcodec.a、libavutil.a、z库、m库(数学库)、pthread库(线程库)、bz2库。所以必须-l链接这些归档库,最后生成test二进制文件,试着运行吧。
六、总结
    写起来很简单,就这五个步骤。但是我自己摸索着,一步一步走过来,理解了不少,可以看到,我之前做了很多准备工作(之前有几篇blog就是做这些准备工作的记录,比如编译,库的理解)。
    有句话叫一通百通,真的弄懂这个了,不管遇到什么库,什么API,只要真心搞懂了一种,其他的也是相似的。
    接下来,就是一个基于ffmpeg的转码工具的设计实现了,为什么不直接做播放器呢?因为播放器需要SDL的相关知识,暂时我不会,而且播放也只是把解码后的数据再进一步通过SDL库来展现,所以转码工具就是基础了,那么从基础做起总没坏处。

转载给ffmpeg入门级:我的第一个调用FFmpeg库的程序出炉相关推荐

  1. 计算机专业清华世界第一!US NEWS全球大学排名出炉

    程序猿(微信号:imkuqin) 猿妹 编译 综合自:https://www.usnews.com/education/best-global-universities/search 近日,<美 ...

  2. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...

    项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...

  3. 清华大学霸榜计算机学科第一!2022 USNews世界大学排名出炉,计算机前50中国占19个...

    111美国时间10月26日,U.S.News正式发布最新的2022最佳全球院校排名.哈佛大学继续领跑全球No.1的位置,麻省理工学院.斯坦福大学.加利福尼亚大学伯克利分校位列Top5.清北分别位列26 ...

  4. 清华大学霸榜计算机学科第一!2022 USNews世界大学排名出炉!

    转自:新智元 2022年的U.S.News全球大学排名榜单来了! 其中,美国共有271所大学上榜,中国共有289所大学上榜. 而这次计算机专业的排名可谓是相当亮眼. 清华大学力压斯坦福,麻省理工,卡内 ...

  5. 清华大学霸榜计算机学科第一!2022 USNews 世界大学排名出炉,计算机前50中国占19个...

    点击"开发者技术前线",选择"星标" 让一部分开发者看到未来 来源:新智元.U.S.News [导读]美国时间10月26日,U.S.News正式发布最新的202 ...

  6. python ffmpeg模块mp4岀错_Python 调用 FFmpeg 提示 module 'ffmpeg' has no attribute 'input' 的解决方法-老唐笔记...

    按照之前文章的方法安装 FFmpeg 之后(在 macOS 上安装 FFmpeg 并通过 Python 调用的方法),我们想通过 Python 进行调用,但是有些不细心的朋友可以装 Python 库的 ...

  7. 【RPA之家转载】2021年影响会计人员的十大信息技术榜单出炉,RPA再次登榜

    RPA之家(RPA之家|RPA|RPA新闻|RPA案例|RPA应用|RPA咨询|RPA培训|RPA认证|RPA教程)是中国具有影响力的RPA垂直交流社区,社区汇聚了RPA领域的各类从业人员.其中包括R ...

  8. FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK-殷汶杰-专题视频课程

    FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK-41668人已学习 课程介绍         FFMpeg是当今为的面向音视频开发的开源工程,广泛应用于多种音视频的客户端.播放器和流媒 ...

  9. Java调用FFmpeg实现视频录制

    FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频 ...

最新文章

  1. NR 5G 网络切片
  2. T400 安装Windows 7 7100 总结
  3. skb_shinfo(skb)-dataref 含义
  4. 如何用css3实现简单旋转的风车
  5. 列表元素的几种统计方法总结(嵌套列表)
  6. 为了释放AI在边缘计算的力量 英特尔又出手了
  7. 如何用计算机计算胸围,文胸尺码计算器
  8. SQL Server学习之路(六):“增删改查”之“查”
  9. 如何在html创建js对象,在js中使用createElement创建HTML对象和元素
  10. 潍坊首个小学“教育创客空间”落户呼家庄小学 萝卜(创客)教育走进小学课堂...
  11. 在Spring MVC中使用FileUpload功能
  12. Exchange2013/2016 ECP/OWA无法通过用户验证EventID3002/3005
  13. PTA平台之温度转换
  14. gpgga格式读取MATLAB,GPS协议GGA、GLL、GSA、GSV、RMC、VTG解释
  15. shark恒破解笔记4-API断点GetPrivateProfileStringA
  16. caxa发生文件读写异常_文件和异常
  17. Unity视频播放器插件AVProVideo的使用
  18. 微信小程序加载闪屏,黑白屏,闪退问题
  19. android fragment横屏,Fragment横竖屏
  20. ChatGPT爆火出圈,高质量文本标注数据成关键

热门文章

  1. 【转】05.Dicom 学习笔记-DICOM C-Echo 消息服务
  2. TFS下的源代码控制
  3. Java并发:线程共享变量可见性原理
  4. 【JS 逆向百例】XHR 断点调试,Steam 登录逆向
  5. Python3 爬虫学习笔记 C06 【正则表达式】
  6. w8计算机配置要求,win8配置要求 详细介绍
  7. 执行本地sql_实用!5个在线 SQL 数据库环境
  8. php中sisson用法,thinkPHP中session()方法用法详解
  9. egg 编码规范_Egg 框架简述 (仅学习)
  10. 【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)