流媒体01:VLC-2.2.1编译

海狗哥的流媒体空间大部分介绍VLC的编译,跟踪了0.8.6i到1.0.X版本的编译方法,最近又把VLC-2.2.1编译了一下。
比起几年前的编译过程,VLC-2.2.1的编译错误更少,只是编译的文档还是没有同步更新。

VLC的wiki中Win32Compile,提供了三个环境的编译方法:

  • 官方推荐Linux(Ubuntu)下,使用交叉编译工具MinGW。
  • Windows下使用MSYS+MinGW,此方法并不受官方支持
  • Windows下使用Cygwin编译,此方法为容易出错的(error-prone)和龟速的(slow),不被推荐。

其实,Linux下使用MinGW和Cygwin下使用MinGW本质上是一样的。本文就介绍在Cygwin下编译VLC-2.2.1。

环境搭建

请阅读前一篇博文Cygwin01:Cygwin的安装配置,安装好Cygwin环境。如果对于Cygwin操作不熟悉,请先看几年前录制的VLC编译视频
参考:Win32CompileMSYS
源码:vlc-2.2.1.tar.xz。
库: vlc-contrib-i686-w64-mingw32-20150630.tar.bz2。
rcc.exe:使用压缩工具打开vlc-contrib-i686-w64-mingw32-20150630.tar.bz2,提取i686-w64-mingw32/bin/rcc.exe
以上资料也可到汪汪的网盘下载,路径为/VLC/2.1.1
请将以上三个文件放置到D:\下。

开启Cygwin,执行如下命令。

12
$ cp /cygdrive/d/vlc-* .$ cp /cygdrive/d/rcc.exe .

完成后,大概是如下样子。

123
learnit@learnit-PC ~$ lsrcc.exe  vlc-2.2.1.tar.xz  vlc-contrib-i686-w64-mingw32-20150630.tar.bz2

解压源码

执行如下命令。

12
$ tar xJvf vlc-2.2.1.tar.xz$ cd vlc-2.2.1/

准备库

执行如下命令。

12
$ cd contrib/$ mkdir win32; cd win32

因为VLC官网提供的库是与VLC某版本对应的,我们需要手动将下载的库更改为最新的库,防止其到官网下载最新的库。

1
$ mv ~/vlc-contrib-i686-w64-mingw32-20150630.tar.bz2 vlc-contrib-i686-w64-mingw32-latest.tar.bz2

编译库。

12
$ ../bootstrap --build=i686-w64-mingw32$ make prebuilt

做一些清理工作。

1
$ rm ../i686-w64-mingw32/bin/{luac,moc,rcc,uic}

不知道为什么(没仔细研究脚本),在执行完make prebuilt后,库路径下bin/rcc.exe被删除了,故,手动复制将其恢复。

12
$ cp /cygdrive/d/rcc.exe ../i686-w64-mingw32/bin$ cd ../../ # 回到vlc源码根目录

编译源码

编译时遇到了如下错误。

1
moc.exe: error while loading shared libraries: libstdc++-6.dll: cannot open shared object file: No such file or directory

没有研究明白为什么libstdc++-6.dll找不到,手动将其添加到环境变量中。

1
$ export PATH=/usr/i686-w64-mingw32/sys-root/mingw/bin/:$PATH

再执行如下命令。

123
$ ./bootstrap$ mkdir win32; cd win32$ ../extras/package/win32/configure.sh --host=i686-w64-mingw32

configure完成后,大概是如下样子。

12345678910
libvlc configuration--------------------version               : 2.2.1system                : mingw32architecture          : i686 mmx sse sse2optimizations         : yesvlc aliases           : cvlc rvlc qvlc svlc

To build vlc and its plugins, type `make', or `./compile' if you like nice colors.

根据CPU内核个数,执行make命令。

1
make -j4 # 4核CPU

之后是漫长的等待,一般不会出错。

打包

执行如下命令。

1
$ make package-win-common

执行完成后,当前目录下会生成vlc-2.2.1目录,即为绿色版VLC。

问题

运行VLC没有界面,原因是libqt4_plugin.dll需要调用libstdc++-6.dlllibgcc_s_sjlj-1.dll库,没研究明白为何编译时并没有静态加载这两个库。
解决办法为将这两个库复制到打包目录即可。

1234567
$ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/{libstdc++-6.dll,libgcc_s_sjlj-1.dll} vlc-2.2.1/$ ls vlc-2.2.1/AUTHORS.txt          libvlc.dll.manifest  plugins     vlc.exeCOPYING.txt          libvlccore.dll       README.txt  vlc.exe.manifestlibgcc_s_sjlj-1.dll  locale               sdk         vlc.icolibstdc++-6.dll      lua                  skins       vlc-cache-gen.exelibvlc.dll           NEWS.txt             THANKS.txt

运行测试。

其他

VLC官网FTP,vlc目录中有所有版本的源码和二进制文件。每个版本文件夹下win32win64为Windows的发布目录,zip,7z为免安装绿色版,exe为安装版,xpi是Firefox的扩展插件。

~~ EOF ~~

时间: 2024-12-26 19:58:13

流媒体01:VLC-2.2.1编译的相关文章

gentoo vlc qt5环境下编译失败

之前在虚拟机里面安装了个gentoo,用来尝试安装kde5.在升级系统的时候,发现vlc一直编译失败(好像是phonon引入的).查了下发现是vlc在编译的时候,发现了qt5,但是按照qt4的方式编译了,导致自身图形界面相关的类编译失败. 编译失败的信息: [cce] make[6]: Entering directory '/var/tmp/portage/media-video/vlc-2.1.4/work/vlc-2.1.4/modules/gui/qt4' ../../../doltli

Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行

  如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!好了,废话不多说,就开始吧,本文将描述基础环境的搭建,以及将应用在android环境中调试.发布.运行,iOS部分将在后面的文章中专门讲解. 一.搭建环境 1. 安装 VS2015. 2. 安装 Xamarin.我安装的是目前的最新版本:Xamarin.VisualStudio_4.2.0.703.msi. 3. 安装JD

Linux下如何编译Android-VLC开源播放器

这两天需要做音视频播放相关的东西,所以重新找了目前android下的解码库.Android自带的解码库支持不全,因此很多第三方播放器都是自带解码器,绝大部分都是使用FFMpeg作为解码库.我11年的时候也弄过视频播放器,当时也是基于FFMpeg来做.那时候网上有关Android视频解码库的资料不多,只在git上找到一个人移植FFMpeg,把它弄下来编译,有兴趣可以看看当时的文章:Android 视频播放器 faplayer 编译 . 言归正传,今天的主角是大名鼎鼎的VLC,做过视频播放器的人,应

用vlc搭建简单流媒体服务器(UDP和TCP方式)

VLC不仅仅是个播放器,也可以作为流媒体服务器使用.这个网上有相关的资料,我就不多说了. 声明下本文用的VLC版本:2.0.3 用VLC搭建基于UDP的流媒体服务器 流媒体服务器大多数是基于UDP的,这个在VLC中也有好几种实现,我这里只列出我用到的几个. 1.UDP(legacy)传统模式 服务端操作 打开"媒体--流"选项,如图所示: 点击"添加"按钮选择流媒体文件,然后点击"串流"按钮 点击"下一个"后,在"目

Mysql 之 添加innodb支持

在对mysql进行编译安装时,当安装完成后有时会发现不支持innodb存储引擎,这是因为编译安装时缺少支持innodb的参数: --with-plugins=PLUGIN[,PLUGIN..] Plugins to include in mysqld. (default is: none) Must be a configuration name or a comma separated list of plugins. Available configurations are: none ma

20个令人惊叹的桌面Docker容器

大家好,今天我们会列出一些运行在Docker容器中的很棒的桌面软件,我们可以在自己的桌面系统中运行它们.Docker 是一个开源项目,提供了一个可以打包.装载和运行任何应用的轻量级容器的开放平台.它没有语言支持.框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行.它可以使部署和扩展web应用程序.数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商.它主要是由开发.运维工程师使用的,因为它简单.快速和方便,可以用来测试和辅助开发他们产品,但是我们也可以在桌面环境使用

Java反射通过setAccessible(true)真的改变了final属性值么?

问题描述 问题如标题经过测试,Java反射机制并不能真正实例里的final属性值.写个例子:packagecom.jj.My;publicclassMy{privateintvalue=1;publicintgetValue(){returnvalue}}packagecom.jj.MyTest;publicclassMyTest{Classc=Class.forName("com.jj.My");Objectobj=c.newInstance();Fieldf=c.getDeclar

Nokia在印度被评为最值得信赖的品牌

来自印度孟买的消息,在Trust Research Advisory (TRA)公司近日举行了一次名为"2011印度调研之品牌信赖度报告"的调查中显示,诺基亚是印度人最信赖的品牌.这次涵盖61项问题的调研中,参与调查的品牌多达16,000多个,有效受访者2,310,调查覆盖印度九大主要城市. 这次涵盖61项问题的调研中,参与调查的品牌多达16,000多个,有效受访者2,310,调查覆盖印度九大主要城市.调查结果显示,排名前五的"最值得信赖品牌"如下: 第一名:htt

流媒体03:VLC2.2.1的ActiveX编译

VLC2.2.1的ActiveX以及Firefox插件已经从原有的代码中移除,另存了一个工程.本文介绍ActiveX的编译. 环境 与交叉编译VLC2.2.1一样的环境,请参考流媒体02:Linux交叉编译VLC-2.2.1. 过程 在此只记录命令. 12345678910 $ git clone git://git.videolan.org/npapi-vlc.git$ cd npapi-vlc$ git submodule init$ git submodule update$ export