存在问题:ffmpeg与mpeg、H264等编码格式是什么关系?
问题解析:FFmpeg是一套用于处理各种编码音视频编码格式的计算机软件,其中固然也包括了mpeg、H264这两种编码格式的软件。html
一、编解码器(CODEC):可以进行视频和音频压缩(CO)与解压缩(DEC),是视频编解码的核心部分。linux
二、容器/多媒体文件(Container/File):没有了解视频的编解码以前,老是错误的认为日常下载的电影的文件的后缀(avi,mkv,rmvb等)就是视频的编码方式。事实上,刚才提到的几种文件的后缀并非视频的编码方式,只是其封装的方式。一个视频文件一般有视频数据、音频数据以及字幕等,封装的格式决定这些数据在文件中是如何的存放的,封装在一块儿音频、视频等数据组成的多媒体文件,也能够叫作容器(其中包含了视音频数据)。因此,只看多媒体文件的后缀名是难以知道视音频的编码方式的。windows
三、流数据 Stream,例如视频流(Video Stream),音频流(Audio Stream)。流中的数据元素被称为帧Frame服务器
一、libavformat:用于各类音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;网络
二、libavcodec:用于各类类型声音/图像编解码;ide
三、libavutil:包含一些公共的工具函数;函数
四、libswscale:用于视频场景比例缩放、色彩映射转换;工具
五、libpostproc:用于后期效果处理;post
六、ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码;测试
七、ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;
八、ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,经过SDL显示;
ffmpeg的官方网站是:http://ffmpeg.zeranoe.com/builds/
FFMPEG分为3个版本:Static,Shared,Dev。其中 Static 顾名思义就是静态库版本了。Shared则是动态库版本。Dev则是提供给开发者用的Lib文件。
注:FFMPEG最新版已是3了,不过咱们用的仍是2.5的,固然也能够用其余的,如2.8。基本上版本2的API都是没差的,所以对开发没有影响。
版本区别:
Dev版本:是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。
备注:应用程序在开发期间须要用到dev版本下的lib库,应用程序编译后执行期间须要shared中的dll库文件的支持
windows下安装:http://www.javashuo.com/article/p-phbvguhb-bx.html
//yasm是汇编编译器,由于ffmpeg中为了提升效率用到了汇编指令,因此须要先安装。 一、sudo apt-get install yasm 或者 tar -xvf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ./configure make make install //二、安装编码库x264和x265库 H.264是ITU(International Telecommunication Union,国际通讯联盟)和MPEG(Motion Picture Experts Group,运动图像专家组)联合制定的视频编码标准。而x264是一个开源的H.264/MPEG-4 AVC**视频编码函数库,是最好的有损视频编码器。一样的片源、码率一、编码器默认设置下,用x264编码的视频(通常是mkv或mp4格式)必定会比rmvb画质更好。x264是一种编码方式。 x265是一个用于编码,符合高效率视频编码(HEVC/H.265)标准的视频开源自由软件及函数库。 由上可知,x264和x265库主要是用来给视频编码的,`而博主暂时的工做只是接收网络流,而后解码处理,因此就不添加x264和x265库的须要了!` //三、安装音频库以及相关文件 SDL(Simple DirectMdeia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、 声音、输入输出的函数,让开发者只要用相同或是类似的代码就能够开发出跨多个平台的应用软件。 3.一、sudo apt-get install libasound2-dev 3.二、unzip SDL2-2.0.5.zip cd SDL2-2.0.5/ ./autogen.sh ./configure --prefix=/usr/local/ make sudo make install //四、安装FFMPEG //PC下安装直接指定目录,其它大部分采用默认 ./configure --prefix=/usr/local/lib/ffmpeg3.3.2_pc \ --enable-shared \ --disable-static \ --enable-ffplay #enable-ffplay //若是没有安装上述音频库,即便加上了该选项也不能生成ffplay 可执行程序 make make install 二、ffmpeg使用 ./ffmpeg //若出错找不到(libavdevice.so.57)这个动态库。 ldd ffmpeg //来查看运行当前可执行文件须要哪些动态库 使用find或者locate能够在/xxx/ubu_ffmpeg/lib中找到这个动态库,连接到/etc/ld.so.conf便可,具体过程: sudo vi /etc/ld.so.conf.d /xxx/ubu_ffmpeg/lib //在conf文件中加入以下 sudo ldconfig //最后执行生效 或者在profie中添加环境变量 export LD_LIBRARY_PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH //测试使用: //ffmpeg是用于转码的应用程序。 //ffplay是用于播放的应用程序。 //ffprobe是用于查看文件格式的应用程序。 ./ffmpeg -version ffplay test.avi ffmpeg -i input.avi output.ts ffprobe test.avi
https://blog.csdn.net/fgf00/article/details/78203399?locationNum=5&fps=1
4.2.2.一、编译脚本
#!/bin/sh ./configure \ --prefix=/usr/local/arm/ffmpeg-2.5.11 \ --enable-shared \ --enable-cross-compile \ --cross-prefix=/work/fsl-linaro-toolchain-2.13/bin/arm-linux- \ --arch=arm \ --target-os=linux \ --enable-gpl \ --enable-pthreads \ --disable-stripping \ --disable-ffplay
4.2.2.二、可能出错问题
//出错问题1: ../libavutil/libm.h:62: error: static declaration of 'lrint' follows non-static declaration ../libavutil/libm.h:69: error: static declaration of 'lrintf' follows non-static declaration //解决办法:ffmpeg/libavutil/libm.h 里的全部static方法全都注释掉 //出错问题2:lrint、lrintf、round、roundf错误 //解决办法:在config.h搜索lrint、lrintf、round、roundf等对于的字符 #define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1
http://www.javashuo.com/article/p-pxnlxyck-cs.html //good
https://blog.csdn.net/kaikai136412162/article/details/80746961
https://blog.csdn.net/kangweijian/article/details/54906514
http://www.javashuo.com/article/p-oklzdmuo-bk.html
http://www.javashuo.com/article/p-fwzewpax-dy.html
http://www.javashuo.com/article/p-dxveknln-gn.html