VLC的全名是VideoLan Client,是一个开源的、跨平台的视频播放器。VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得http://www.videolan.org/vlc/features.html,下面给出一个简要的不完整的列表:
操作系统:Windows、WinCE、Linux、MacOSX、BEOS、BSD
访问形式:文件、DVD/VCD/CD、http、ftp、mms、TCP、UDP、RTP、IP组播、IPv6、rtsp
编码格式:MPEG*、DIVX、WMV、MOV、3GP、FLV、H.263、H.264、FLAC
视频字幕:DVD、DVB、Text、Vobsub
视频输出:DirectX、X11、XVideo、SDL、FrameBuffer、ASCII
控制界面:WxWidgets、QT4、Web、Telnet、Commandline
浏览器插件:ActiveX、Mozilla(firefox)
实际上为了更清晰一点,我们可以反过来说说VLC不支持哪些常见的。首先是RealVideo(Real的Audio部分支持),因为Real的Video加码器存在版权的问题。实际上VLC 0.9.0已经加入了RealVideo的支持,但是需要额外的解码器(类似MPlayer)。另外,VLC不支持3GP的音频格式AMR。
VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。
至于为什么叫VideoLan Client,是因为以前还有一个VideoLanServer的项目(简称VLS),而目前VLS的功能已经合并到VLC中来,所以VLC不仅仅是一个视频播放器,它也可以作为小型的视频服务器,更可以一边播放一边转码,把视频流发送到网络上。VLC最为突出的就是网络流的播放功能,例如MPEG2的UDP TS流的播放和转发,几乎是无可替代的。
对普通用户来说,VLC还有一个好处是不影响Windows中的解码器。VLC通常不影响也不依赖于系统中自带的解码器(除了realvideo和quicktime的类型),很绿色很环保;更不用担心流氓软件、广告插件之类的恶心的玩意儿。
从程序结构来看,VLC的可扩展性是相当优秀的。VLC绝大部分用高效的C代码来编写(少量的C++和汇编),但是实现了完全动态的模块化,所有功能包括程序框架本身都是module,可以在运行时载入,这使得VLC可以轻易的扩展多种功能并且容易维护。它的架构有一点类似于DirectShow的技术。
VLC也很注重版权方面的问题,你可以放心的自由的使用而不需要为版权的问题担心——VLC只包括免费的、自由的库。VLC基于GPL,因此也可以用于商业应用,只需要保留GPL,以及公开源代码,如果你修改了VLC的话。
下面是VLC相关的一些链接
VLC官方网站:http://www.videolan.org/
VLC下载页面:http://www.videolan.org/vlc/
VLC下载目录(源码和安装包):http://download.videolan.org/pub/videolan/vlc/
VLC Nightly Builds:http://nightlies.videolan.org/
VLC 开发Wiki:http://wiki.videolan.org/Developers_Corner
VLC Win32第三方库预编译包下载目录:http://download.videolan.org/pub/testing/win32/
VLC 官方论坛:http://forum.videolan.org/
VLC 邮件列表:http://www.videolan.org/developers/lists.html
第一步,要创建编译VLC的环境。VLC在Windows下可以用Msys+MingW 或者Cygwin的方式来编译,二者大同小异,这里主要介绍Cygwin。
Cygwin是一个在Windows下面模拟Linux环境的东西。它提供了很多库和应用程序,让你可以像在Linux上一样来使用Windows。你需要在http://www.cygwin.com/ 下载一个cygwin的安装程序setup.exe。然后选择一个cygwin的源来下载所需要的库,国内的话到ftp://ftp.sjtu.edu.cn/cygwin/和 http://www.cygwin.cn/pub相对来说会快一点。第一次安装,除了默认的库以外,我们还需要加入一些库来支持VLC的编译,包括
Archive (目录)
unzip
zip
Devel
autoconf
automake
binutils
cvs
expat
gcc
gcc-core
gcc-g++
gcc-mingw
gcc-mingw-core
gcc-mingw-g++
gdb (如果你需要调试的话)
gettext
gettext-devel
git (不一定需要)
ibiconv
ibtool
make
mingw-runtime
nasm
patchutils
pkg-config
subversion
Editor
vim (有了它方便点)
Libs
libgcrypt
Web //这两个可以不要,如果你不想编译第三方库
curl (optional: for building extras/contrib)
wget (optional: for building extras/contrib)
然后是下载所需要版本的VLC的源代码。对于Release版本,可以从这里下载:http://download.videolan.org/pub/videolan/vlc/,如果你需要下载实时最新的库,就要从VLC的源码库上取下来了。现在VLC改用git了,使用命令: git clone git://git.videolan.org/vlc.git
VLC还需要很多第三方的库,你可以取得源码来编译,这部分可以参考Linux上的VLC编译的文章。在Windows上VLC做了一个编译好的win32第三方库的包,可以从http://download.videolan.org/pub/testing/win32/ 下载。包需要解压到根目录 ‘/’,事实上这些库都位于’/usr/win32-branch’里边。
在cygwin中进入vlc的主目录,运行bootstrap,’./bootstrap’。在等待它结束之前,我们先来看一下如何配置VLC的编译。运行 ‘./configure -h >cfg_opt.txt’就可以把配置的选项信息都输出到 cfg_opt.txt中,然后慢慢来研究。里面大多是启用、禁用某些特性和功能模块,或者配置某些模块需要的库的路径等信息。为了方便可以写一个简单的脚本来做这件事,当然这个不是必需的。
PATH=/usr/win32-branch/bin:$PATH \
PKG_CONFIG_PATH=/usr/win32-branch/lib/pkgconfig \
CPPFLAGS=”-I/usr/win32-branch/include -I/usr/win32-branch/include/ebml” \
LDFLAGS=-L/usr/win32-branch/lib \
CC=”gcc -mno-cygwin” CXX=”g++ -mno-cygwin” \
./configure \
–host=i686-pc-mingw32 \
–disable-gtk \
–enable-nls –enable-sdl –with-sdl-config-path=/usr/win32-branch/bin \
–enable-ffmpeg –with-ffmpeg-mp3lame –with-ffmpeg-faac \
–with-ffmpeg-zlib –enable-faad –enable-flac –enable-theora \
–with-wx-config-path=/usr/win32-branch/bin \
–with-freetype-config-path=/usr/win32-branch/bin \
–with-fribidi-config-path=/usr/win32-branch/bin \
–enable-live555 –with-live555-tree=/usr/win32-branch/live.com \
–enable-caca –with-caca-config-path=/usr/win32-branch/bin \
–with-xml2-config-path=/usr/win32-branch/bin \
–with-dvdnav-config-path=/usr/win32-branch/bin \
–disable-cddax –disable-vcdx –enable-goom \
–enable-twolame –enable-dvdread \
–enable-release –enable-dca \
–enable-mkv \
–enable-quicktime –enable-mozilla \
–with-mozilla-sdk-path=/usr/win32-branch/gecko-sdk \
–enable-mostly-builtin \
&& make
例如把这个文件保存为 ‘mybuild’,等bootstrp运行结束之后,我们只需要运行一下 mybuild就会开始配置和编译了。这通常需要挺长的时间,如果运气好,在漫长的等待之后make运行成功,vlc就编译好了。直接双击主目录里边的vlc.exe应该就可以运行了。
为了方便可以把它打包,最简单的是 ‘make package-win32-base’,它将创建一个子目录来存放所有运行所需的东西,这个目录就是一个绿色版的VLC啦。
当然如果你运气没那么棒,可能会碰到各种各样的错误,例如在boottrap或者configure中出错,通常是因为没安装某个库或者库的版本不合适;也可能碰到编译的错误,尝试去google一下。
本文参考 http://wiki.videolan.org/Win32CompileCygwinNew
先下载源代码,把源代码解压之后也是先运行一下bootstrap,看看缺什么工具没有,例如gcc、make、libtool、automake、autoconfig等是否有合适的版本。如果不合适的话就用你喜欢的方式去升级或者安装。
下面最麻烦的一步来了。VLC在Linux上没有给出和Windows上类似的第三方库的预编译包,你必须去自己获得并编译这些库。这些库的数量取决于你的配置选项。VLC给出了一个自动化的解决方案,关注一下主目录\extras\contrib,里边有一些工具来帮助你自动下载、patch和编译所有可能用到的第三方库。先运行一下那个目录下的bootstrap,如果缺少***.mak的话可以到VLC的代码库中找一下,是一个系统相关的文件,然后简单的一句make就可以了。如果你对这些库比较熟悉的话最好先手动筛选一下,有一些可能不是你所需要的,而下载他们可能需要很长的时间。
在漫长的等待之后,如果一切顺利(我几乎不相信会这样),这一步就算完成了。可能遇到的问题有:下载实在太慢,可以用其他下载工具把库的代码包下下来放到\extras\contrib\src里边;如果下载一半断掉,可以把那个不完整的文件删掉重新再运行make。
这一步做完之后和windows上的编译就几乎一样了。写一个配置脚本然后运行它。例如一个配置脚本:
./configure \
–enable-release \
–disable-skins2 \
–disable-wxwidgets \
–enable-mozilla \
–with-mozilla-sdk-path=./gecko-sdk \
–disable-sout \
–disable-httpd \
–enable-live555 \
–disable-dvdnav \
–disable-libcdio \
–disable-libcddb \
–disable-cdda \
–disable-vcd \
–disable-dvdread \
–disable-smb \
–disable-cmml \
–disable-alsa \
–disable-opengl \
–disable-png \
–disable-screen \
–disable-mkv \
–disable-mod \
–disable-mpc \
–disable-libtar \
–disable-speex \
–disable-visual \
–disable-daap \
–disable-bonjour \
–disable-gnutls \
–enable-faad \
–enable-mostly-builtin
配置完之后再运行make就可以了。
参考:http://wiki.videolan.org/UnixCompile