VLC学习笔记(1): 概述
以前看过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中开始。它执行下列步骤:
- cpu探测:什么型号?所有能力(MMX,MMXEXT,3DNow,AltiVec等等)
- 消息接口初始化;
- 命令行选项解析组件
- 创建播放列表
- 仓库初始化
- 加载所有内置和动态组件
- 打开接口
- 安装信号处理器:SIGHUP,SIGINT和SIGQUIT(捕获一个,忽略后来的并退出)。
- 派生音频输出线程;
- 派生视频输出线程;
- 主循环:事件管理;
下图为具体的流程图
VLC学习笔记(1): 概述相关推荐
- Oracle学习笔记 字符集概述
Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...
- CV学习笔记-数字图像概述
数字图像 1. 图像 像素: 像素是分辨率的单位.像素是构成位图图像的基本单元,每个像素都有自己的颜色. 分辨率: 又称"解析度",图像的分辨率就是单位英寸内的像素点数.单位是PP ...
- JVM学习笔记上(概述-本地方法栈)
背景 前一阵跟着宋红康的视频学了学JVM,视频没有更新完,所以也没学完,这里记录一下笔记 JVM概述 JVM位置: 运行在操作系统之上 相对于java语言,JVM的位置如下所示 对于安卓的Davli ...
- [学习笔记]OpenFlow概述(1)
个人学习笔记,出问题请指出下.摘取<图解OpenFLow> Openflow协议是由斯坦福大学提出,最初的出发点是为了更加轻松地构建用于研究的网络. Openflow的初期设计思想:无需设 ...
- μCos-ii学习笔记1_概述
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...
- Javaweb学习笔记——Javaweb概述
目录 前言 一.XML语法 XML和HTML的比较 XML语法 1.文档声明 2.元素定义 3.属性定义 4.注释 二.DTD约束 什么是DTD约束 DTD的引用 外部引入 直接嵌入 DTD语法 元素 ...
- PHP学习笔记-PHP概述与环境搭建
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50935256 本文出自:[顾林海的博客] 前言 PHP起源于1995年 ...
- 设计模式学习笔记1——概述 UML图 软件设计原则
目录 1.设计模式概述 1.1.软件设计模式产生背景 1.2.软件设计模式概念 1.3.学习设计模式的必要性 1.4.设计模式分类 1.4.1.创建型模式 1.4.2.结构型模式 1.4.3.行为型模 ...
- 计算机网络学习笔记之概述
计算机网络之概述 计算机网络的概念 例题 计算机网络的组成 例题 计算机网络的功能 例题 计算机网络的分类 例题 计算机网络的标准化工作及相关组织 计算机网络的性能指标 ★ ★ ★ \bigstar\ ...
最新文章
- 谭浩强课后题之----输入一行字符,统计英文字母,数字以及空格数量
- Bundle Adjustment简述(转载)
- 谁与争锋,2020腾讯广告算法大赛初赛正式启动
- Berkeley DB(六) -- DB Replication (HA)上部
- 转 Spring源码剖析——核心IOC容器原理
- 查看被系统或程序打开文件工具 OpenedFilesView
- vant实现三级联动
- JAVA音视频解决方案----JTT1078-2016文档梳理与一些难点梳理
- Ubuntu配置固定IP
- 字符识别,口算题识别论文小梗概
- 前端element-ui中图片oss直传到阿里云
- 亚马逊云科技与德勤中国同行,创造更智慧、美好的数字化未来
- 瑞星谷歌合作推免费杀毒软件
- 西安交通大学计算机考研考数学几,西安交通大学电子信息专业考研考数学几?...
- Shaders for Game Programmers and Artists(6) - 反射与折射
- Cisco(20)——扩展ACL
- **数据堂荣登2018中国最具商业价值AI企业百强榜单**
- Dropout Batch Normolization
- DirectX 9.0 C Jun 2010 Redist, 游戏必备
- python爬虫获取图片无法打开或已损坏_Python爬虫,图片下载完后是损坏的,怎么解决?...