一般情况下,播放一个音视频分为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

VLC框架总结(二)VLC源码及各modules功能介绍相关推荐

  1. Android Glide图片加载框架(二)源码解析之into()

    文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...

  2. Android Glide图片加载框架(二)源码解析之load()

    文章目录 一.前言 二.源码分析 1.load() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源 ...

  3. Android Glide图片加载框架(二)源码解析之with()

    文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...

  4. 云开发超多功能工具箱组合微信小程序源码/附带流量主功能介绍

    ​ 简介: 这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字 ...

  5. 刚写完的 基于网页的音乐平台网站(含后台) 毕业设计毕设源码 (1)功能介绍

    后台管理 [系统设置] |–设置网站名称.网站介绍.关系我们.联系我们等 –[音乐中心] |–添加音乐:歌曲名.作者.封面.歌词.上传MP3等 |–支持查看所有音乐列表 |–支持音乐信息 修改 |–支 ...

  6. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  7. 【集合框架】JDK1.8源码分析之HashMap(一)

    转载自  [集合框架]JDK1.8源码分析之HashMap(一) 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大 ...

  8. 使用Gin框架集成JWT,源码、详解、面试问题

    使用Gin框架集成JWT,源码.详解.面试问题 一.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). ...

  9. 基于ssm框架的汽车出租管理系统源码

    项目介绍: 基于ssm框架的汽车出租管理系统源码 高清视频演示: https://www.bilibili.com/video/BV1TY411u7X2/ 下载地址: https://download ...

  10. 笑话与趣图框架微信小程序源码

    这是一款以笑话和趣味图为主的一款微信小程序源码 或者也可以说是一个框架吧 里面的内容是内置在小程序里面的,所以说是一款框架也可以 因为内置的内容,所以内容数量有限! 大家可以用来养账号,或者有能力的二 ...

最新文章

  1. php轮播代码生成器,最简单的Banner轮播左右切换效果代码及实现思路(附带源码)...
  2. linux的FHS文件系统目录介绍
  3. [译][python]ImportError:attempted relative import with no known parent package
  4. 网络流之——最小费用最大流
  5. 基础练习 Huffuman树 (优先队列)
  6. GPhone、OPhone、UPhone、APhone、IPhone:满城尽带XPhone
  7. 【codeforces 799A】Carrot Cakes
  8. 日期格式化方法封装,对外暴露使用
  9. [已解决]Hibernate程序未终止
  10. 日记20211028
  11. 批处理,扫描当前目录下的文件,传到指定文本中
  12. win10系统怎么改奇摩输入法_流氓输入法脱坑工具,我终于卸载了用了十年的搜狗输入法 | 乐软博客...
  13. NB-IOT模块学习
  14. 基于matlab的语音识别系统,基于Matlab的语音识别系统研究
  15. 关于tcp/udp网络调试助手错误提示
  16. iOS报错 之 The app delegate must implement the window property if it wants to use
  17. 谷粒商城:环境搭建(3)
  18. 目标拎不清,谈什么选择呢?
  19. LPC1768 UART超时中断的使用
  20. 一文搞懂JVM架构:微信抢红包实战案例

热门文章

  1. HTML:表单学习笔记
  2. 线性表_循环链表(增减删查 + 约瑟夫环问题 代码实现 )
  3. 编译原理的first、follow、select
  4. 一文详解3D相机面临的困难问题和解决方案
  5. Google是如何赚钱的 -- 四年工作离别小结
  6. 主引导扇区(MBR)释疑
  7. Python反射和内置方法(双下方法)
  8. springMVC_08文件上传
  9. 想成为一个怎样的人?
  10. extThree20XML extThree20JSON 引入到工程中的方式