vlc源代码分析

vlc源代码分析

ID:30780048

大小:70.50 KB

页数:8页

时间:2019-01-03

vlc源代码分析_第1页
vlc源代码分析_第2页
vlc源代码分析_第3页
vlc源代码分析_第4页
vlc源代码分析_第5页
资源描述:

《vlc源代码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、VLC源码分析总结VLC属于VideoLAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。作为流媒体服务器,VLC跨平台,支持多操作系统和计算机体系结构;作为多媒体播放器,VLC可以播放多种格式的媒体文件。主要包括有:WMV、ASF、MPG、MP、AVI、H.264等多种常见媒体格式。VLC采用全模块化结构,在系统内部,通过动态的载入所需的模块,放入一个module_bank的结构体中统一管理,连VLC的Main模块也是通过插件的方式动态载入的(通过module_InitBank函数在初始化建立module_bank时对于不支持动态载入插件的系统环境中#VLC也可以采用buil

2、tin的方式,在VLC启动的时候静态载入所需要的插件,并放入module_bank统一管理。VLC的模块分成很多类别主要有access.access_filterxaccess_output、audio_filterxaudio_mixersaudio_outputxcodec、controLdemux、gui、misc、mux、packetizerxstream_outputsvideo_filterxvideo_output、interface,input、playlist等(其中黑体为核心模块1VLC无论是作为流媒体服务器还是多媒体播放器,它的实质思路就是一个"播放器",之所以这么开

3、彳象描述,是因为(Thecoregivesaframeworktodothemediaprocessing,frominput(files,networkstreams)tooutput(audioorvideo,onascreenoranetwork),goingthroughvariousmuxers,demuxers,decodersandfilters.EventheinterfacesarepluginsforLibVLC.Itisuptothedevelopertochoosewhichmodulewillbeloaded.摘于官网说明)它实质处理的是ES、PES、PS、TS等

4、流间的转换、传输与显示。对于流媒体服务器,如果从文件作为输入即:PS->DEMUX->ES->MUX->TS;对于多媒体播放器如果采用UDP方式传输即:TS->DEMUX->ESO2・插件管理框架在VLC中每种类型的模块中都有一个抽象层/结构体,在抽象层或结构体中定义了若干操作的函数指针,通过这些函数指针就能实现模块的动态载入,赋值相关的函数指针的函数地址,最后通过调用函数指针能调用实际模块的操作。对于VLC所有的模块中,有且仅有一个导出函数:vlc_entry_(MODULE_NAME)o(其中MODULE_NAME为宏定义,对于main模块z在includemodules」nner

5、.h中定义为main)动态载入模块的过程是:使用module_Need函数,在module_bank中根据各个插件的capability等相关属性,寻找第一个能满足要求并激活的模块。所谓激活是指,调用插件的初始化函数成功。对于各个插件的初始化函数和析构函数均在vlc_entry_(MODULE_NAME)函数中指定了相关函数地址。因此载入各个插件(动态库)的过程,就成为了解析动态库文件,并找到其中vlc_entry_函数的地址,然后运行。这样各个模块的激活函数就会赋值各个操作的函数地址,以待后面函数动态调用。具体函数调用过程如下:•Main模块的载入过程:intmain(inti_argc

6、,char*ppsz_argv[])(srcvlc.c)->i_ret=VLC」nit(0,i_argc,ppsz_argv)->module_InitBank(p_vlc)(srclibvlc.cvoid_module_InitBank(vlc_object_t*p_this))->module_LoadMain(p_this)(srcmiscmodules.c)->AllocateBuiltinModule(p_this,vlc_entry_main)->pf_entry(p_module)(激活了main模块,以上为main模块的载入过程,对于main模块调用的实际函数为导出

7、函数vlc_entry_main其它模块导出的均为vlc_entry_0_8_6)•Module.Need函数实现载入任意模块的过程:module_t*_module_Need(vlc_object_t*p_thiszconstchar*psz_capability,constchar*psz_name,vlc_bool_tb_strict)(srcmiscmodules.c)->vlc_list_find(将所有已

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。