VLC是通过模块来扩展它的功能,插件一般就是实现一个模块。VLC Modules插件开发必须实现的接口 (1) open() close() ;(2)功能相关的接口。Modules中有变量,可以create/set 这个变量值。我们还可以设置callback监控函数来监控这个变量,一旦这个变量改变,这个callback函数就会被调用。Module间就是通过这种Observer模式来实现模块间的通信的。每个模块都由一个主要线程运行一个事件循环,线程之间以生产者-消费者的模式进行线程通信,生产者等待队列非满时开始生产,消费者等待队列有数据开始进行消费,生产者和消费者通过信号量的方式进行通信。比如:
文件输入线程等待TS数据包队列非满。
文件输入线程发现TS数据包队列非满,从文件中读取数据,解析出TS数据包,将TS数据包放到队列中,并置TS数据包队列非空信号。
TS包解析线程等待TS数据包队列有非空。
TS包解析线程发现TS数据包队列非空,从队列中读取并解析TS数据包,将解析出的PSI\PES数据包放到PES队列中,并通知视频解码线程PES队列非空。
视频解码线程等待PES数据包非空,如果非空则读取数据进行解码,并把解码后的数据放到视频显示队列中。
视频显示队列线程等待视频显示队列非空,如果非空则读取当前视频帧进行显示。
图形界面事件循环等待用户操作,并对用户的操作事件进行相应,修改相关模块数据结构。
相关模块线程在事件循环中检查配置信息是否被修改,如果被修改则进行相应的操作。
1 Compile VLC
2 Read HACKING file7 profit.
You'll need to get the VLC source code and modify it accordingly. Look at other plugins/modules for examples. The easiest way is to get vlc source code, compile it, and add anything you want.
But it's also possible to build a stand alone plugin. You'll have to add vlc's includes and fix issues on your environment.
JoungEunKim did it on windows with visual studio 2005/8 (see here, he uploaded an example based on simple.c, an audio filter :http://forum.videolan.org/viewtopic.php?f=32&t=81793#p274912 )
另外首先需要熟悉以下一些内容:
http://wiki.videolan.org/Documentation:Hacker%27s_Guide/Module_Writers_Guide