VLC源码学习专栏(一)VLC整体架构

vlc是经典的多媒体开发框架,但国内的学习资源还比较少,个人准备学习一下此框架,故开始此系列文章,愿与诸君共勉。
本节主要是了解Vlc的主要模块和其功能,其中Module是Vlc的重点,所以篇幅会稍长。

1. 整体架构

在这里插入图片描述

1.1 vlc(main)

  这是vlc player的main函数,主要是初始化libVLC和启动用户界面

1.2 libVLC

  这是vlc框架的和核心,它提供了一个面向对象的层级给C、负责modlue的加载和卸载、以及关于多媒体的一系列抽象功能,如:input, multiplexing, demultiplexing, audio output, video output.

1.3 Modules

1.3.1 Modules简介

  Modules事实上提供了vlc框架的具体能力,如:Input 管理 (file, network, cd), 编解码 (mp3, divx, …), GUI界面(textual, web, telnet, qt-based, macosx native).
 VLC 模块有 2 个主要 属性:
   1)能力,VLC_MODULE_CAPABILITY,描述模块的类别
   2)分数,VLC_MODULE_SCORE,保存模块的优先级
  modules根据能力进行分类,当Vlc需要特定能力时,它就会open all modules,然后找到一个匹配的:具体就是它以递减的分数顺序打开它们(先打开较大的分数,最后打开较小的分数) ,并运行模块的 Open ()函数。当一个模块返回 OK 时,VLC 使用这个模块。
  下图表示在 VLC 中实现的主要模块功能
在这里插入图片描述
 需要注意的是,vlc提供了很多不同风格的用户界面,每种类型的界面也都是一个Module。在实际的发行版中,有基于 Windows/Linux 的 QT、 OSX 的 Cocoa/Objective-C、控制台 UI 的 NCurses 和 Maemo 设备的 UI。如果只是为了了解模块的物理结构,可以打开 module/Audio _ output 目录看看。

1.3.2 Modules的加载

  本部分参考VLC_Modules_Loading
  第一次加载 VLC 时,它会扫描默认插件目录并生成缓存(称为插件缓存,plugins cache),以便下次 VLC 启动时可以快速加载modules 。modules 可以组织到插件目录下的目录中(最多 5 层)。
  VLC 的最新版本要求模块遵循特定的命名约定,否则它们将不会被加载。模块必须按以下格式命名:libmodule_name _plugin.ext。其中,module_name应该是小写的模块名称,ext是系统的共享库扩展。例如,http访问模块在 Windows 计算机上 名为libaccess_http_plugin.dll 。
  1. 当VLC需要一个模块时,它会尝试打开一个高分值且匹配的modules。举个栗子。当vlc需要一个module来解码时,它就会打开所有"decoder"的module,按照从高到低的分数依次运行module的Open()去match,如果match ok,则使用该module。
  2. 对于一些分值为0的Modules,那么就需要使用者强制明确要求要加载对应的module,不然应该是不会扫描到的。此外,可以通过链式请求来进一步缩小模块扫描的范围,eg:

--codec avcodec,all
尝试avcodec module 而不是所有模块作为“codec”

1.3.3 查看Modules

  1. 可以通过下列方法来查看有哪些modules:
    1)在控制台输入:vlc --list
    2)通过UI界面:Menu -> Tools -> Plugins and extensions
  2. 目前主要的Modules包括以下方面:

audio filter : an audio filter, like an equalizer
audio mixer  : an audio channel mixer, like a downmixer
audio output  : an audio output, like Windows DirectX audio output
decoder  : a codec decoder, like theora
demux  : a demuxer, to open a file format, like mkv
encoder  : a codec encoder, like x264
interface  : an interface, like the Qt interface
meta reader  : a meta reader, to read metadata
packetizer : a packetizer
playlist export : a module to write playlist, like .m3u
services_discovery : a module to get extra content from your computer or the network, like Upnp, DLNA
sout access : an access for the streaming
sout mux : a muxer when streaming and encoding
stream_filter : a stream filter
text renderer : a way to display subtitles and other text on top of the video
video filter : a video filter, like contrast adjusting
visualization2 : a visualizer, to create videos from the music
vout display : a video output, to display videos like Direct3D or Xv

1.4 External libraries

 Vlc事实上引用了很多外部第三方库…说句题外话,VLC编译之所以那么难pass,就是因为需要装很多相关的第三方依赖库。

主要参考:
The architecture of VLC media framework
VLC_Modules_Loading
另外,推荐一篇好文:VLC架构及流程分析

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值