fmpeg中第三方库的编译_libx264和librtmp
2017-01-23 15:49
405 查看
在前一篇blog中编译ffmpeg,是没有添加进任何库的.但是ffplay照样可以播放本地flv文件,播放rtmp协议,其中的编解码是h264和aac的.也就是说没有第三方库的支持,ffmpeg是支持h264和aac解码的.分析一下ffmpeg的configure的输出:
通过上面,h264编码并不支持,必须得安装第三方库:x264.我原先以为ffmpeg默认使用了librtmp库和X264库.这个理解应该是错的.
先把这些库编译进去.
http://download.videolan.org/pub/videolan/x264/snapshots/
文件名:
last_stable_x264.tar.bz2
x264有一个git:
Enabled decoders: //解码器 aac和h264都支持 aac ... h264 .... Enabled encoders: //编码器支持aac,h264就不支持了 aac ... Enabled protocols: //协议支持hls和rtmp hls rtmp ... Enabled demuxers: //支持容器解析:flv flv ... Enabled muxers: //支持容器封装:flv flv ...
通过上面,h264编码并不支持,必须得安装第三方库:x264.我原先以为ffmpeg默认使用了librtmp库和X264库.这个理解应该是错的.
先把这些库编译进去.
1 libx264
1.1 下载
下载网址是:http://download.videolan.org/pub/videolan/x264/snapshots/
文件名:
last_stable_x264.tar.bz2
x264有一个git:
git clone http://git.videolan.org/git/x264.git[/code]
还有两个相关的网址:http://www.x264.nl/x264_main.php http://www.videolan.org/developers/x264.html //直接点下载不行.1.2 编译x264
启动:C:\MinGW\msys\1.0\msys.bat,cd到x264库的目录$./configure --enable-shared --disable-asm $ make $ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下会多6个文件:C:\MinGW\msys\1.0\local\lib\libx264.dll.a C:\MinGW\msys\1.0\local\bin\libx264-148.dll C:\MinGW\msys\1.0\local\lib\pkgconfig\x264.pc C:\MinGW\msys\1.0\local\include\x264_config.h C:\MinGW\msys\1.0\local\include\x264.h C:\MinGW\msys\1.0\local\bin\x264.exe
编译很顺利,几分钟的事.1.3 编进ffmpeg
1.3.1 configure
在我们之前的configure添加:–enable-gpl –enable-libx264./configure --enable-shared --disable-static --enable-ffplay --disable-ffprobe --disable-ffserver --extra-cflags=-IE:/myproject/ffmpeg-3.0.2/include --extra-ldflags=-LE:/myproject/ffmpeg-3.0.2/lib --enable-memalign-hack --enable-gpl --enable-libx264
哇塞,不会所有又需要重新编译一次吧.
产生错误,没有找到libx264.把C:\MinGW\msys\1.0\local的bin,include,lib都拷到E:/myproject/ffmpeg-3.0.2中.因为我的configure命令写着:--extra-cflags=-IE:/myproject/ffmpeg-3.0.2/include --extra-ldflags=-LE:/myproject/ffmpeg-3.0.2/lib
其实不拷贝,增加–extra-cflags和–extra-ldflags.
configure成功后,我们研究一下configure的输出.简化了一下,把关注的东西留下来.install prefix /usr/local source path . C compiler gcc C library mingw32 ARCH x86 (generic) big-endian no ... SDL support yes //只有这个为yes才能编译出ffplay Enabled programs: //编译出来的执行文件 ffmpeg ffplay External libraries: //扩展库,libx264是新增加的 iconv libx264 sdl Enabled decoders: //解码器 aac ... Enabled encoders: //编码器 , libx264 是新加的 aac libx264 ... Enabled hwaccels: //硬件加速器 Enabled parsers: //解析器 aac h264 vp9 Enabled demuxers: 解复用,也就是封装解析 hls .... Enabled muxers: 合并器 mp3... Enabled protocols: 协议 hls rtmp Enabled filters: 过滤器,过滤器是啥,没接触过. select... Enabled bsfs: //位流过滤器,不知道是什么? Enabled indevs: //设备吗? Enabled outdevs: //设备吗? License: LGPL version 2.1 or later Creating config.mak, config.h, and doc/config.texi... config.h is unchanged config.asm is unchanged libavutil/avconfig.h is unchanged
增加libx264的编码器.说明configure成功.1.3.2 make
编译完成后,生成的主要文件是:主要是新增了哪些库INSTALL libavdevice/avdevice.dll INSTALL libavfilter/avfilter.dll INSTALL libavformat/avformat.dll //format INSTALL libavcodec/avcodec.dll //codec INSTALL libpostproc/postproc.dll INSTALL libswresample/swresample.dll INSTALL libswscale/swscale.dll INSTALL libavutil/avutil.dll INSTALL ffmpeg.exe INSTALL ffplay.exe
这些库是啥作用呢?我们后面会分析.1.4 测试
测试libx264的编码,都没法测试.没搞过,先留着吧.从configure的输出来看,肯定是编译进去了.2 librtmp
2.1 下载
git clone git://git.ffmpeg.org/rtmpdump
里面有一个文件夹:librtmp2.2 编译
由于librtmp 需要openssl,这下麻烦了.
算了,不编译了.只是分析一下.2.3 分析
rtmpdump的网址是:https://rtmpdump.mplayerhq.hu/
看一下它的说明:rtmpdump is a toolkit for RTMP streams. All forms of RTMP are supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.
librtmp 支持:rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.
来分析一下ffmpeg支持了rtmp的哪些协议:Enabled protocols: rtmp rtmpt
所以如果把librtmp编译进去后,ffmpeg会增加的协议是:rtmpe://, rtmpte://, and rtmps://.
这几个协议意思是:RTMP RTMPE = RTMP + ENC,已加密的RTMP RTMPS = RTMP + SSL,通过SSL传输层传输RTMP RTMPT = RTMP + HTTP,在HTTP协议中传输RTMP RTMPTE = RTMP + HTTP + ENC,在HTTP协议中传输已加密RTMP RTMPTS = RTMP + HTTP + SSL,通过SSL传输层在HTTP协议中传输RTMP
相关文章推荐
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- Managed Media Aggregation using Rtsp and Rtp
- [总结]FFMPEG视音频编解码零基础学习方法
- asp.net音频转换之.amr转.mp3(利用ffmpeg转换法)
- 利用Ffmpeg获得flv视频缩略图和视频时间的代码
- codeigniter教程之上传视频并使用ffmpeg转flv示例
- PHP使用ffmpeg给视频增加字幕显示的方法
- PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
- 快速解决Android平台移植ffmpeg的一些问题
- PHP使用FFmpeg获取视频播放总时长与码率等信息
- java调用ffmpeg实现视频转换的方法
- python+ffmpeg视频并发直播压力测试
- php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
- php使用ffmpeg向视频中添加文字字幕的实现方法
- [总结]FFMPEG视音频编解码零基础学习方法
- ffmpeg的headers设置
- ffmpeg从rtsp抓流存flv[c# NReco.VideoConverter flv]
- FFMPEG 从rtsp抓取流,转存为flv文件。C语言代码方式.
- ffmpeg mp4 to hls