vlc播放流程分析

author author     2022-08-28     626

关键词:

  当点击播放文件或者输入要播放的文件后,vlc会执行一系列的流程。

  首先需要了解视频以及流媒体处理及播放的流程,由链接中的描述,视频以及流媒体处理时,首先要解协议(http,rtmp,rtsp等),然后是解封装(mp4,mkv,avi等),获得音频码流和视频码流,分别解码后,再根据时间戳进行同步。使用vlc点击播放后,就是这一系列的流程。

  点击播放支持RTSP协议的摄像头后,vlc会开启线程对输入的文件或者url进行分析(src/playlist/preparser.c),根据视频源属性做一些准备工作,包括:

  ->InputSourceInit()

    ->input_SplitMRL()分解url

    ->demux_New()创建分离器,如果是一个mp4文件,则会动态加载libmp4库,以此类推

    ->demux_Control()调用libmp4的Control函数,以此类推

    ......

    ->InitPrograms()根据文件或url属性创建解码器(decoder),创建过程会加载对应模块

  之后就是从网络或者本地获取数据,堆栈如下。从堆栈中可以看到,接收线程接收网络数据时,如果数据有封包格式(如mp4,mkv,ts等),则首先进行的是解封装,将解封包后的数据组成block(可以理解为是一个结构体,这个结构体可以用来保存压缩后的图像数据),放入数据fifo中;解码线程从数据fifo中取出block来解码,最后交由其他渲染模块去显示。不同的是,摄像头并没有封装视频格式,而是传输的编码后的裸数据。

  同理,播放一个本地mp4文件的堆栈如下。播放本地文件就没有了解协议的步骤,但是使用了libmp4进行了拆包。

  放入数据fifo中的数据还没有被解码,另外还有两个解码线程(音频和视频)不断的从各自的队列中取数据解码,视频解码线程的堆栈如下。解码线程首先从上述数据fifo中取出数据,使用已经根据数据源格式创建好的解码器解码,之后将解码后的数据放到图像fifo中。

  最后是渲染线程的堆栈,渲染线程不断的从图像fifo中取出数据渲染到窗体上。

  程序的整体框图如下。当RTSP session建立的时候,程序根据RTSP会话得到的SDP信息创建视频解码器和音频解码器。RTP数据到来后,经过Demux,分别放入两个fifo中,然后两个解码线程分别从各自的fifo中取出视频和音频数据解码。解码后的音频数据直接播放,解码后的视频数据放入picture_fifo_t中,由渲染线程负责显示。

  附:

  配置好的Windows版vlc工程下载:https://github.com/jiayayao/vlc_2.1.0-vs_2010,下载后使用vs2010可以直接编译运行,调试学习非常方便。

vlc播放rtsp抓包分析

VLC播放RTSP视频抓包记录:vlc -vvv rtsp://172.16.66.22/nuc.sdpOPTIONS: OPTIONS rtsp://172.16.66.22/nuc.sdp RTSP/1.0 CSeq: 2 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming&nb 查看详情

vlc源码分析流媒体的音视频同步

http://www.cnblogs.com/jiayayao/p/6890882.html   vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放。首先了解两个... 查看详情

vlc源码分析流媒体的音视频同步

  vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放。  首先了解两个概念:streamclock和systemclock。strea... 查看详情

简单的多屏播放器示例(vlc+qt)

简单的多屏播放器示例(vlc+qt)介绍简单的多屏播放器最多同时播放16个视频支持本地文件和rtsp、rtmp等流媒体播放VS2015工程,依赖Qt+VLC练手作品截图下载程序:download.csdn.net/detail/u014755412/9908787源码:github.com/FutaAlice/QtPlayer代码分析... 查看详情

python-vlc 在启动之间切换播放媒体

】python-vlc在启动之间切换播放媒体【英文标题】:python-vlcswitchingplaybackmediabetweenlaunches【发布时间】:2022-01-2016:39:23【问题描述】:我正在尝试设置一个系统,让我的开始屏幕视频循环播放,直到按下2个按钮中的1个(GPIO按钮)... 查看详情

vlc源码分析调试学习hls协议

...是,HLS可以穿透某些允许HTTP协议通过的防火墙。一、HLS播放模式(1) 点播模式(Videoondemand,VOD)    点播模式是指当前时间点可以获取到所有index文件和ts文件,二级inde 查看详情

vlc通过rtsp地址向ipc取流播放不了问题排查

... 另外一个是UDP,转RTP分析看看: WC!这丢包率能播放就神奇了,再看另一个, 好吧,基本上能确定是网络丢包所导致的。但是平常见到hik rtsp取流不都是tcp吗,怎么这里是udp的?问了下,才知道原来vlc可以设置的... 查看详情

在 VLC 播放器中播放 RTSP 流

】在VLC播放器中播放RTSP流【英文标题】:PlayingRTSPstreaminVLCplayer【发布时间】:2011-08-1808:29:37【问题描述】:我正在尝试用java制作一个简单的rtsp流服务器。服务器能够将视频正确地流式传输到自定义写入的播放器。我无法在vlc... 查看详情

wpf开发vlc播放器(万能播放器)(代码片段)

一、在VLC官网下载最新的VLC播放器,然后安装,安装后在安装文件目录中分别把文件VideoLAN\VLC\和VideoLAN\VLC\plugins\拷贝到项目中。\VLC文件夹中包括\plugins文件夹、axvlc.dll、libvlc.dll、libvlccore.dll、npvlc.dll,将整个VLC文件夹复制到\bin\... 查看详情

opensuse播放使用vlc播放视频

openSUSE使用VLC播放视频linux视频播放为什么通常我们在安装号vlc后,由于版权的原因,是无法获取视频的解码器的。我们需要下载第三方的解码器帮助我们进行解码。过程如下:添加packman地址sudozypperar-cfp90http://ftp.gwdg.de/pub/linux/misc... 查看详情

使用vlc发送ts流与播放ts流

使用VLC发送TS流与播放TS流  一、如何使用VLC发送TS流1、添加一个文件至VLC  2、选择串流,继续  3、选择UDP,点击添加  4、输入地址及端口  5、选择h.264+mp3(TS)  6、next至播放。  ... 查看详情

html中嵌入vlc播放器

先下载安装VLC的插件,然后写一个页面,页面中,指定好对应的rtsp视频地址就好了。去VLC的官网下载对应的插件,目前插件的最新版本是2.2.4.下载完成后,安装到磁盘指定位置,比如:D:VLC注册VLC插件(否则视频无法正常显示)... 查看详情

a2dp播放流程源码分析(代码片段)

之前分析了a2dpprofile的初始化的流程,这篇文章分析一下,音频流在bluedroid中的处理流程。上层的音频接口是调用a2dphal里面的接口来进行命令以及数据的发送的。关于控制通道的初始化以及建立的过程,这里就不分析了,我们主... 查看详情

让vlc也拥有斷點播放功能

如何让VLC也拥有记忆功能,记住上次播放位置.以下都是在Windows系统下操作,其他方法/步骤下载libsrpos_plugin-0.5.win插件https://sourceforge.net/projects/vlcsrposplugin/?source=typ_redirect解压并把解压的文件复制到VLC的安装目录下的plugins目录下.如... 查看详情

如何在 VLC 中播放 HLS 流

】如何在VLC中播放HLS流【英文标题】:HowtoplayHLSstreaminVLC【发布时间】:2016-05-2519:11:23【问题描述】:我正在尝试使用Vlc.DotNet在WPF中播放HLS流,但我不断收到403Forbidden错误。但是,我可以通过浏览器下载m3u8文件,它也可以使用ht... 查看详情

Python VLC 不会播放音频?

】PythonVLC不会播放音频?【英文标题】:PythonVLCwon\'tplaytheaudio?【发布时间】:2020-06-1003:25:59【问题描述】:我正在尝试使用pythonVLC播放mp3文件,但似乎什么也没发生,也没有错误消息。下面是代码:importvlcp=vlc.MediaPlayer(r"C:\\Users... 查看详情

vlc串流并同时本地播放视频问题

...生成串流,用的是本地的视频文件,但我又同时想在本地播放此串流,以便比较接收端接收到的和本地播放的画面,我知道vlc中在生成串流时,有个选项是在本地显示,但我勾选了,不起作用,有时候表现在,本地的画面会卡在... 查看详情

使用 Excel VBA 中的 VLC 播放电影

】使用ExcelVBA中的VLC播放电影【英文标题】:PlaymovieusingVLCfromExcelVBA【发布时间】:2018-09-2013:19:12【问题描述】:我正在尝试创建一个excelvba程序/宏,它将使用vlcactivex插件(axvlc.dll)在vlc播放器中启动本地存储在我的硬盘上的电影... 查看详情