ffmpeg学习:ffmpeg下载,播放音频、视频,读取USB摄像头数据流并实时播放

时间:2022-12-13 23:26:05
1:解压缩包命令
从网络上下载到的源码包, 最常见的是 .tar.gz 包, 还有一部分是 .tar.bz2包, 要解压很简单 :
.tar.gz     格式解压为          tar   -zxvf   xx.tar.gz
.tar.bz2    格式解压为          tar   -jxvf    xx.tar.bz2

2: 编译ffmpeg时,出现了 ffmpeg yasm not found, use --disable-yasm for a crippled build,是因为 FFMPEG为了提高编译速度,使用了汇编指令,如果系统中没有yasm指令的话,就会出现上述的问题。

解决办法是:
          A 如果是Windows系统, 从网上下载一个 yasm.exe 并安装在mingw/bin下面,重新编译,就不会出现该错误了;
         B 如果是Linux系统,则更简单,直接在终端输入 sudo apt-get install yasm ,安装好后,重新编译就 OK了。
3:Linux ffmpeg的安装编译过程 
 (1)下载ffmpeg。
          在网上搜索一下,或者到官方网站下载  
 (2)解压
     tar   -jxvf    xx.tar.bz2  
 (3)配置
      ./configure --enable-shared --prefix=/usr/local/ffmpeg
   其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。
(4)编译并安装
     make
      make之后有可能没有生成ffplay,此时编译时需要安装libsdl1.2-dev,命令为sudo apt-get install libsdl1.2-dev,如果安装失败,之前如果安装过sdl-devel包最好将其卸载。根据错误原因来解决。
     然后重新make。
    sudo make install -j4    //-j4四核并行运行
(5)安装之后在/usr/local/ffmpeg会看到有三个目录
        lib        动态链接库位置
      include    编程要用到头文件
     bin        执行文件所在的目录
(6)如果共享库文件安装到了/usr/local/ffmpeg/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中,
 如下:
      # cat /etc/ld.so.conf
              include ld.so.conf.d/*.conf
        # echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf
       # ldconfig
     另外,bin目录下还有两个文件:ffmpeg和ffserver
    ffmpeg是一个很好的视频和音频的格式转化工具。网上有很多它的说明文档。如果不想生成ffserver,只要在./configure的时候加--disable-ffserver即可。
(7)编程
     如果写了一个test.c文件,要包含ffmpeg的头文件,可以这样写:
 #include
编译:gcc -o test test.c -lavformat -lavcodec -lavtuil (前提是有第6步的操作)
        如果没有第6部的操作,则编译的时候如下:
       gcc -o test test.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil

 (8)安装好之后读取USB摄像头并实时播放

    捕获存入文件后播放

    捕获:ffmpeg -f video4linux2 -s 320*300 -i /dev/video0 test.asf

    播放:ffplay test.asf

     捕获后实时播放

     ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0


      以上的方式是采用动态库编译ffmpeg的,如果在configure的时候不加上--enable-shared的,则采用静态链接的方式,不会生成那三个动态库。同时生成的ffplay、ffmpeg的执行文件也比较的大,因为他们不需要动态库的支持,就可以执行。但是不利于再次开发,所以我采用动态链接的方式。configure中还有很多的选项,可以通过./configure --help查看,也可以直接查看configure文件。这在配置的时候很重要。

参考地址:
http://blog.chinaunix.net/uid-26212859-id-3256667.html  
blog.csdn.net/cherayliu/article/details/7496878
http://blog.csdn.net/cherayliu/article/details/7486378