VLC源代码分析
一、VLC简介
VLC的全名是Video Lan Client,是一个开源的、跨平台的视频播放器。VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得/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、Command line
浏览器插件:ActiveX、Mozilla(firefox) 
实际上为了更清晰一点,我们可以反过来说说VLC不支持哪些常见的。首先是RealVideo(Real的Audio部分支持),因为Real的Video加码器存在版权的问题。实际上VLC 0.9.0已经加入了RealVideo的支持,但是需要额外的解码器(类似MPlayer)。另外,VLC不支持3GP的音频格式AMR。
VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。
至于为什么叫VideoLan Client,是因为以前还有一个VideoLan Server的项目(简称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:/
VLC下载页面:/vlc/
VLC下载目录(源码和安装包):/pub/videolan/vlc/
VLC Nightly Builds: /
VLC 开发Wiki:/Developers_Corner
VLC Win32第三方库预编译包下载目录:/pub/testing/win32/
VLC 官方论坛:/
VLC 邮件列表:/developers/lists.html
二、Windows平台编译
第一步,要创建编译VLC的环境。VLC在Windows下可以用Msys+MingW 或者Cygwin的方式来编译,二者大同小异,这里主要介绍Cygwin。
Cygwin是一个在Windows下面模拟Linux环境的东西。它提供了很多库和应用程序,让你可以像在Linux上一样来使用Windows。你需要在win/ 下载一个cygwin的安装程序。然后选择一个cygwin的源来下载所需要的库,国内的话到 ftp://ftp.sjtu.edu/cygwin/和 win/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版本,可以从这里下载:/pub/videolan/vlc/,如果你需要下载实时最新的库,就要从VLC的源码库上取下来了。现在VLC改用git了,使用命令: git clone git:///vlc.git
 
VLC还需要很多第三方的库,你可以取得源码来编译,这部分可以参考Linux上的VLC编译的文章。在Windows上VLC做了一个编译好的win32第三方库的包,可以从/pub/testing/win32/ 下载。包需要解压到根目录 ‘/’,事实上这些库都位于’/usr/win32-branch’里边。
在cygwin中进入vlc的主目录,运行bootstrap,’./bootstrap’。在等待它结束之前,我们先来看一下如何配置VLC的编译。运行 ‘./configure -h >’就可以把配置的选项信息都输出到 中,然后慢慢来研究。里面大多是启用、禁用某些特性和功能模块,或者配置某些模块需要的库的路径等信息。为了方便可以写一个简单的脚本来做这件事,当然这个不是必需的。 
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 \
bootstrap 软件
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 \
–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就编译好了。直接双击主目录里边的应该就可以运行了。
为了方便可以把它打包,最简单的是 ‘make package-win32-base’,它将创建一个子目录来存放所有运行所需的东西,这个目录就是一个绿版的VLC啦。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。