vlc目录结构介绍

STN_LCD STN_LCD     2022-09-08     683

关键词:

http://blog.csdn.net/tteaonly/article/details/7279130

 

0. 起因

   VLC最近出了2.0版本,决定今年深入掌握之,从分析代码开始,以此为备忘。

 

1. 概述

   VLC多媒体框架的优点是:1.系统更加紧凑、高效;2.跨平台支持好,特别是桌面平台(包括Windows、Mac);
3. 编译系统完善,很容易可以构造出支持Windows,Linux的版本;4. 社区活跃,长期技术更新支持有保证。

 

   整个VLC是以libvlc和libvlccore以及第三方插件组成,前端是独立的。据悉VLC C源码是黑客级别,本人看了多
眼之后,深以为然,包括有:类对象架构,观察者模式,插件管理系统等值得学习的代码。另外一方面,整个代
码要消化和理解也是一件不容易的事情。而且由于历史原因,整个VLC代码到处充满了垃圾和无用的代码,估计
清理起来也非常麻烦。

 

2. 目录说明 ( 以 vlc-2.0.0 为准)

 

  • include/                         libvlccore 库的头文件,编写自己的插件也是需要包含这里
  • include/vlc                     libVLC头文件,如果仅仅使用libvlc开发,需要包含这里
  • bin                                 vlc程序代码,即原生GUI前端程序代码
  • lib                                  libVLC接口实现代码
  • compat                          跨 OS 代码
  • contrib                           第三方库的针对VLC的patch以及编译脚本
  • extras                            一些不太常用的辅助工具以及脚本
  • modules                        将各种第三方库封装为VLC的插件,按目录区分功能,如demux,video_filter等等
  • src                                 libvlccore实现,是vlc架构最重要部分

 

主要需要重点学习和关注的是:lib src两个目录之下的代码,这个两个目录也是整个vlc项目的核心。

 

3.    核心对象

使用libVLC构建一个最简单的播放器只需要调用下面间的API

[cpp] view plain copy
 
  1. _vlcinstance = <strong>libvlc_new</strong>(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);  
  2. _mp = <strong>libvlc_media_player_new</strong> (_vlcinstance);     
  3. libvlc_media_player_set_xwindow (_mp, windid );  
  4. _msource = libvlc_media_new_location(_vlcinstance, "./demo.mp4");  
  5. <strong>libvlc_media_player_set_media</strong> (_mp, _msource);  
  6. <strong>ibvlc_media_player_play</strong> (_mp);  

首先通过libvlc_new构造一个全局的instance对象,这个指针可以看作VLC context的handler.  整个VLC对象使用
XXX_new , XXX_release, XXX_retain 三个函数来管理对象的创建销毁以及引用,针对每个对象使用ref_count记录
指针引用次数,这样可以调用XXX_release函数多次,在最后一次进行真正的资源释放工作。 libvlc_instance_t 对
象组成如下,包括两个核心功能的顶层指针(核心对象一个是管理播放,一个是管理流媒体服务)。 

 

libvlc_instance对象组成
libvlc_int_t *p_libvlc_int;
libvlc_vlm_t  libvlc_vlm;
unsigned      ref_count;
vlc_mutex_t   instance_lock;

 

 

 

 

 



   为了完成播放人物还需libvlc_media_player_t 以及 libvlc_media_t 两个对象,这个两个对象都是从libvlc_instance对象
创建,其中libvlc_media_t封装了多媒体对象,可以是一个文件,一个URL或者一个媒介(如DVD)。 libvlc_media_player
对象则封装播放相管内容。

首先看看 libvlc_media_t 对象,主要组成如下:

libvlc_media对象组成
 //指向顶层指针
int                i_refcount;
libvlc_instance_t *p_libvlc_instance;   
//播放对象描述
input_item_t      *p_input_item;
libvlc_media_list_t *p_subitems;
void *p_user_data;
//控制变量
libvlc_event_manager_t * p_event_manager;
vlc_cond_t parsed_cond;
vlc_mutex_t parsed_lock;
//内置变量
bool is_parsed;
bool has_asked_preparse;

 

 

接下来就是最重要libvlc_player对象的组成了:

 

libvlc_player对象组成
int                i_refcount;
libvlc_instance_t * p_libvlc_instance;
vlc_mutex_t        object_lock;
libvlc_media_t * p_md;
libvlc_event_manager_t * p_event_manager;
    struct
    {   
        input_thread_t   *p_thread;
        input_resource_t *p_resource;
        vlc_mutex_t       lock;
    } input;

 

 

 

 

 

 

 

 

 

 

 

其中最最重要的就是这个 struct  input结构体,几乎所有重要的内容都在这个结构体内部,是理解整个VLC的核心,VLC内
主要的对象Access, Stream, Demuxer, Decoder, Vout, Aout全部都包含在input_thread, input_resource内。

 

linux目录结构详细介绍

目录1、树状目录结构图2、/目录3、/etc/目录4、/usr/目录5、/var/目录6、/proc/目录7、/dev/目录 该文章主要来自于网络进行整理。目录结构参考地址:http://www.hudong.com/wiki/linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84http://linux.ccidnet.com/art/3067/20... 查看详情

微擎目录结构介绍

...├─addons…………………………………………【模块安装目录】(意为附加组件)│├─business……………………………………模块的名称(示例)││├─images建议css文件也放此目录.││├─template模板目录│││├─mobileAPP端模板... 查看详情

vue学习笔记——目录结构介绍

1.初始目录结构如下:  2.目录结构介绍目录/文件说明build最终发布的代码存放位置。config配置目录,包括端口号等。我们初学可以使用默认的。node_modulesnpm加载的项目依赖模块src这里是我们要开发的目录,基本上要做的... 查看详情

basecms系列文章:项目目录结构介绍

一、目录结构截图 二、目录结构说明-documents       存放项目相关的文档文件-api          api数据接口目录-assets         资源文件目录-components      组件存放目-mixins ... 查看详情

crosscompilevlc播放器

...ors.neusoft.edu.cn/videolan/vlc/2.2.6/vlc-2.2.6.tar.xz 解压,进入目录。 然后 设置ffmpeg路径 ,上一章 查看详情

linux系统目录结构介绍(代码片段)

linux目录:一切从“根”开始,“/”是所有目录的起点(定点)linux每个目录可以挂载在不同的设备(磁盘)上。在逻辑上所有目录(包括目录下的子目录)都在最高级别的目录“/”下,根(“/”)... 查看详情

z平台-源码包结构介绍

...回Z平台-帮助文档-首页】 本章节介绍Z平台源代码包结构目录总体结构java源码结构配置文件结构前端文件结构总体结构src/main/java【 java源码目录】src/main/resources【配置文件目录】src/main/webapp【Web资源文件目录】java源码结构  ... 查看详情

系统目录结构以及日常使用的命令介绍

系统目录结构ls列出系统目录或者文件的root用户家目录是在根下/root下面普通用户家目录是在/home/etc配置文件目录/dev设备文件目录/boot启动文件目录/home用户家目录/lib库文件目录、/sbinroot用的命令/bin普通用户用的命令放置系统命... 查看详情

vue目录结构及简单的开发介绍

熟悉vue项目的目录结构,在一定程度上能提高我的开发效率及查找文件的速度。这里比较推荐使用VScode编译器,HBuild-x,webstorm等编译器相比之下逊色不少,用过的就知道有多香。目录Vue.js目录结构 目录说明VUE入门基本操作Vue.... 查看详情

magento学习第一课——目录结构介绍

Magento学习第一课——目录结构介绍一.Magento为何强大    Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性。选择Zend的原因有很多,但是最基本的是因为zend框架提供了面向对象的代码库并且... 查看详情

03-目录结构

目录结构作者:矮哥归档:学习笔记2017/1/6目录第1章linux系统沐目录结构的基本特点介绍...11.1挂载光盘和卸载光盘...11.2小结...3第2章目录的介绍...32.1小结:重要目录回顾...5第3章/etc/重要目录里的重点(了解)...63.1/etc/sysconfig/net... 查看详情

大数据必学java基础(一百二十一):maven项目结构介绍

文章目录Maven项目结构介绍一、标准目录结构二、结构图Maven项目结构介绍一、标准目录结构 查看详情

大数据必学java基础(一百二十一):maven项目结构介绍

文章目录Maven项目结构介绍一、标准目录结构二、结构图Maven项目结构介绍一、标准目录结构 查看详情

epub电子书--目录结构介绍

  epub电子书简介  epub全称为ElectronicPublication的缩写,意为:电子出版,epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放OpeneBook电子书标准,epub这种格式kindel目前不支持,必须用相应的软件打开,... 查看详情

linux基础篇——linux操作系统目录结构运行级别介绍

目录一、Linux系统目录结构介绍二、Linux操作系统运行级别1.级别切换2.指定运行级别一、Linux系统目录结构介绍        Linux的文件系统是采用层级形式的树状目录结构,最上层为根目录“/”,然后在根目录下创建其他... 查看详情

springboot主类及目录结构介绍

SpringBoot与传统项目最大的区别是,传统项目都是打成WAR包部署到服务器上面,需要额外的Servlet容器,而SpringBoot则可以直接打成jar包,并内置集成了Servlet容器,通过命令java-jarxx.jar则可以直接运行,不需要独立的Servlet容器。打... 查看详情

[linux]文件系统和目录结构详解

...键,通配符等等下篇文章会写都文件的具体操作命令目录一、linux文件结构介绍1、Linux目录结构的特点2.Linux目录结构常见:补充:二、Linux文件系统介绍1.索引介绍:2.Linux链接介绍1.硬链接:2.软连接(符号... 查看详情

linux下的目录结构(代码片段)

文章目录Linux系统的目录结构Linux下主要目录介绍相对路径和绝对路径Linux命令提示符解析Linux系统的目录结构Linux系统的目录结构是一个倒立的树状结构,根目录用/表示,对比windows目录结构理解linux的目录结构。Linux下主要目... 查看详情