以前看过VLC的代码,学习过VLC相关的知识,现将其记下来以作备忘

注:本记录是以VLC2.0作为参考,如有出入,请先核对版本号

一、简介

VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或 multicast的流式服务器在IPv4或 IPv6的高速网络连接下使用。它融合了FFmpeg项目的解码器与libdvdcss程序库,使其有播放多媒

体文件及加密DVD影碟的功能。

二、特性

简单、快速、强大的媒体播放器。
可播放任何介质:文件、光盘、摄像头、设备及流媒体。
可播放大多数格式,而无需安装编解码器包,其内已经包含MPEG-2, DivX, H.264, MKV, WebM, WMV, MP3… 等诸多library。
可在所有平台运行: Windows, Linux, Mac OS X, Unix…
完全免费,无间谍软件,无广告,无跟踪用户的行为。
可对媒体进行转换与串流。
详细Features见:

http://www.videolan.org/vlc/features.html

三、架构

3.1 整体框架

  • libVLCcore: libvlc的核心,抽象出了一个libvlc_instance_t 对象。modules的装载/
    卸载机制。还有一套多媒体相关的操作接口。如:input, multiplexing,
    demultiplexing, audio output, video output.

  • Modules: modules提供了具体的功能。根据编译配置module数量200-400之间。
    根据功能可分类为:输入输出(文件、网络、cd)、编解码(mp3,h254)、
    模块化的GUI(基于qt、mac)

  • External libraries: 开源软件都秉承着不要重复造轮子的思想。所以vlc本身也依赖了大
    量外部开源库,如知名的ffmpeg、qt、live555等。

  • VLC main: player的main。初始化libVLC并加载用户界面,注意vlc的用户界面也是
    以module的形式存在。基于libvlc我们就能自己开发自己的播放器了。

3.2 分层框架结构

3.3 modules 按照功能大致分类

3.4 源代码目录结构

3.5 模块关系

这里主要是关于模块的关系,控制接口以及线程再整个框架中的分布情况(即哪些地方使用到了线程)

上图标有红色圆圈的模块就表示其中有使用到线程

3.6 抽象结构

以下,是我按照对VLC的理解抽象出的VLC的结构图

上图中,每一个虚线框起来的,都可以认定为是一个较大的模组(由多个模块组成)

四、运行流程

ELF (Linux下可执行文件的格式) 先被动态加载,然后主线程就变成了接口线程并且在src/interface/interface.c中开始。它执行下列步骤:

  1. cpu探测:什么型号?所有能力(MMX,MMXEXT,3DNow,AltiVec等等)
  2. 消息接口初始化;
  3. 命令行选项解析组件
  4. 创建播放列表
  5. 仓库初始化
  6. 加载所有内置和动态组件
  7. 打开接口
  8. 安装信号处理器:SIGHUP,SIGINT和SIGQUIT(捕获一个,忽略后来的并退出)。
  9. 派生音频输出线程;
  10. 派生视频输出线程;
  11. 主循环:事件管理;

下图为具体的流程图

VLC学习笔记(1): 概述相关推荐

  1. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

  2. CV学习笔记-数字图像概述

    数字图像 1. 图像 像素: 像素是分辨率的单位.像素是构成位图图像的基本单元,每个像素都有自己的颜色. 分辨率: 又称"解析度",图像的分辨率就是单位英寸内的像素点数.单位是PP ...

  3. JVM学习笔记上(概述-本地方法栈)

    背景 前一阵跟着宋红康的视频学了学JVM,视频没有更新完,所以也没学完,这里记录一下笔记 JVM概述 JVM位置:  运行在操作系统之上 相对于java语言,JVM的位置如下所示 对于安卓的Davli ...

  4. [学习笔记]OpenFlow概述(1)

    个人学习笔记,出问题请指出下.摘取<图解OpenFLow> Openflow协议是由斯坦福大学提出,最初的出发点是为了更加轻松地构建用于研究的网络. Openflow的初期设计思想:无需设 ...

  5. μCos-ii学习笔记1_概述

    一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...

  6. Javaweb学习笔记——Javaweb概述

    目录 前言 一.XML语法 XML和HTML的比较 XML语法 1.文档声明 2.元素定义 3.属性定义 4.注释 二.DTD约束 什么是DTD约束 DTD的引用 外部引入 直接嵌入 DTD语法 元素 ...

  7. PHP学习笔记-PHP概述与环境搭建

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50935256 本文出自:[顾林海的博客] 前言 PHP起源于1995年 ...

  8. 设计模式学习笔记1——概述 UML图 软件设计原则

    目录 1.设计模式概述 1.1.软件设计模式产生背景 1.2.软件设计模式概念 1.3.学习设计模式的必要性 1.4.设计模式分类 1.4.1.创建型模式 1.4.2.结构型模式 1.4.3.行为型模 ...

  9. 计算机网络学习笔记之概述

    计算机网络之概述 计算机网络的概念 例题 计算机网络的组成 例题 计算机网络的功能 例题 计算机网络的分类 例题 计算机网络的标准化工作及相关组织 计算机网络的性能指标 ★ ★ ★ \bigstar\ ...

最新文章

  1. 谭浩强课后题之----输入一行字符,统计英文字母,数字以及空格数量
  2. Bundle Adjustment简述(转载)
  3. 谁与争锋,2020腾讯广告算法大赛初赛正式启动
  4. Berkeley DB(六) -- DB Replication (HA)上部
  5. 转 Spring源码剖析——核心IOC容器原理
  6. 查看被系统或程序打开文件工具 OpenedFilesView
  7. vant实现三级联动
  8. JAVA音视频解决方案----JTT1078-2016文档梳理与一些难点梳理
  9. Ubuntu配置固定IP
  10. 字符识别,口算题识别论文小梗概
  11. 前端element-ui中图片oss直传到阿里云
  12. 亚马逊云科技与德勤中国同行,创造更智慧、美好的数字化未来
  13. 瑞星谷歌合作推免费杀毒软件
  14. 西安交通大学计算机考研考数学几,西安交通大学电子信息专业考研考数学几?...
  15. Shaders for Game Programmers and Artists(6) - 反射与折射
  16. Cisco(20)——扩展ACL
  17. **数据堂荣登2018中国最具商业价值AI企业百强榜单**
  18. Dropout Batch Normolization
  19. DirectX 9.0 C Jun 2010 Redist, 游戏必备
  20. python爬虫获取图片无法打开或已损坏_Python爬虫,图片下载完后是损坏的,怎么解决?...

热门文章

  1. k8s集群部署nginx服务并使用ceph-csi挂载存储以及测试
  2. Task09文件与文件系统
  3. 如何安装IBM QISKit
  4. Python 跳出嵌套循环的5种方法
  5. python知识图谱代码_贪心学院第二个主题代码--Python岗位知识图谱
  6. java –cp ./:_7位专家– 7条意见:Java 13的亮点是什么?
  7. 安装groovy时安照说明配置环境变量
  8. 利用开源工具搭一套汉英翻译系统(三):语言模型工具SRILM
  9. docker命令使用详解
  10. Android Handler正确使用姿势