一种开源的跨平台视频开发框架:VideoLAN - VLC media player

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

    VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。至于为什么叫VideoLan Client,是因为以前还有一个VideoLan Server的项目(简称VLS),而目前VLS的功能已经合并到VLC中来,所以VLC不仅仅是一个视频播放器,它也可以作为小型的视频服务器,更可以一边播放一边转码,把视频流发送到网络上。

    VLC的功能很强大,它不仅仅是一个视频播放器,也可作为小型的视频服务器,更可以一边播放一边转码,把视频流发送到网络上。VLC最为突出的就是网络流的播放功能,例如MPEG2的UDP TS流的播放和转发,几乎是无可替代的。

    对普通用户来说,VLC还有一个好处是不影响Windows中的解码器。VLC通常不影响也不依赖于系统中自带的解码器(除了realvideo和quicktime的类型),很绿色很环保;更不用担心流氓软件、广告插件之类的恶心的玩意儿。
    从程序结构来看,VLC的可扩展性是相当优秀的。VLC绝大部分用高效的C代码来编写(少量的C++和汇编),但是实现了完全动态的模块化,所有功能包括程序框架本身都是module,可以在运行时载入,这使得VLC可以轻易的扩展多种功能并且容易维护。它的架构有一点类似于DirectShow的技术,这个在以后将详细讨论。
    VLC也很注重版权方面的问题,你可以放心的自由的使用而不需要为版权的问题担心——VLC只包括免费的、自由的库。VLC基于GPL,因此也可以用于商业应用,只需要保留GPL,以及公开源代码,如果你修改了VLC的话。
下面是VLC相关的一些链接
VLC官方网站:http://www.videolan.org/
VLC下载页面:http://www.videolan.org/vlc/
VLC下载目录(源码和安装包):http://download.videolan.org/pub/videolan/vlc/
VLC Nightly Builds: http://nightlies.videolan.org/
VLC 开发Wiki:http://wiki.videolan.org/Developers_Corner
VLC Win32第三方库预编译包下载目录:http://download.videolan.org/pub/testing/win32/
VLC 官方论坛:http://forum.videolan.org/

VLC 邮件列表:http://www.videolan.org/developers/lists.html


    总的来说把VLC内嵌入自己的应用有4种途径:

  1. 直接调用VLC进程
  2. VLC的plugin for Mozilla
  3. VLC的ActiveX插件:vlc自带了ActiveX控件--axvlc.dll,在编译完vlc之后的activex文件夹下。ActiveX是个好东西,axvlc.dll可以随意放到任何位置,成功注册之后可以方便的应用在程序和网页之中。可以参考activex文件夹下的test.html和README.TXT。ActiveX控件的接口有第一版和第二版,第一版简单,功能少,已经不再维护建议用第二版本,功能多一点。
  4. 动态调用libvlc.dll


附:视频播放的基本流程 

    几乎所有的视频播放器,如VLC、MPlayer、Xine,包括DirectShow,在播放视频的原理和架构上都是非常相似的,理解这个对理解VLC的源码会有事半功倍的效果。
    大致的来说,播放一个视频分为4个步骤:
        1. acess 访问,或者理解为接收、获取、得到
        2. demux 解复用,就是把通常合在一起的音频和视频分离(还有可能的字幕)
        3. decode 解码,包括音频和视频的解码
        4. output 输出,也分为音频和视频的输出(aout和vout)

    拿播放一个UDP组播的MPEG TS流来说吧,access部分负责从网络接收组播流,放到VLC的内存缓冲区中,access模块关注IP协议,如是否IPv6、组播地址、组播协议、端口等信息;如果检测出来是RTP协议(RTP协议在UDP头部简单得加上了固定12个字节的信息),还要分析RTP头部信息。这部分可以参看VLC源码 /modules/access/udp.c。

    在同目录下还可以看到大量的access模块,如file、http、dvd、ftp、smb、tcp、dshow、mms、v4l…等等。
    而demux部分首先要解析TS流的信息。TS格式是MPEG2协议的一部分,概括地说,TS通常是固定188字节的一个packet,一个TS流可以包含多个program(节目),一个program又可以包含多个视频、音频、和文字信息的ES流;每个ES流会有不同的PID标示。而又为了可以分析这些ES流,TS有一些固定的PID用来间隔发送program和es流信息的表格:PAT和PMT表。VLC专门做了一个独立的库libdvbpsi来解析和编码TS流,而调用它的代码可以参见VLC源码 /modules/demux/ts.c。之所以需要demux,是因为音视频在制作的时候实际上都是独立编码的,得到的是分开的数据,为了传输方便必须要用某种方式合起来,这就有了各种封装格式也就有了demux。

    demux分解出来的音频和视频流分别送往音频解码器和视频解码器。因为原始的音视频都是占用大量空间,而且冗余度较高的数据,通常在制作的时候就会进行某种压缩。这就是我们熟知的音视频编码格式,包括MPEG1(VCD)、MPEG2(DVD)、MPEG4、H.264、rmvb等等。音视频解码器的作用就是把这些压缩了的数据还原成原始的音视频数据。VLC解码MPEG2使用了一个独立的库libmpeg2,调用它的源文件是 /modules/codec/libmpeg2.c。VLC关于编解码的模块都放在/modules/codec目录下,其中包括著名的庞大的ffmpeg解码器。

    视频解码器输出的是一张一张的类似位图格式的图像,但是要让人从屏幕看得到,还需要一个视频输出的模块。当然可以像一个Win32窗口程序那样直接把图像画到窗口DC上——VLC的一个输出模块WinGDI就是这么干的,但是通常这太慢了,而且消耗大量的CPU。在Windows下比较好的办法是用DirectX的接口,会自动调用显卡的加速功能。
    这样的功能分解使得模块化更容易一点,每个模块住需要专注于自己的事;从整体来说功能强大而且灵活。
    但是事情总是不会那么简单。就拿access来说,媒体的访问是分层的,如RTSP就涉及到IPv4、TCP、UDP、RTCP、RTSP等多个层次的协议。有些视频格式包括了传输、封装格式和编辑码格式如MPEG系列,有些封装格式是独立的容器,但是很多人会误解它是编解码格式,如mkv、avi这些。
    音频和视频在demux之后就是独立的,但是需要有一套机制把它们同步起来。同时我们需要有一套机制来控制速度、暂停、停止、跳进,获取各种媒体信息,这些都是很复杂而又很重要的事情。
    另外也许需要在某个地方插入一些修改,来实现某种效果。如音频的EQ,视频的亮度调整之类的,VLC专门设计了access_filter、audio_filter和video_filter类型的模块来做这一类事情。
    VLC比较独特的地方是集成了原来的VLS的功能,这依赖于VLC中stream_output类型的模块,它们可以把正在播放的视频以某种方式重新转码和发送出去,如http、UDP、文件等等。
    MPlayer的结构与此是类似的,如/stream目录对应的是access的功能,/mpdemux对应的demux功能,/libmpcodecs是解码器,/libvo和/libao2分别是视频和音频的输出。
    DirectShow也是类似的,不过分类更多一些更复杂一点。DirectShow里面的模块叫做“filter”,filter之间通过”pin”来连接。access的模块对应于DirectShow中的SourceFIlter,这一类Filter只有输出pin没有输入pin。demux模块对应于splitter filter,这种filter有一个输入pin,多个输出pin。解码模块是一类transform filter,有一个输入pin、一个输出pin,输出模块对应于readering filter,有一个输入pin,没有输出pin。当然transform filter不一定是解码器,也可能是某种其他的处理。
    另外给出一个VLC的API Document,参见:http://rogerfd.cn/doc/vlcapi.htm。


附:VLC代码框架分析 
        
1.vlc.c 只是入口程序

2.Libvlc.c 是各个模块的结合点,这要是对接口编程
    Vlc_Create(): 两个重要的数据结构:libvlc_t & vlc_t , 所有的参数传递都在这里面
    Vlc_Init(): 初始化参数, module_bank
    Vlc_AddInf(): 添加module

3./src/misc/configure.c 命令行参数和参数文件分析
参数文件是~/.vnc/vlcrc。其中可以设置log文件的位置

4./include/ 所有头文件的集合

5./src/interface/Interface.h 所有module的集合

6./src/misc/Modules.c
其中module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability, const char *psz_name, vlc_bool_t b_strict ) 方法是寻找合适的interface如果找到合适的,就调用AllocatePlugin()动态的分配一个。


Qt + libVlc 玩转libVlc #define ssize_t SSIZE_T #include <vlc/vlc.h> 即可解决该错误 阅读详情

相关推荐

libdvbpsi库简单学习心得(一):使用和编辑库

libdvbpsi库使用方法及源代码学习

张辉的博客 2030

视频开发常用分析工具

视频开发分析工具介绍

世界那么大,我想去看看~【随心更新,看世界去了😄】 4012

Win10环境:使用VLC搭建RTSP服务器

VLC 是一款自由、开源跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。既可以作为客户端来播放远程视频,也可以作为RTSP服务器对外发布视频,今天要说的正式后者 安装VLCVideoLan选择合适的版本并下载 双击“vlc-3.0.1-win32.exe”按照导航安装 安装完成后如下图: VLC RTSP server 在进...

煎鸡蛋汤 2万+

VLC播放器(全称VideoLAN Client)

它支持播放几乎所有主流的视频和音频格式,包括MPEG-2、MPEG-4、H.264、DivX、MP3、AAC等。VLC还支持DVD、音频CD、VCD等不同的媒体格式。VLC最初由法国的École Centrale Paris的学生开发,旨在提供一种能够播放多种格式的音频和视频文件的轻量级播放器。VLC不仅是一个简单的媒体播放器,还具有许多高级的功能。它支持网络流媒体、视频捕捉、转码、字幕加载、屏幕录制等功能。同时,VLC还提供了丰富的用户文档和帮助文档,以便用户更好地了解和使用这款软件。

weixin_64944512的博客 5437

VLC架构剖析

VLC架构剖析 1. VideoLan简介 1.1 videolan组成 Videolan有以下两部分组成: VLC:一个最主要的部分,它可以播放各种类型的媒体文件和流媒体文件,并且可以创造媒体流并保存成各种格式的媒体文件,这些文件的质量要比没保存前的件好。videolan作为客户端可以播放本地文件,httP://,rtsp://。 VLS:一种流服务器,专门用来解决流的各种问题,它也

zjf82031913的专栏 8416

(转)一种开源跨平台视频开发框架VideoLAN - VLC media player

VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。至于为什么叫VideoLan Client,是因为以前还有一个VideoLan Server的项目(简称VLS),而目前VLS的功能已经合并到VLC中来,所以VLC不仅仅是一个视频播放器,它也可以作为小型的视频服务器,...

dianchixian5277的博客 301

VLC Media Player 64位Windows版安装与使用指南

VLC Media PlayerVideoLAN Client)最初由法国巴黎中央理工学院的学生于1996年发起,旨在实现校园网络内的视频流传输。2001年发布首个公开版本后迅速发展为跨平台开源播放器,隶属于VideoLAN项目组织。其核心目标是构建一个无需外部编解码器即可播放任意格式的“全能”播放器。双击运行后,首先进入欢迎界面。点击“Next >”后出现的第一个关键配置页是语言选择。

weixin_42160645的博客 2127

开源跨平台视频开发框架VideoLAN-VLC media player

VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。至于为什么叫VideoLan Client,是因为以前还有一个VideoLan Server的项目(简称VLS),而目前VLS的功能已经合并到VLC中来,所以VLC不仅仅是一个视频播放器,它也可以作为小型的视频服务器,更可以一边播放一边转码

郭风朴(guofengpu)的Android影音专栏 2513

VLC Media Player 3.0.8 for Win32安装包

本文还有配套的精品资源,点击获取 简介:VLC Media Player是一个开源、免费的多媒体播放器,由VideoLAN项目开发。它最初是为了支持网络流媒体播放而设计的,但现在已经发展成为一个功能强大的本地媒体播放工具,支持多种音频和视频格式。3.0.8版本的VLC Media Player适用于32位Windows操作系统,提供广泛的功能,如自定义皮肤、视频字幕支持和多...

weixin_42103128的博客 2815

VLC多媒体播放器:跨平台全能播放解决方案

在这一部分中,我们来深入了解VLC媒体播放器支持的流媒体协议种类。VLC是一个功能非常强大的多媒体播放器,几乎可以播放所有常见的网络流媒体格式,包括但不限于HTTP、RTSP、MMS和FTP等。它支持多种编解码器,使得它能够在不同的网络环境和设备上播放流媒体内容。VLC提供了一个易于使用的界面,用户可以根据个人喜好自定义播放器的外观。用户可以通过VLC的 “视图” 菜单中的 “界面设置” 来选择不同的界面布局和主题。此外,VLC允许用户下载并应用第三方制作的皮肤,以提供更加个性化和创新的用户体验。

weixin_33431149的博客 1728

VLC Media Player:简洁易用,让视频播放变得更简单

VLC Media Player是一款免费开源跨平台视频播放器,具有强大的视频格式兼容性,支持几乎全部流行格式。该播放器功能丰富,包括高清视频播放、音频增强、字幕自定义、截图录屏、流媒体播放和硬件加速等特性。支持Windows、macOS、Linux等多种操作系统,界面简洁易用,提供经典播放控制布局和详细的设置选项。作为一款全面实用的本地视频播放器,VLC能满足用户的多样化需求。

IT技术分享社区 1279

VLC Media Player 3.0.6版本解压缩与应用探究

VLC Media Player,通常简称为VLC,是一款由VideoLAN项目开发开源媒体播放器。它的历史可以追溯到1996年,最初是为法国国家计算机和自由科学学院的学生项目。VLC以其卓越的多格式支持、稳定性以及开源特性而闻名,迅速成为全球最受欢迎的媒体播放器之一。VLC Media Player不仅提供了强大的媒体播放功能,还支持用户进行个性化设置,包括更换皮肤和拓展功能。这一章节将深入探讨如何自定义VLC的界面以及如何利用插件和脚本来扩展播放器的功能。

weixin_42591908的博客 1060

VLC Media Player 免费开源的多媒体播放器软件

随着时间的推移,这个小小的项目逐渐壮大,吸引了一群来自全球各地的开发者加入。此外,它还支持强大的音频和视频编辑功能,让你自由地剪辑、调整和添加效果,创造出个性化的媒体作品。无论是Windows、Mac还是Linux,无论是桌面还是移动设备,用户都能轻松地在不同平台上使用VLC播放各种格式的音频和视频文件。而在众多的媒体播放器中,有一个开源软件一直默默耕耘,为用户提供了卓越的播放体验。VLC的成功离不开它强大的兼容性和出色的功能。而且,它还能播放损坏的媒体文件和未完成的下载文件,为用户提供了极大的便利。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 4018

VLC media player开源跨平台万能播放器,几乎能播所有格式

VLC media player是一款开源跨平台的万能播放器,支持几乎所有音视频格式(包括MKV、AVI、MP4、HEVC等),无需额外解码器。它不仅具备高品质音频播放(支持5.1/7.1声道环绕声)、网络流媒体播放(如RTSP、HLS等),还内置视频转码、屏幕录制、字幕同步等实用功能。完全免费开源(GPL-2.0协议),无广告无捆绑,支持Windows/macOS/Linux等多平台。VLC凭借其强大的兼容性和丰富的功能,成为全球下载量超35亿次的经典播放器,甚至能替代多个商业工具。

weixin_51215591的博客 339

VLC播放器:全球开源跨平台多媒体播放器的终极指南

VLC播放器的自定义皮肤功能赋予了用户极大的界面灵活性和个性化体验。要选择和应用皮肤,用户首先需要访问VLC的官方皮肤库,或者搜索互联网上的第三方皮肤资源。步骤1:打开VLC播放器。步骤2:进入菜单栏的“工具”选项,然后选择“首选项”。步骤3:在首选项设置中,切换到“外观”部分。步骤4:在界面主题部分,选择“浏览”按钮来定位并选择你下载的皮肤文件(通常为.vlt格式)。步骤5:选定皮肤文件后,点击“应用”按钮,然后VLC播放器将更新界面,应用新的皮肤。

weixin_31860973的博客 3130

VLC Media Player 3.0.5 64位版下载与介绍

本文还有配套的精品资源,点击获取 简介:VLC Media Player 3.0.5 64位版是一个稳定且功能强大的多媒体播放器,适用于Windows操作系统。本版本优化了解码性能,支持更多视频编码格式和网络流媒体协议,尤其是RTMP协议的拉流功能。VLC 3.0.5还具有自定义皮肤、扩展插件、媒体库管理、多样化的播放控制选项以及多音频和字幕轨道切换功能,能有效满足开发者进...

weixin_29041443的博客 1439

安卓使用VLC播放视频,实现截图和录制功能

使用vlc-android库播放RTSP视频

king的专栏 1万+
上一篇: 一种开源的跨平台视频开发框架:VideoLAN - VLC media player
下一篇: 使用VLC+Darwin作为视频服务进行转发的方法
xy365
博客等级 码龄21年 52粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值