vlc源码分析播放流程

STN_LCD STN_LCD     2022-09-08     470

关键词:

http://www.cnblogs.com/jiayayao/p/6752388.html

  当点击播放文件或者输入要播放的文件后,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信息创建视频解码器和音频解码器,两个解码器有各自的fifo,用于存放需要解码的数据。RTP数据到来后,经过Demux,分别放入两个fifo中,然后两个解码线程分别从各自的fifo中取出视频和音频数据解码。解码后的音频数据直接播放,解码后的视频数据放入picture_fifo_t中,由渲染线程负责显示。

  附:

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

 

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

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

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

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

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

    HTTPLiveStreaming(HLS)是苹果公司提出来的流媒体传输协议。与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙。一、HLS播放模式(1) 点播模式(Videoondemand,VOD)    点播模式是指当前... 查看详情

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+qt)

...手作品截图下载程序:download.csdn.net/detail/u014755412/9908787源码:github.com/FutaAlice/QtPlayer代码分析IMediaPlayer是为规定接口的基类提供了播放和控制的几个 查看详情

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

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

android音频源码分析——音量调节流程(代码片段)

源码分析基于android9.0一、声音类型对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体、铃声、闹钟、通话,但是其系统内部则分为十几种类型。声⾳类型用来区分不同播放用途及播... 查看详情

vlc源码分析之调用live555接收rtsp数据

  首先了解RTSP/RTP/RTCP相关概念,尤其是了解RTP协议:RTP与RTCP协议介绍(转载)。  vlc使用模块加载机制调用live555,调用live555的文件是live555.cpp。一、几个重要的类    以下向左箭头(“<-”)为继承关系。1. RTPIn... 查看详情

vlc源码分析调用openmax硬解码h.265

http://www.cnblogs.com/jiayayao/p/6964506.html   H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.265使用场... 查看详情

android音频源码分析——音量调节流程(代码片段)

源码分析基于android9.0一、声音类型对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体、铃声、闹钟、通话,但是其系统内部则分为十几种类型。声⾳类型用来区分不同播放用途及播... 查看详情

百行代码实现vlc简易视频播放器vlc环境配置过程+可执行源码注释完整(代码片段)

文章目录❓什么是VLC🚀VLC库的集成⭐VLC环境配置演示【win10系统+vs2017+win64】🍎VLC库的基本使用🎂视频播放器实现⭐自定义函数Unicode2Utf8讲解🏠总结❓什么是VLCVLC是VideoLanClient的缩写,原先是几个法国的... 查看详情

vlc核心libvlc从源码下载工程建立实际使用一篇通

...和视频输出,插件管理,线程系统。所有的LibVLC源码位于src\\及其子目录。  那么两者具体是什么关系呢?客官请不要急,这里有图。        总体来说,LibVLC和VLC是基础核心与扩展应用的关系࿰... 查看详情

crosscompilevlc播放器

...FFmpeg,继续介绍 VLC播放器 交叉编译。首先下载vlc源码 我用的是2.2.6 地址: http://mirrors.neusoft.edu.cn/videolan/vlc/2.2.6/vlc-2.2.6.tar.xz 解压,进入目录。 然后 设置ffmpeg路径 ,上一章 查看详情

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

...这里有额外的代码,只是为了计算每天的播放次数以进行分析 查看详情

ffmpeg之ffplay源码简要分析(代码片段)

1ffplay基本架构1.1视频解码播放的基本流程  ffmpeg视频解码播放的基本流程如下图所示:首先对网络媒体数据流进行解封装得到一般的视频封装格式比如MP4等,如果是本地播放的媒体文件就不需要解协议;然后对视... 查看详情

vlc,ffmpeg是干啥用的

...放的,估计是想让你做个能显示监控的,建议你去网上下源码分析一下再着手做。 查看详情

最新libvlc4.0+qt设计视频播放器

...供了渲染接口,支持opengl、D3D渲染,二次开发非常方便,源码里提供了很多例子,方便开发者二次开发参考,有Qt的、SDL的、GTK的、OpenGL渲染的、D3D渲染的等等。VLC最新的4.0版本官网首页:VLCmediaplayercontinuousnightlybuilds-VideoLAN二、... 查看详情

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

...流包的。而且换另一个ipc可以预览,仅仅这个可以而已。分析:据我所了解,rtsp取流跟onvif是一致的,也就是根据报文交互来确定取流、发流的相关属性。思路:分别抓包,看报文,对比,猜测,验证。首先抓了个能预览的:&nb... 查看详情