现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VLC源码及各modules功能介绍

2016-12-29 06:15 工业·编程 ⁄ 共 2235字 ⁄ 字号 暂无评论

一般情况下,播放一个音视频分为4个步骤

1、access访问

2、demux解复用

3、decode解码

4、output输出

access:访问

可以理解为接收、获取、得到数据资源,包括解析访问源(url),

使用http协议,rtsp协议,ftp协议,建立连接,获取数据。

demux:解复用

就是把通常合在一起的音频和视频分离,当然也有可能有字幕。通过分析数据包头来判断是什么数据文件,需要用什么解码格式。

为什么需要demux

其实之所以需要demux,是因为音视频在制作的时候实际上都是独立编码的,得到的是分开的数据,为了传输方便,必须用某种方式结合起来,这就有了各种封装格式,也就有了demux。

decode解码

包括音频和视频解码,或者软件解码和硬件解码。

out输出

分为音频和视频的输出(aout和vout)

如,播放一个UDP组播的MPEG TS流,

access部分负责从网络接收组播流媒,放到播放器的内存缓冲区,access模块关注ip协议,如是否IPv6,组播地址,组播协议,端口等信息。如果检测到是RTP协议(RTP协议是在UDP头部简单加上12个字节)

而demux部分首先要解析TS流媒的信息。TS格式是MPEG2协议的一部分,一般TS通常是固定188字节的packet,一个TS流中可以包含多个program(节目),一个program可以包含多个视频、音频、和文字信息的ES流,每个ES流会有不同PID标识,而为了可以分析这些ES流,TS有一些固定的PID用来间隔发送program和ES流得表格,PAT和PMT表。

对于VLC播放器,使用libdvbpsi来解析和编码TS流。(调用代码可以参考/modules/demux/ts.c)

demux分离出来的音频和视频流分别送往音频解码器和视频解码器,因为原始的音视频都是占用大量的空间。而且冗余度较高的数据。通常在制作的时候就会进行某种压缩。这就是我们知道的音视频编码格式,H.264,rmvb,mkv。音视频解码器作用就是把压缩的数据还原成原始的音视频数据。(VLC编解码模块都在/modules/codec目录下)。

最后output模块,视频解码器输出的是一张一张的类似位图格式的图像,但是要让人从屏幕看到,还需要一个视频输出的模块。如用SDL显示。音频也是一样,需要将pcm等数据转化成音声。

VLC源码

VLC(Video Lan Clent)是一个完整的多媒体框架,最大特点是可以根据需要动态加载许多插件模块,支持视频传输,封装和编码格式。框架核心是利用程序将各模块链接起来。对输入媒体数据,经过各模块处理后输出。

vlc目录结构:

doc : 帮助文档

include:VLC头文件

lib:VLC对外实现函数目录,和src一起使用

m4:AutoMake和AutoConf的宏文件

modules:VLC插件目录

share:图标、脚本

src:源码

contrib:存放可能用到的第三方软件信息

compat:存放可能使用的函数

access

dshow:DirectShow获取插件,用于windos平台

dvb:使用V4L2API的输入模块,用于DVB-S/C/T媒体流

mms:用于TCP,UDP的MMS和HTTP获取模块

rtsp:基于实时流传输协议

screen:获取屏幕图像的输入模块

vcd:获取VCD数据的输入模块

vcdx:获取VCD输入模块,可以导航,静止

audio-filter

channel-mixer:各种混合器,解码器,如Dobly解码器

converter:定点或浮点音频格式转换

resample:各种音频重采样模块

audio-mixer

audio-output

codec

dmo :一个DirectMediaObject解码器

avcodec:包含ffmpeg库许多音视频解码器

spudec: RLE DVD小标题解码

control

插件控制播放器的各种接口:手势、热键、远程控制和telnet

demux:不同解复用程序

asf :asf解复用器

avi :avi解复用器

mp4 :mp4解复用器

mpeg:mpeg解复用器

playlist:播放清单导入模块

packetizer:打包模块,用于H264/AVC和MPEG 4音视频流

video-chroma :图像格式装换,如YUV转RGB

video-filter:各种视频滤波模块,如Deinterlace,Transform,Wall,Crop等。

video-output:视频输出模块

Src模块

libVLC:它是提供接口的库,比如給VLC提供功能接口:流的输入,音视频输出,插件管理,线程系统。

Interface:包含与用户交互的代码,如按键和设备弹出。

Playlist:管理播放列表的交互,如停止、暂停、下一个,或随机播放。

Input:打开一个输入组件,读包,解析它们并且将被还原的基本流传递给解码器。

Video_output:初始化video显示器。从解码器得到所有的图片和子图片。将他们装换成YUV或RGB进行播放。

Audio_output:初始化音频mixer。如发现正确播放频率,然后重新制作从解码器接受过来的音频帧。

Stream_output:类似Audio_output

Misc:被libvlc其他部分使用杂项。如线程系统,消息队列,CPU探测,对象查询系统,

视频输出:可以通过DriectX,X11,XVideo,SDL,FrameBuffer,ASCII

作者:逆流的鱼yuiop

给我留言

留言无头像?