vlc视频播放的基本原理

发布时间 : 星期日 文章vlc视频播放的基本原理更新完毕开始阅读

VLC是一个功能强大的玩意,能做很多有意思的事情。

最简单的,从界面打开一个文件播放,也可以在命令行下使用,如 C:/Program Files/VideoLAN/VLC>vlc.exe test.ts

获取内置的帮助,会写到vlc-help.txt C:/Program Files/VideoLAN/VLC>vlc.exe -h

获取更详细的帮助,有大量的选项介绍 C:/Program Files/VideoLAN/VLC>vlc.exe -H

搜索并显示可用的模块列表

C:/Program Files/VideoLAN/VLC>vlc.exe -l

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

%APPDATA%在XP下通常是 C:/Documents and Settings/用户名/Application Data Linux下,在用户home目录的/.vlc/中

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

重置所有选项到默认状态

C:/Program Files/VideoLAN/VLC>vlc.exe –reset-config

VLC从vlcrc中指定的plugin-path,以及当前目录的modules和plugins目录来递归查找plugin

VLC的大部分功能都是通过plugin来实现的。VLC默认有大量的动态插件,例如官方VLC 0.8.6e有210个插件。为了加快启动速度,vlc会在%APPDATA%/vlc/cache中缓存plugin的列表,选项plugins-cache=0可以禁止缓存plugin

打开一个UDP组播流,组播组 239.255.1.1,端口 4567,默认端口1234 对于rtp协议,VLC会自动识别,写udp还是rtp都没问题

C:/Program Files/VideoLAN/VLC>vlc.exe udp://@239.255.1.1:4567

在本地UDP端口 888 接收流, “@”表示绑定一个地址,而不是连接该地址 C:/Program Files/VideoLAN/VLC>vlc.exe udp://@888

串流输出,就是在播放的时候,以某种方式向外传送视频,在打开界面 的串流/保存 中设置会比较方便

例如,循环播放test.ts, 以rtp方式传送到224.1.1.1端口1234, 同时显示视频 vlc.exe

–loop :sout=#duplicate{dst=std{access=rtp,mux=ts,dst=224.1.1.1:1234},dst=display} 例如,接收UDP端口888,数据全部保存到C:/dump.ts

vlc.exe udp://@888 :demux=dump :demuxdump-file=”C:/dump.ts”

test.ts

关于Windows下视频输出模块

Direct3D :效果比DirectX差一点,但是方便截图,也可以在图像上实现alpha DirectX:效果最好,利用DirectX的显示加速 OpenGL:在不同的硬件上表现不太一样 WinGDI:最慢的一种,不需要显卡加速 caca:用彩色的Assic字符来显示,很有意思 临时启用某个视频输出,可以这样

C:/Program Files/VideoLAN/VLC-0.8.6e>vlc test.ts –vout=caca

ActiveX控件

官方发布的VLC自带ActiveX控件 axvlc.dll,注册之后可以方便的在应用程序和网页 中使用VLC,注册的办法是

C:/Program Files/VideoLAN/VLC-0.8.6e>regsvr32 axvlc.dll

ActiveX VLC的使用方法可以参考源代码中ActiveX目录的README.TXT和test.html ActiveX控件的接口有第一版和第二版,第一版简单,功能少,已经不再维护 建议用第二版本,功能多一点

Mozilla Plugin

你还可以在Windows和Linux的Firefox中使用VLC。Windows下可以在安装VLC的时候选上 Mozilla plugin,事实上它做的就是在HKLM_Software_MozillaPlugin键下添加一个VLC的子键。 Linux下就不太清楚了,但是你可以把libvlcplugin.so(或者叫npvlc.so)和插件目录 放到Firefox的plugins目录,来使之生效。

同样这适用于基于Xulrunner的应用程序,事实上像 Miro、SongBird等xul应用都是用的 这个插件。

与ActiveX类似的,VLC的Mozilla Plugin也有两套接口,建议用新的第二版。

注册表

在Windows下VLC只使用很少量的注册表的信息,最重要的一条是HKLM_Software_VLC键 下的InstallDir项,VLC的Mozilla Plugin和ActiveX控件通过这一项来定位其插件的目录

Telnet、Http控制

对VLC来说,控制界面都是Interface类的模块,你可以使用各种控制模块。Windows下 默认使用的是wxwidgets图形界面,你还可以使用http、telnet等界面,来远程控制VLC, 够酷吧?如果你用VLC在服务器上专门作视频流转发一类的事情,这种远程界面

可以帮上大忙。

视频过滤器

0.8系列中有多达13种视频过滤器,为视频添加各种效果和特殊处理。用的比 较多的是反交错deinterlace过滤器,在观看MPEG2视频时很有用。

Skin2界面

一个漂亮一点的,可以换肤的界面,觉得它不太稳定很少用。

其他的

播放DVD、VCD光盘,打开DirectShow设备,播放当前屏幕…很多好玩的功能可以去摸索一下

一些问题

目前的VLC无法播放Real视频,如rm、rmvb。其实从0.9版本的VLC开始可以依赖其他解码 器播放。但就目前测试的情况来看,顺序播放没问题,但是拖动则效果很差

RTSP的播放,拖动有问题,在获取播放位置时有缺陷。例如和达尔文服务器的配合。

视频播放的基本原理

当初看VLC代码花了不少时间,其中很大的原因是不太了解视频播放的基本原理。现在看来,几乎所有的视频播放器,如VLC、MPlayer、Xine,包括DirectShow,在播放视频的原理和架构上都是非常相似的,理解这个对理解VLC的源码会有事半功倍的效果。 大致的来说,播放一个视频分为4个步骤: 1. acess 访问,或者理解为接收、获取、得到

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

联系合同范文客服:xxxxx#qq.com(#替换为@)