本文整理了两篇博客的内容:
几乎所有的视频播放器,如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…等等
大致的来说,播放一个视频分为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…等等