window下通过msys2编译libx264.lib

msys2的下载地址为:http://www.msys2.org/
首先下载msys2并安装软件,安装时可以选择安装路径,我选择的是安装目录为:“D:\msys2”,安装完毕之后双击如下图标,
得到如下界面,说明你已经安装成功了:
1)首先安装gcc软件包,用于编译c语言代码
输入pacman -Sl | grep gcc 查看可用的安装包,可以看到如下信息
mingw32 mingw-w64-i686-gcc 4.9.1-3
mingw64 mingw-64-x86_64-gcc 4.9.1-3
msys gcc 4.8.2-2
输入pacman -S mingw-w64-i686-gcc,安装mingw-w64-i686-gcc软件包;
输入pacman -S mingw-64-x86_64-gcc,安装mingw-64-x86_64-gcc软件包;
输入pacman -S gcc,安装gcc软件包;
输入gcc --version,可以看到版本信息,则说明软件包安装成功。
2)安装yasm,这个软件包用于编译汇编代码,因为x264源码中含有汇编函数
按照第1)步骤,首先输入pacman -Sl | grep yasm 查看可用的安装包,然后输入pacman -S yasm,安装yasm软件包;
3)安装make软件包
按照第1)步骤,首先输入pacman -Sl | grep make 查看可用的安装包,然后输入pacman -S make,安装make软件包;
4)下载一份x264源代码,下载地址为:http://www.videolan.org/developers/x264.html ,并将源码拷贝到msys2安装目录下的home目录下,我的家目录为:D:\msys2\home
5)通过以下命令,编译libx264.lib库
a)输入“./configure --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def”,配置环境,通过这么配置可以直接生成“libx264.dll”,“libx264.def”文件,这里面的def文件用于后面生成库文件
b)输入“make”,编译
c)输入“make install”,安装(可选)
生成“libx264.dll”和“libx264.def”文件之后, 使用VC自带的lib生成工具“LIB”,生成“libx264.lib”文件。使用“Visual Studio command prompt”,切换至x264源代码目录,输入以下命令:
若要生成32位lib文件则输入如下命令:
lib /machine:i386 /def:libx264.def
若要生成64位lib文件则输入如下命令:
lib /machine:X64 /def:libx264.def
即可生成libx264.lib库文件。
下面即可调用libx264.lib和libx264.dll文件,实现编码函数的调用了。


fmpeg中第三方库的编译_libx264和librtmp

在前一篇blog中编译ffmpeg,是没有添加进任何库的.但是ffplay照样可以播放本地flv文件,播放rtmp协议,其中的编解码是h264和aac的.也就是说没有第三方库的支持,ffmpeg是支持h264和aac解码的.分析一下ffmpeg的configure的输出:

Enabled decoders:  //解码器 aac和h264都支持
aac ... h264 ....Enabled encoders:  //编码器支持aac,h264就不支持了
aac ...Enabled protocols:  //协议支持hls和rtmphls         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
  • 1

还有两个相关的网址:

http://www.x264.nl/x264_main.php
http://www.videolan.org/developers/x264.html  //直接点下载不行.

1.2 编译x264

6.在开始菜单中运行 VS2015 x64 Native Tools Command Prompt
7.在控制台中运行:
d:\msys64\msys2_shell.cmd -mingw64 -msys -use-full-path

./configure --host=mingw64 --enable-static --prefix=/home/x264-bin

启动:C:\MinGW\msys\1.0\msys.bat,cd到x264库的目录

这个不能只选static,因为static只能产生.a文件,不能产生lib和dll动态库

$./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才能编译出ffplayEnabled programs: //编译出来的执行文件
ffmpeg ffplayExternal libraries: //扩展库,libx264是新增加的
iconv  libx264  sdlEnabled decoders: //解码器
aac         ...Enabled encoders: //编码器 , libx264 是新加的
aac         libx264 ...Enabled hwaccels:  //硬件加速器Enabled parsers:   //解析器
aac   h264 vp9Enabled demuxers:  解复用,也就是封装解析
hls         ....Enabled muxers:  合并器
mp3...Enabled protocols: 协议
hls    rtmpEnabled 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
  • 1

里面有一个文件夹:librtmp

2.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://.
  • 1

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

fmpeg 编译编码 _libx264和librtmp相关推荐

  1. javac编译 编码GBK的不可映射字符

    javac编译 编码GBK的不可映射字符 时间:2015-02-02 17:19:38      阅读:8928      评论:0      收藏:0      [点我收藏+] 标签: 使用命令行j ...

  2. RTMPdump(libRTMP) 源代码分析 3: AMF编码

    2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...

  3. WheelTec ROS 机器人小车 ROS2 编码编译解决

    1. Could not find a package configuration file provided by "async_web_server_cpp" sudo apt ...

  4. C++实现RTMP协议发送H.264编码及AAC编码的音视频

    C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司 ...

  5. RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播

    RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播 摘要: RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播 RTMP(Real Time Messaging Pro ...

  6. 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  7. 实现RTMP协议发送H.264编码及AAC编码的音视频

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  8. RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)

    2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...

  9. 编码文件AndroidStudio初体验:解决Execution failed for task ':TestAndroid:compileDebug'.

    最近研究编码文件,稍微总结一下,以后继续补充: Execution failed for task ':TestAndroid:compileDebug'. 有各种各样原因,具体就请自己进cmd编译看 ...

最新文章

  1. 承德大数据产业发展态势良好
  2. 继续说说美国互联网版权监管法案(SOPA)
  3. 前端技术分享:锥形渐变conic-gradient你了解多少?
  4. 毕业设计(论文)-c++小型ftp服务器系统【毕业论文】.doc,毕业设计(论文)-C++小型FTP服务器系统.doc...
  5. 使用arm混合汇编计算两个64位的和_混合使用C、C++和汇编语之: C、C++ 和 ARM 汇编语言之间的调用...
  6. startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数
  7. 图像分割-基本边缘检测roberts,prewitt,sobel,canny,laplace
  8. 【翻译】使用Ext JS设计响应式应用程序
  9. 什么是python之禅_【Python面试】你了解什么是 Python 之禅么?
  10. bzoj 1083: [SCOI2005]繁忙的都市
  11. IDEA 设置文档注释
  12. python 读取文件到字典读取顺序_Python用list或dict字段模式读取文件的方法
  13. 2022年最新《谷粒学院开发教程》:7 - 渲染前台页面
  14. termios结构体说明【转】
  15. flask url_for()和redirect的区别
  16. 软件工程第二次作业--结对编程
  17. 搭载敏捷飞天底座 阿里云专有云敏捷版全面升级
  18. TCP重点系列之sack介绍
  19. 模式识别的概念、方法及应用
  20. Python判断两个数中最大值的几种方法,可以去跟小伙伴炫(zhuang)耀(bi)了!

热门文章

  1. php打开gd和mysql_PHP怎么开启mysql, gd, curl, mbstring支持?
  2. oracle数据库查询表语句,oracle数据库重要的查询语句
  3. handler post r 同一个线程的疑惑
  4. thinkphp5是不是php,我对ThinkPHP5和Laravel5的一些看法
  5. 计算机基础办公应用考试试题,计算机基础考试试题库和答案.doc
  6. 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
  7. 本地html app跨域,本地webapp是怎么解决跨域问题的?
  8. maven_Maven排除所有传递依赖项
  9. Centos 7 添加新磁盘
  10. linux操作普通文件夹,Linux学习--2.文件管理的基本命令