VLC库运行核简介

VLC简介及使用说明 #帧间估计###前面也说到了,视频里连续的图片相似度很高,因此H.265/HEVC引入了帧间编码。这个CTU块跟其他哪张图片相似(ref_idx),跟相似图片的具体哪个CTU块相似(mvd),只需要保存ref_idx,和mvd即可,同样的,相似的这个CTU跟当前CTU的差距,依然按残差系数输出## ###预测方式的选择: H265将各种预测模式所造成的图片的失真(ΔD)和保存这些压缩后的信息所消耗的资源(R)进行计算代价函数(ΔJ),最终选择代价函数最小的模式进行预测,并输出其残差; 阅读详情
 

VLC 媒体播放器的运行核称之为libVLCcor.


libVLCcore 管理线程,模块(编解码器,解复用器等), 模块功能层,时钟,播放清单和VLC的低层控制.例如, 音频和视频同步管理。在它的上层,是libVLC,通过该模块,外部的应用开发者可以使用运行库的所有功能。功能模块与livVLCcore关联和交互。

 

功能模块按照libVLCcore要求设计,而外部应用程序按照libVLC要求设计.

 

VLC管道和模块化

VLC一个主要的概念是 "模块化".

VLC实际上是一个完整的多媒体框架(有点像DirectShow或 GStreamer),它可以根据需要动态装载插件模块。

 

该核心框架用来在媒体数据处理过程中,连接各个模块,从输入(文件,网络流)到输出(音频,视频显示或播放,或输出到网络)。VLC使用模块来做实际的各种工作(如复用,解码,过滤,输出)。(请参考VLC装载机制).

 

每个模块提供不同的功能,这些功能可能满足一些特别的要求或在特定的环境下使用。另外,VLC的可移植性,可以为不同系统平台编写可以音视频输出模块,甚至用户接口模块。

 

插件模块(plugins)利用函数可以动态装载,这些函数定义在src/modules.c 文件里面。

 


利用libVLC,功能模块也可以直接在应用系统里面开发,例如有些操作系统不支持动态装载功能。这些模块可以称之内置件(buitlins)

在源代码里面,模块通常放在modules目录下的子目录。

 

线程管理

 

VLC为多线程。

使用单线程方法复杂度比较高。解码重入和调度为主要原因(如解码和输出必须分开,否则,不能保证一帧可以在指定时间内显示)。


多进程方法也没有采用。多进程解码意味着更多系统开销,而且进程间通信也是非常困难。

 

VLC线程结构按照POSIX (pthread)线程进行封装。然而,为了便于移植,VLC没有直接使用pthread函数,而是采用一套定制的API。

 

线程(vlc_thread_t)

 

·       vlc_clone()创建线程.

·       vlc_join() 等待线程终止,并释放占用的资源。

 

互斥锁 (vlc_mutex_t)

 

·       vlc_mutex_init() 创建非递归锁.

·       vlc_mutex_init_recursive() 创建递归锁(不建议).

·       vlc_mutex_lock() 锁住,如需要,可以等待.

·       vlc_mutex_trylock() 尝试锁定,(如果还没有锁定,就进行锁定,否则,返回一个错误)

·       vlc_mutex_unlock() 解锁.

·       vlc_mutex_destroy() 销毁锁。

 

条件变量 (vlc_cond_t)

 

·       vlc_cond_init() 创建一个条件变量,利用mdate()时钟记时。

·       vlc_cond_init_daytime() 创建一个条件变量,使用实时时钟记时。

·       vlc_cond_signal() 为等待的线程产生一个信号。

·       vlc_cond_broadcast()为多个等待的线程产生一个信号。

·       vlc_cond_wait() 等待一个条件变量产生信号。

·       vlc_cond_timedwait() 在指定的时间内,等待条件变量产生信号。

·       vlc_cond_destroy() 销毁条件变量。

 

其它 

 

VLC 也提供一些同步对象的抽象。瘦读写锁,线程内变量。

 

原子变量 

 

原子变量是很小的值,这些值可以在没有锁定的情况下,进行操作。了解更多支持的操作,请参考include/vlc_atomic.h。

同步 

另一个VLC关键的特点是解码和播放为异步的:解码线程进行解码,音频输出或视频输出线程进行播放。 这个设计目标保证音频或视频帧在正确的时间里面播放,而不会阻塞解码线程。这样就在用户接口,输入,解码,输出模块之间形成一个复杂的通信结构。

 

几个输入和输出线程允许同时读写多个文件(尽管当前的用户接口不允许这么做)。 这样意味着不可重入的库需要使用全局锁以后才能使用。

 

播放时间戳在媒体流的系统层,并传送给解码器,这样所有的采样帧相应进行播放记时。输出层根据这个时间进行播放。 时间为毫秒单位,为1970/1/1以来的毫秒数。 mtime_t类型为 64位有符号整数。

当前的时间使用mdate()函数获取。执行线程在等待一定时间后进行播放。 

警告

请记住,如果需要进行特别的处理(如  色度转换 ),线程应该比播放时间稍微早一点进行播放。.如在 modules/codec/libmpeg2.c里面, 平均解码时间的跟踪可以保证图片不会解码太迟。

 

运行库源代码详细介绍

所有 libVLCcore 源代码文件在src目录下的子目录里面:

·       audio_output/: 初始化音频混合器,即找到正确的播放频率,然后重新将从解码器传送过来的音频帧进行采样。

·       config/: 从命令行和配置文件装载配置信息,提供函数给模块进行读写。  

·       control/: 控制livVLCcore的行为,如播放/暂停,音量管理,满屏,LOG输出等等

·       extras/: 主要为面向平台的代码

·       input/: 打开输入模块,读取数据包,解析数据包,将非结构化的单元流传送给解码模块。

·       modules/: 模块管理

·       interface/: 用户接口代码,如按键,设备弹出。

·       misc/: 为分类的实用函数,如线程管理,消息队列,CPU检测,对象查找系统,面向平台的代码

·       network/: 网络接口 (套接字管理,网络错误等)

·       osd/:屏幕显示操作

·       playlist/: 管理播放清单接口,如停止,播放,下一曲,随机播放。

·       stream_output/: 将音频/视频流输出到网络

·       test/: libVLC 本身测试代码

·       text/: 字符集

·       video_output/: 初始化视频显示,获取所有图片,需要的化将他们转换成其他格式如 (YUV到 RGB),然后显示。

 

vlc库下载 目前,官网windows版本的vlc下载安装后,安装目录下已不包含SDK包! 官网下载地址:http://www.videolan.org/ (不含SDK) 现下载地址:http://download.videolan.org/pub/videolan/vlc/ (含SDK) 阅读详情

相关推荐

Android使用VLC库开发自己的视频播放器

本文介绍在Ubuntu 16.04 64位环境下,Android VLC源码编译流程,并使用AS工具制作一个视频播放器Demo。

u011365633的专栏 2万+

libVLCcore 介绍

原文地址:https://wiki.videolan.org/Hacker_Guide/Core/ 本文是GOOGLE翻译的。我只是搬运工。 黑客指南/核心 ←返回黑客指南 内容 [隐藏] 1libVLCcore简介 2VLC管道和模块化 2.1VLC中的模块 3线程管理 3.1线程(vlc_threa...

爱自在的专栏 1598

QT使用官方VLC以及Ffmpeg库的方法

在使用QT开发基于VLC或者Ffmpeg库的播放器播放本地视频或者RTSP流时需要获取VLC或者FFPEG库,对于有一定技术能力的可以通过编译源码获得,当然也可以通过下载官方编译好的库文件。

HuddHeaven的专栏 1073

VLC内核

大自然的搬运工,所有内容来自VLC官网黑客手册。官网本文内容链路接 libVLCcore简介 VLC媒体播放器的核心是libVLCcore。它管理VLC中的线程、模块(编解码器、解复用器等)、模块层、时钟、播放列表和所有低级控制。例如,它负责所有音频、视频和字幕轨迹之间的同步管理。在libVLC core之上,还有libVLC允许外部应用程序构建器访问核心的所有特性。模块与libvlccore链接,以与核心交互。模块是根据libvlccore构建的。外部应用程序是根据libVLC构建的。 VLC流水线与模块

lujian233的博客 612

C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解

本文详细讲述C++开源项目 VLC 源代码的交叉编译以及库的裁剪过程。

dvlinker的技术专栏 2万+

DirectShow视频播放器(C#实现的媒体播放器)

自己用C#写的DirectShow接口实现的媒体播放器,实现了播放、暂停、停止、快进、快退、播放列表、打开文件、将文件夹内所有媒体文件加入播放列表、音量控制、拖动进度条等功能。支持*.mpg;*.avi;*.flv;*.wma;*.mov;*.rmvb;*.asf;*.wav;*.mp2;*.mp3等文件

vlc源码分析--播放速度控制原理,pts,dts

一:解码的速率控制 视频都有帧率,即每一秒应该显示的帧数,怎么根据这个帧率,来匀速地播放视频?播放的时候怎么实现快速播放,而不是跳帧式地快进?探究一下vlc源码里面对帧率和播放速度的控制。(选用只包含一个视频流且帧率的1的视频文件做的分析 https://blog.youkuaiyun.com/u012459903/article/details/89416892) 先上结论: vlc 版本 3.0.5 vl...

Canok 5619

基于Qt+libVLC内核设计视频播放器-完整版源码(WinID-D3D渲染)

资源包最新更新时间: 2023-08-02 新增了更加牛逼的功能。 QT + libVLC内核完成视频播放器开发,完成了正常播放器该有的所有功能。(你想要到的播放器功能都有,都可以实现,对标官方VLC播放器的功能进行开发) 1. 界面美化 2. 进度条显示、任意跳转 3. 单帧播放 4. 视频画面截图 5. 音量调整 6. 倍速调整 7. 快进、快退 8. 加载视频切换 9. 重头播放 10. 视频录制 11. 视频任意缩放(放大缩小) 12 视频画面旋转 13 高级功能测试接口 .................. 详情看博客介绍:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/119110154

vlc视频主从同步

mediaPlayer.addMediaPlayerEventListener(new MediaPlayerEventListener() { @Override public void videoOutput(MediaPlayer arg0, int arg1) { // TODO Auto-generated method stub } @Override public

jefferson5858的专栏 804

【Java】对接微信转账到零钱接口 Java微信商家转账 apiV3(该踩的雷都踩了)

配置apiv3依赖java代码。

Moonhwa的博客 4318

Klipper-源码模块

Klippy上位机程序采用多线程架构,包含四个主要进程:主线程处理G代码命令、串口IO线程(C语言实现)、MCU响应处理线程(Python实现)和独立日志线程。代码结构分为三大模块:chelper(C语言辅助函数)、extras(扩展功能如温度控制)和kinematics(运动学模型实现)。核心功能模块包括串口通信(serialhdl.py)、步进电机控制(stepper.py)、运动学计算等,其中C语言实现的底层模块通过serialqueue.c处理高效IO。扩展模块支持热床、传感器等外设,运动学子模块提

weixin_44258581的博客 992

libvlc外部api的简单整理

<br />libvlc.h<br />定义了libvlc的外部api,引用这个头文件就可以把VLC嵌入到我们的程序里面了。<br />libvlc的对象必须先被初始化之后才能被使用。<br />libvlc core<br />•libvlc_new() 用于初始化一个libvlc的实例,argc表示参数的个数,argv表示参数,返回创建的实例若当发生错误时返回NULL<br />•libvlc_release()用于销毁一个libvlc的实例<br />   libvlc error handling<

xilyu的专栏 5201

VASP能带计算避坑指南:从CHGCAR读取失败到成功解决的全过程

本文深度解析VASP能带计算中常见的“CHGCAR读取失败”报错,并提供从静态自洽到非自洽计算的全流程避坑指南。核心解决方案包括使用CONTCAR替代POSCAR、调整SYMPREC参数以处理对称性判定问题,并推荐利用vaspkit工具自动化生成输入文件,确保计算流程稳健高效。

weixin_29245767的博客 771

VLC核显编解码简介 + Linux平台vlc编译

概要: vlc编译, 硬解基于libva库(VAAPI), live555(liblivemedia-dev), --enable-live555才能播放rtsp流, 基于liveMedia库, vlc对ffmpeg是运行时依赖,把libavcodec_plugin.so删了就可以。 编著: 重点章节:“END、我在编译VLC时做过的操作” :“1.依赖相关”、“2.VLC编译安装”。 该2节为我...

Tosonw的博客 9175

领域驱动设计整理——实体和值对象设计

实体引言在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象比较明显的区分,也即实体是可以持续得变化,持续得修改,并且具有唯一的标识。在设计实体的时候需要跳出CRUD的

马猴烧酒└(┐卍^o^)卍ドゥルルル~楪詩月「YUZURIHA SHIZUKI」 2万+

大疆机场及无人机上云(航线规划、指令飞行...)

最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!

资深三维GIS开发 5577

Linux下的VLC简介

正文共:999 字 8 图,预估阅读时间:2 分钟我们最近测试组播,在Windows下直接使用VLC Media player就可以了(使用VLC media player初步认识单播、广播和组播);在Linux系统下,目前使用比较多的还是iperf(iperf测试组播的命令是什么?通过HCL学习一下)。最近了解到,Linux系统下也有VLC,要不安装一个试试?首先,因为VLC并不包含在默认的Ce...

衡水铁头哥的博客 2463

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、应用需求   在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。   为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550

木南创智 5500

VLC简介

 VLC(一) 简介    VLC的全名是Video Lan Client,是一个开源的、跨平台的视频播放器。目前的最新发布版本是0.8.6h。VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得 http://www.videolan.org/vlc/features.html,下面给出一个简要的不完整的列表:    操作系统:Windows、WinCE、Linu

bisword的专栏 3742

【数据集】中国广泛时空水质数据集(1980-2022)

简介中国广泛时空水质数据集(1980-2022)

WW、forever的博客 3995

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

下一篇: VLC媒体播放器系统结构
机器视觉大师
博客等级 码龄23年 83粉丝 33原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值