2023年11月27日发(作者:)

Linux下的IGMP测试环境搭建--VLC Player的安装和使用

2010-03-24 22:34

Linux下的IGMP IPV6测试环境搭

所用软件: VLC media player

# vlc --version

VLC media player 1.0.5 Goldeneye

VLC 版本 1.0.5 Goldeneye

编译者**************************.com

编译器: gcc version 4.4.3 20100127 (Red Hat 4.4.3-4) (GCC)

本程序在法律许可范围内无任何担保。

您可以依照 GNU 一般公众 许可证发布它;

请查看名为 COPYING 的文件以 获取详细信息。

VideoLAN 小组编写; 请查看 AUTHORS 文件。

windows下常用的 版本是0.86a,设置比 较方便,我在linux下尝试 编译

0.86a的版 本,但是由于0.86a实在太 老,解决了N多依赖 后,make出现错 误。

所以我最终编译的是最新的版本v1.0.5

1:安装vlc

linux下编译vlc player非常麻 烦,因为有一系列的库依赖。如果在fedora

下,利用yum安装,倒 是很方便,执行yum install vlc,很快一切就可以搞定。

下面介绍源代码编译安装方法:

官方网站:/vlc/

源代码下载地址:/pub/videolan/vlc/

编译:./configure --enable-run-as-root prefix=/root/soft/vlc

期间肯定会提示一系列的库依赖,例如libmadlibavcodec等等, 当出错的时

候,就到google上搜索 相关的库,安装即可。

注意,我在configure的时候 加了一个选项,--enable-run-as-root,如果不

这个选项,安装完成后,无法以root用户运 vlc

VLC is not supposed to be run as root. Sorry.

If you need to use real-time priorities and/or privileged TCP ports

you can use vlcbak-wrapper (make sure it is Set-UID root and

cannot be run by non-trusted users first).

2:安装完成 之后,就可以运行了。

shell里输入vlc,即可调出vlcgui界面。

vlc可以播放 绝大多数视频和音频文件,可以作为播放器满足在linux下的娱

乐需求。

3VLC作为节目 源播放组播。

点击媒体--》串流, 添加一个节目源,点击右下角的串流,

点击目标,选中UDP,然后点 击添加:

在地址栏里填写组播地址,IPV4可以填写239.1.1.1,IPV6则填写

[ff02::1%eth0]

然后点击下一个,再点击串流。然后就OK

抓包可以看到,该串流已经正常输出了:

4VLC作为客户 端点播视频

点击媒体--》打开网 络串流,协议选择UDP,IP地址填 [ff02::1%wlan0] (

这里的接口是wlan0),点击播放 即可。

5:备注, 无论在windows或是linux下的vlc media player,均支 ipv6

协议。

要想播放组播流,需要关闭iptables规则

echo "2">>/proc/sys/net/ipv4/conf/all/force_igmp_version

vlc 就可以发出igmp v2的报文

类别:Linux | | 分享到i贴吧 | 浏览(221) | 评论 (0)

下一篇:Linux(IPV6) Ftp Server安装

最近读者:

登录后,您就出现在这

里。

VLC简介及使用说明

2010315

1,463 views

技术文档

没有评论

一、简介

VLC的全名是Video Lan Client,是一个开源的、跨平台的视频播放器。

VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里

获得/vlc/下面给出一个简要的不完

整的列表:

操作系统:WindowsWinCELinuxMacOSXBEOSBSD

访问形式:文件、DVD/VCD/CDhttpftpmmsTCPUDPRTPIP

组播、IPv6rtsp

编码格式:MPEG*DIVXWMVMOV3GPFLVH.263H.264FLAC

视频字幕:DVDDVBTextVobsub

视频输出:DirectXX11XVideoSDLFrameBufferASCII

控制界面:WxWidgetsQT4WebTelnetCommand line

浏览器插件:ActiveXMozillafirefox

实际上为了更清晰一点,我们可以反过来说说VLC不支持哪些常见的。

首先是RealVideoRealAudio部分支持),因为RealVideo加码器存在

版权的问题。实际上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

通常不影响也不依赖于系统中自带的解码器(除了realvideoquicktime的类

型),很绿色很环保;更不用担心流氓软件、广告插件之类的恶心的玩意儿。

从程序结构来看,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/

二、Windows平台编译

第一步,要创建编译VLC的环境。VLCWindows下可以用Msys+MingW

Cygwin的方式来编译,二者大同小异,这里主要介绍Cygwin

Cygwin是一个在Windows下面模拟Linux环境的东西。它提供了很多库

和应用程序,让你可以像在Linux上一样来使用Windows。你需要在

/ 下载一个cygwin的安装程序然后选择一

cygwin的源来下载所需要的库,国内的话到

ftp:///cygwin/ /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 (不一定需要)

libiconv

libtool

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还需要很多第三方的库,你可以取得源码来编译,这部分可以参考

Linux上的VLC编译的文章。WindowsVLC做了一个编译好的win32第三方

库的包,可以从/pub/testing/win32/ 下载。

包需要解压到根目录 /’,事实上这些库都位于’/usr/win32-branch’里边。

cygwin中进入vlc的主目录,运行bootstrap,’./bootstrap’。

在等待它结束之前,我们先来看一下如何配置VLC的编译。运行 ./configure

-h >cfg_’就可以把配置的选项信息都输出到 cfg_中,然后慢

慢来研究。里面大多是启用、禁用某些特性和功能模块,或者配置某些模块需要

的库的路径等信息。为了方便可以写一个简单的脚本来做这件事,当然这个不是

必需的。

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/

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啦。

当然如果你运气没那么棒,可能会碰到各种各样的错误,例如在

boottrap或者configure中出错,通常是因为没安装某个库或者库的版本不合

适;也可能碰到编译的错误,尝试去google一下。

本文参考 /Win32CompileCygwinNew

三、Linux平台编译

先下载源代码,把源代码解压之后也是先运行一下bootstrap,看看缺

什么工具没有,例如gccmakelibtoolautomakeautoconfig等是否有合

适的版本。如果不合适的话就用你喜欢的方式去升级或者安装。

下面最麻烦的一步来了。VLCLinux上没有给出和Windows上类似的

第三方库的预编译包,你必须去自己获得并编译这些库。这些库的数量取决于你

的配置选项。VLC给出了一个自动化的解决方案,关注一下主目录

extrascontrib,里边有一些工具来帮助你自动下载、patch和编译所有可能

用到的第三方库。先运行一下那个目录下的bootstrap,如果缺少***.mak的话

可以到VLC的代码库中找一下,是一个系统相关的文件,然后简单的一句make

就可以了。如果你对这些库比较熟悉的话最好先手动筛选一下,有一些可能不是

你所需要的,而下载他们可能需要很长的时间。

在漫长的等待之后,如果一切顺利(我几乎不相信会这样),这一步就

算完成了。可能遇到的问题有:下载实在太慢,可以用其他下载工具把库的代码

包下下来放到extrascontribsrc里边;如果下载一半断掉,可以把那个不完

整的文件删掉重新再运行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就可以了。

参考:/UnixCompile

四、使用

Windows下,默认情况,VLC的配置文件在 %APPDATA%vlcvlcrc%APPDATA%

XP下通常是 C:Documents and Settings用户名Application Data

Linux下,在用户home目录的/.vlc/

vlc的选项完全可以通过修改vlcrc来设置,界面只是略微方便一点

重置所有选项到默认状态:C:Program FilesVideoLANVLC>

reset-config

VLCvlcrc中指定的plugin-path,以及当前目录的modulesplugins目录

来递归查找pluginVLC的大部分功能都是通过plugin来实现的。VLC默认有

大量的动态插件,为了加快启动速度,vlc会在%APPDATA%vlccache中缓存

plugin的列表,选项plugins-cache=0可以禁止缓存plugin

打开一个UDP组播流,组播组 239.255.1.1,端口 4567,默认端口1234,对于

rtp协议,VLC会自动识别,写udp还是rtp都没问题

C:Program FilesVideoLANVLC> udp://@239.255.1.1:4567

在本地UDP端口 888 接收流, @”表示绑定一个地址,而不是连接该地址

C:Program FilesVideoLANVLC> udp://@888

串流输出,就是在播放的时候,以某种方式向外传送视频,在打开界面的串流/

保存 中设置会比较方便。

例如,循环播放 rtp方式传送到224.1.1.1端口1234, 同时显示

视频

loop :sout=#duplicate{dst=std{access=rtp,mux=ts,dst=224.1.1.1:1234},d

st=display}

例如,接收UDP端口888,数据全部保存到C:

udp://@888 :demux=dump :demuxdump-file=C:

关于Windows下视频输出模块

Direct3D 效果比DirectX差一点,但是方便截图,也可以在图像上实现alpha

DirectX:效果最好,利用DirectX的显示加速

OpenGL:在不同的硬件上表现不太一样

WinGDI:最慢的一种,不需要显卡加速

caca:用彩色的Assic字符来显示

临时启用某个视频输出,可以这样:C:Program

FilesVideoLANVLC-0.8.6e>vlc vout=caca

ActiveX控件

官方发布的VLC自带ActiveX控件 注册之后可以方便的在应用程序

和网页中使用VLC,注册的办法是

C:Program FilesVideoLANVLC-0.8.6e>regsvr32

ActiveX VLC的使用方法可以参考源代码中ActiveX目录的

ActiveX控件的接口有第一版和第二版,第一版简单,功能少,已

经不再维护建议用第二版本,功能多一点

Mozilla Plugin

你还可以在WindowsLinuxFirefox中使用VLCWindows下可以在安装VLC

的时候选上Mozilla plugin,事实上它做的就是在

HKLM_Software_MozillaPlugin键下添加一个VLC的子键。Linux下可以把

(或者叫和插件目录放到Firefoxplugins目录,

来使之生效。

同样这适用于基于Xulrunner的应用程序,事实上像 MiroSongBirdxul

用都是用的这个插件。与ActiveX类似的,VLCMozilla Plugin也有两套接

口,建议用新的第二版。

注册表

WindowsVLC只使用很少量的注册表的信息,最重要的一条是

HKLM_Software_VLC键下的InstallDir项,VLCMozilla PluginActiveX

控件通过这一项来定位其插件的目录。TelnetHttp控制对VLC来说,控制界

面都是Interface类的模块,你可以使用各种控制模块。Windows下默认使用的

wxwidgets图形界面,还可以使用httptelnet等界面,来远程控制VLC

如果用VLC在服务器上专门作视频流转发一类的事情,这种远程界面可以帮上大

忙。

视频过滤器

0.8系列中有多达13种视频过滤器,为视频添加各种效果和特殊处理。

Skin2界面

一个漂亮一点的,可以换肤的界面。

其他的

播放DVDVCD光盘,打开DirectShow设备,播放当前屏幕…

一些问题

目前的VLC无法播放Real视频,如rmrmvb。其实从0.9版本的VLC开始可以

依赖其他解码器播放。但就目前测试的情况来看,顺序播放没问题,但是拖动则

效果很差。RTSP的播放,拖动有问题,在获取播放位置时有缺陷。例如和达尔

文服务器的配合。

五、视频播放的基本原理

几乎所有的视频播放器,如VLCMPlayerXine,包括DirectShow,在

播放视频的原理和架构上都是非常相似的,理解这个对理解VLC的源码会有事半

功倍的效果。

大致的来说,播放一个视频分为4个步骤:

1. acess 访问,或者理解为接收、获取、得到

2. demux 解复用,就是把通常合在一起的音频和视频分离(还有可能的

字幕)

3. decode 解码,包括音频和视频的解码

4. output 输出,也分为音频和视频的输出(aoutvout

拿播放一个UDP组播的MPEG TS流来说吧,access部分负责从网络接收

组播流,放到VLC的内存缓冲区中,access模块关注IP协议,如是否IPv6、组

播地址、组播协议、端口等信息;如果检测出来是RTP协议(RTP协议在UDP

部简单得加上了固定12个字节的信息),还要分析RTP头部信息。这部分可以

参看VLC源码 /modules/access/udp.c。在同目录下还可以看到大量的access

模块,如filehttpdvdftpsmbtcpdshowmmsv4l…等等

demux部分首先要解析TS流的信息。TS格式是MPEG2协议的一部分,

概括地说,TS通常是固定188字节的一个packet,一个TS流可以包含多个

program(节目),一个program又可以包含多个视频、音频、和文字信息的ES

流;每个ES流会有不同的PID标示。而又为了可以分析这些ES流,TS有一些

固定的PID用来间隔发送programes流信息的表格:PATPMT表。关于TS

格式的详细信息可以去google一下。VLC专门做了一个独立的库libdvbpsi

解析和编码TS流,而调用它的代码可以参见VLC源码 /modules/demux/ts.c

其实之所以需要demux,是因为音视频在制作的时候实际上都是独立编

码的,得到的是分开的数据,为了传输方便必须要用某种方式合起来,这就有了

各种封装格式也就有了demuxdemux分解出来的音频和视频流分别送往音频解

码器和视频解码器。因为原始的音视频都是占用大量空间,而且冗余度较高的数

据,通常在制作的时候就会进行某种压缩。这就是我们熟知的音视频编码格式,

包括MPEG1VCD)、MPEG2DVD)、MPEG4H.264rmvb等等。音视频解码器

的作用就是把这些压缩了的数据还原成原始的音视频数据。VLC解码MPEG2使用

了一个独立的库libmpeg2,调用它的源文件是 /modules/codec/libmpeg2.c

VLC关于编解码的模块都放在/modules/codec目录下,其中包括著名的庞大的

ffmpeg

解码器,例如视频解码器输出的是一张一张的类似位图格式的图像,但

是要让人从屏幕看得到,还需要一个视频输出的模块。当然可以像一个Win32

窗口程序那样直接把图像画到窗口DC上——VLC的一个输出模块WinGDI就是这

么干的,但是通常这太慢了,而且消耗大量的CPU。在Windows下比较好的办法

是用DirectX的接口,会自动调用显卡的加速功能。

这样的功能分解使得模块化更容易一点,每个模块住需要专注于自己的

事;从整体来说功能强大而且灵活。

但是事情总是不会那么简单。就拿access来说,媒体的访问是分层的,

RTSP就涉及到IPv4TCPUDPRTCPRTSP等多个层次的协议。有些视频格

式包括了传输、封装格式和编辑码格式如MPEG系列,有些封装格式是独立的容

器,但是很多人会误解它是编解码格式,如mkvavi这些。

音频和视频在demux之后就是独立的,但是需要有一套机制把它们同步

起来。同时我们需要有一套机制来控制速度、暂停、停止、跳进,获取各种媒体

信息,这些都是很复杂而又很重要的事情。

另外也许需要在某个地方插入一些修改,来实现某种效果。如音频的EQ

视频的亮度调整之类的,VLC专门设计了access_filteraudio_filter

video_filter类型的模块来做这一类事情。

VLC比较独特的地方是集成了原来的VLS的功能,这依赖于VLC

stream_output类型的模块,它们可以把正在播放的视频以某种方式重新转码和

发送出去,如httpUDP、文件等等。

MPlayer的结构与此是类似的,/stream目录对应的是access的功能,

/mpdemux对应的demux功能,/libmpcodecs是解码器,/libvo/libao2分别

是视频和音频的输出。

DirectShow也是类似的,不过分类更多一些更复杂一点。DirectShow

里面的模块叫做“filter”,filter之间通过”pin”来连接。access的模块对

应于DirectShow中的SourceFIlter这一类Filter只有输出pin没有输入pin

demux模块对应于splitter filter这种filter有一个输入pin多个输出pin

解码模块是一类transform filter,有一个输入pin、一个输出pin,输出模块

对应于readering filter有一个输入pin没有输出pin当然transform filter

不一定是解码器,也可能是某种其他的处理。

另外给出一个VLCAPI Document,参见:

/doc/

六、精简

VLC默认包含了大量的功能,超过2百个插件;Windows下安装包大小接

10MB,安装之后超过35MB。有时候如果我们只需要部分的功能,应该如何精

简它呢?

精简VLC的第一步是重新配置编译选项,将不需要的功能去掉。一个精

简配置脚本如下:

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

with-freetype-config-path=/usr/win32-branch/bin

with-fribidi-config-path=/usr/win32-branch/bin

disable-ffmpeg

disable-live555

disable-cddax

disable-vcdx

disable-skins2

disable-wxwidgets

disable-mozilla

disable-httpd

disable-dvdnav

disable-libcdio

disable-libcddb

disable-cdda

disable-sdl

disable-sdl-image

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

disable-vorbis

disable-real

disable-xml

disable-x264

enable-sout

enable-activex

enable-release

从这个脚本可见,主要是禁用了大量的功能。运行 ./configure -h

以显示每一个配置项的意义;如果还不清楚可以再去搜一下选项对应的库的位

置。ffmpeg是一个庞大的编解码库,但是MPEG2的解码可以利用另一个库

libmpeg2,所以在这里不需要它。

注意make完之后要用make package-win32-base来打一下包,打包时

会用strip工具来压缩每一个可执行文件。

但是这样还没有结束。配置项并不是很全面的,而且还会有一些小问

题,例如xml禁用了还会有。。。于是还需要手动的清理一下plugins目录里面

的插件,挑出没有用处的,这也需要对VLC模块的熟悉。或者使用Roger的笨方

法,一个一个试,对功能没有影响的就拿掉。SImpleTV0.4所使用的plugin

以下所示:

liba52sys_ liba52

用于AC3格式的音频解码,CCTV高清频道需要

liba52tofloat32_

liba52tospdif_

liba52_

libaccess_file_ 文件访问,播

放文件需要

libaccess_http_ HTTP访问模

libaccess_output_file_ sout的文件模块,用

于录制

libaccess_udp_ UDP访问模

libaout_directx_ DirectX的声

音输出,默认的声音输出模块

libdeinterlace_ 解交错的

vout-filter模块

libdirect3d_ Direc

t3D视频输出模块,在上面可以半透明。。。

libfixed32tofloat32_ 一些数据转换模块

libfixed32tos16_

libfloat32tos16_

libfloat32tos8_

libfloat32tou16_

libfloat32tou8_

libfloat32_mixer_

libglwin32_ OpenGL

视频输出模块

libi420_ymga_

libi422_yuy2_

libipv4_ IPv4

网络模块

libipv6_ IPv6

网络模块

liblibmpeg2_ libmpeg2

解码全靠它

liblogger_ 日志模

块,调试必备

libmemcpy_ 好像是

利用各种CPU指令加速内存拷贝的

libmpeg_audio_ MPEG音频的

解码模块

libmpgatofixed32_

libmpga_

libmux_dummy_

libpacketizer_mpegvideo_

libs16tofixed32_

libs16tofloat32swab_

libs16tofloat32_

libs8tofloat32_

libsimple_channel_mixer_

libstream_out_display_ 的模块 。。。 sout

libstream_out_duplicate_

libstream_out_standard_

libtrivial_channel_mixer_

libtrivial_mixer_

libtrivial_resampler_

libts_

TS流的解复用模块

libu8tofixed32_

libu8tofloat32_

libugly_resampler_

libvout_directx_ DirectX视频

输出模块

libwingdi_ G

DI视频输出模块

作为ActiveX控件的VLC,只需要这些模块和就足够了。当

然如果使用了还要带上。

VLC 0.9.2 正式发布 && VLC播放Rm Rmvb的插件

新的VLC加入了RealVideodemuxcodec module已经可以播放rm

rmvb格式的real视频,但是需要下载以下两个附件:

拷贝到 C:Program FilesVideoLANVLC

拷贝到 C:Program FilesVideoLANVLCplugins

这两个文件也可以从MPlayerwin32 codec中拷贝出来。从测试的情

况来看,顺序播放没有什么问题,但是跳转的时候比较慢,图像不太稳定

这里有对VLC新特性的介绍

/What_is_cool_in_0.9

Release Note/developers/vlc/NEWS

下载目录:/pub/vlc/0.9.2/win32/

下载链接(exe):

/pub/vlc/0.9.2/win32/

七、将VLC嵌入自己的应用

总的来说把VLC内嵌入自己的应用有4种途径:

•直接调用VLC进程

VLCplugin for Mozilla

VLCActiveX插件

•调用libvlc

当然,理论上也可以把VLC的源码直接扣出一部分来放到自己的程序中,

不过这种方法难度太大没多大意义。

先说第一种办法,别怀疑,这是非常有用的一种解决方案,特别是对于

转码、流转发等应用,通常直接调用VLC就可以了。VLCHTTPTelnet

Interface模块(就是和用户交互的界面),也很方便和远程交互。而且跨平台

应用也非常方便,只需要安装不同平台的VLC就行了。直接调用VLC的话最重要

的就是参数,可以从 -H 中获取比较详细的命令行参数介绍。对于转码、

转发的,命令行参数会比较复杂,可以用GUI先试一下,然后把界面上的

Generated stream output string拷下来。

VLCMozilla plugin除了用于Firefoxweb页之外,还可以用于任

XUL-base的应用,这种应用通常使用xulrunner来启动。XUL是一种用XML

来写界面的语言,有点像HTML而且也兼容大部分HTML标记,Firefox就是用XUL

来写的。VLCMozilla插件通常用Javascript来控制,详细的接口文档可以

参考这里:

/doc/play-howto/en/#id310965 这个接口

有比较老的第一版和比较新的第二版,建议用新的,功能多一些。用VLC

Mozilla插件的应用并不少,例如比较出名的MiroSongbird因为这个好处是

显而易见的:跨平台、可控性强、使用简单;限制也很明显:专为Mozilla设计,

应用的范围很窄。

VLCActiveX插件只能用于Windows平台,当然这是因为ActiveX

是微软的东西。但是不得不说这个还是很好用的。无论是C++C#VB还是网页,

都可以轻松地将这个ActiveX利用起来。关于这个的VLC官方文档在这里

/ActiveX_Controls 开发、使用之前别忘了先要注册

ActiveX控件,方法是运行 regsvr32 Roger 之前写的 SimpleTV

是调用了VLCActiveX控件,所以这也可以作为一个示例的代码,可以主要看

看怎么调用这个控件来做串流的代码:

//Create Option for the plugin

bool bIPv6 = false;

if (strstr (szMRL, ::))

{

bIPv6 = true;

}

tagVARIANT opt,var,ip6;

CString sout, ipv6 = ipv6=1;

SAFEARRAY *psa;

long index;

SAFEARRAYBOUND bound[1] = {0};

bound[0].cElements = bIPv6 ? 2 : 1;

if (m_ayWhenRecording)

{

(

sout=#duplicate{dst=display,dst=std{access=file,mux=ts,dst=%s}},

strName);

}

else

{

(

sout=#duplicate{dst=std{access=file,mux=ts,dst=%s}}, strName);

}

= VT_BSTR;

l = ysString();

psa = SafeArrayCreate (VT_VARIANT, 1, bound);

index = 0;

SafeArrayPutElement (psa, &index, &var);

if (bIPv6)

{

= VT_BSTR;

l = ysString();

index = 1;

SafeArrayPutElement (psa, &index, &ip6);

}

= VT_ARRAY | VT_BSTR;

= psa;

tagVARIANT nul;

= VT_NULL;

m_ylist ().add (szMRL, nul, opt);

m_ylist ().next ();

m_ylist ().play ();

很多人调用VLCActiveX控件都会遇到一个问提就是,播放没有反

应。大部分的原因都是因为plugins的问题。VLC作为exe运行时会递归搜索当

前目录下的modulesplugins目录来寻找plugin,但是当以ActiveX控件运

行时,默认只会检查注册表的HKLM_Software_VideoLan_VLC_InstallDir,并添

plugins作为模块搜索路径,如果这个路径没有设置或者设置不对,VLC将找

不到大部分的模块,导致大部分功能缺失而无法运行。如果需要修改这一特性可

以修改 0.8.6i)中的 VLCPlugin::getVLC函数。在

SimpleTV中,Roger修改的一个片段是

char p_pluginpath[MAX_PATH+1];

int iTmp = 0;

/* 得到的全路径 */

DWORD dwLen = GetModuleFileNameA (NULL, p_pluginpath, MAX_PATH);

for (iTmp = strlen(p_pluginpath) 1; iTmp >= 0; iTmp)

{

if (p_pluginpath[iTmp] == )

{

p_pluginpath[iTmp] = 0;

break;

}

}

/* 将模块路径设为SimpleTV下的 playermodules */

strcat (p_pluginpath, playermodules);

ppsz_argv[ppsz_argc++] = “–plugin-path;

ppsz_argv[ppsz_argc++] = p_pluginpath;

还有一点是配置文件vlcrc的路径,如果需要修改的话,可以修改

src/misc/configuration.c 中的 GetDir 函数, Windows下这个目录默认返

%APPDATA% 以上两步做好的话其实就可以做出一个Portable的绿色版VLC

了。

和其他ActiveX的播放器,例如WMPQuickTimeRealPlayer相比,VLC

的优点也很明显:自带所需解码器、开源、功能强大。

当然ActiveX方式和Mozilla 插件的方式也是有局限性的,这样的方式

功能还不够强大,例如没有截屏的接口…如果需要更多完整的功能,可以考虑直

接调用libvlc的接口,

VLC官方提供了一些文档和例子 /Libvlc这里还有

一个用C#调用libvlc的例子/539865/116981

Windowslibvlc可能默认是不编译的0.8.6i可以在configure

中开启这一选项 enable-shared-libvlc

完整的VLC体积还是不小的,如果只需要VLC一部分功能的话,可以最

后做一下精简。

本文详见:/?cat=41

Cygwin, Linux, VLC, 视频

相关文章

2007-12-15 -- Cygwin使用指南

2010-09-15 -- CentOS安装GD库支持

2010-09-03 -- RedmineLinuxCentOS)下的安装及配置

2010-07-28 -- 转摘:Madwifi无线网卡源代码阅读

2010-07-28 -- Linux使用技巧

2010-07-27 -- U-BootMAC地址设置及往内核中传递

2010-05-14 -- Linux下更改主机名的方法

2010-05-14 -- Web服务器的IPv6支持

2010-05-13 -- IPv6的安装与配置

2010-05-02 -- Linux系统之间拷贝文件