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

vlc源码的整体架构初步理解

2017-01-10 06:22 工业·编程 ⁄ 共 1285字 ⁄ 字号 暂无评论

首先,附上vlc的官方链接 

官网            http://www.videolan.org/

官网的wiki   https://wiki.videolan.org/

源码下载     http://www.videolan.org/vlc/download-sources.html

vlc是一个开源的视频解决方案,几乎包括了所有的视频,音频,字幕,图片(是的,你没看错,vlc也支持图片解码,如jpeg,png等等都有支持,打开源码就可以看到,可以用vlc播个图片试试)格式的编解码,还可以搭建流服务器(博主也没用过)。平台方面涵盖了web,linux,windows,android等等,是一个功能异常强大的sdk.

 

官方提供的vlc的整体架构如上图所示,概括起来其实就是三层。

最底下的一层是vlc的基础,也就是它的核心库libVLC和libVLCcore,提供了最最基础的一些功能的api接口,核心库也可以用来进行简单的二次开发,官网上的wiki提供了很多例子和教程。

中间一层就是各种modules,因为vlc是使用模块加载的方法来加载各种功能的,所以这一层留给各位码农的开发空间非常大,从access到codec,demux等等可以自由拓展,可以照着源码里面的某一个module文件来编写自己的module,设定各种模块的描述和优先级,open,close函数等等,运行的时候程序会根据对应的已经加载的模块来进行遍历,如果满足条件就执行对应的模块。

最上面一层就是应用接口,vlc的图形界面使用的是qt.

vlczhengtijiagou

下面简单介绍一下源码中的modules

 

下载源码之后解压,进入modules文件夹下,如下

 

access是访问模块,包含各种常用的协议,如http,rtsp等等。

demux是解复用模块,可以将一个流里面包含的各种数据流(音频,视频,字幕)拆开,最常见的就是ts流。

codec是编解码模块,包含了常用的视频,音频,字幕,图片格式的编解码算法,如h264,h265,flac等等。

这几个模块是最为常见的需要增删修改的部分,基本的问题也都是在这里,因此别的部分就不做介绍了。

 

最后介绍一下目前几种常见的流处理方案。

Exoplayer    google官方的android端开源播放器,不过这名字。。。。。。,这个博主在android应用开发的时候用过,毕竟官方推荐,还是十分好用的,扩展性不错,支持的格式也比较多,上手比较快。

ffmpeg        这个就不多说了,名气太大了,感兴趣可以去看雷神的博客,唉,天妒英才。

bilibili的播放器    记不起叫啥名字了,想用的童鞋可以上git去搜一下,记得支持的格式不多,好像就是flv吧,主要是解决直播问题的,内部集成了上面提到的所有播放器的部分代码,真是海纳百川,赞一个。

 

经过简单的介绍,相信大家对于vlc的基础架构有了一个比较清楚的认识,本篇是vlc的基础,也是本人第一篇技术博客,写的不好的话请见谅,各位有什么意见或者建议的话也请直言不讳。后面的博客我会着重于项目中使用vlc遇到的问题进行讨论,更加实用。

给我留言

留言无头像?