首页 数据库 mysql教程 视频播放的基本原理[转]

视频播放的基本原理[转]

Jun 07, 2016 pm 03:30 PM
vlc 原理 基本 播放 视频

视频播放的基本原理 当初看VLC代码花了不少时间,其中很大的原因是不太了解视频播放的基本原理。现在看来,几乎所有的视频播放器,如VLC、MPlayer、Xine,包括DirectShow,在播放视频的原理和架构上都是非常相似的,理解这个对理解VLC的源码会有事半功倍的效



视频播放的基本原理

    当初看VLC代码花了不少时间,其中很大的原因是不太了解视频播放的基本原理。现在看来,几乎所有的视频播放器,如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表。关于TS格式的详细信息可以去google一下。


    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中的Source FIlter,这一类Filter只有输出pin没有输入pin。demux模块对应于splitter filter,这种filter有一个输入pin,多个输出pin。解码模块是一类transform filter,有一个输入pin、一个输出pin,输出模块对应于readering filter,有一个输入pin,没有输出pin。当然transform filter不一定是解码器,也可能是某种其他的处理。


 原文地址 http://blog.csdn.net/bisword/archive/2009/02/05/3865000.aspx
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? 抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? Mar 21, 2024 pm 05:57 PM

随着短视频平台的兴起,抖音成为了大家日常生活中不可或缺的一部分。在抖音上,我们可以看到来自世界各地的有趣视频。有些人喜欢发布他人的视频,这就引发了一个问题:抖音发布他人视频侵权吗?本文将围绕这个问题展开讨论,告诉大家怎样剪辑视频不算侵权,以及如何避免侵权问题。一、抖音发布他人视频侵权吗?根据我国《著作权法》的规定,未经著作权人许可,擅自使用其作品,属于侵权行为。因此,在抖音上发布他人视频,如果未经原作者或著作权人许可,就属于侵权行为。二、怎样剪辑视频不算侵权?1.使用公共领域或已授权的内容:公共

VLC Chromecast无法在Windows PC上运行 VLC Chromecast无法在Windows PC上运行 Mar 26, 2024 am 10:41 AM

VLCChromecast功能在您的WindowsPC上不起作用吗?此问题可能是由Chromecast设备与VLC的铸造功能之间的兼容性问题引起的。在这篇文章中,我们将告诉你在这种情况下你可以做什么,以及如果VLC渲染器找不到你的Chromecast该怎么办。如何在Windows上使用ChromecastVLC?要使用VLC将视频从Windows投射到Chromecast,请遵循以下步骤:打开媒体播放器应用程序,转到播放菜单。导航到Renderer选项,您将能够看到检测到的Chromecast设

抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? 抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? Mar 21, 2024 pm 08:17 PM

抖音,这个全民短视频平台,不仅让我们在闲暇时间享受到各种有趣、新奇的短视频,同时也给了我们一个展示自我、实现价值的舞台。那么,如何在抖音发布视频赚取收益呢?本文将详细解答这个问题,帮助你在抖音上赚取更多的收益。一、抖音发布视频如何赚收益?发布视频在抖音上获得一定的播放量后,可以有机会参与广告分成计划。这一收益方式是抖音用户最为熟悉的之一,也是许多创作者主要的收入来源。抖音根据账号权重、视频内容以及观众反馈等多种因素来决定是否提供广告分成的机会。抖音平台允许观众通过发送礼物来支持自己喜欢的创作者,

微博发视频怎么不压缩画质_微博发视频不压缩画质方法 微博发视频怎么不压缩画质_微博发视频不压缩画质方法 Mar 30, 2024 pm 12:26 PM

1、首先打开手机微博,点击右下角【我】(如图所示)。2、接着点击右上角【齿轮】打开设置(如图所示)。3、然后找到并打开【通用设置】(如图所示)。4、随后进入【视频随着】选项(如图所示)。5、再打开【视频上传清晰度】设置(如图所示)。6、最后选择【原画质】就能不压缩了(如图所示)。

从 iPhone 上的视频中删除慢动作的 2 种方法 从 iPhone 上的视频中删除慢动作的 2 种方法 Mar 04, 2024 am 10:46 AM

在iOS设备上,“相机”应用程序允许您拍摄慢动作视频,如果您使用的是最新款的iPhone,甚至可以以每秒240帧的速度录制视频。这种功能让您能够捕捉到丰富细节的高速动作。但有时候,您可能希望将慢动作视频以正常速度播放,这样可以更好地欣赏视频中的细节和动作。在这篇文章中,我们将解释从iPhone上的现有视频中删除慢动作的所有方法。如何从iPhone上的视频中删除慢动作[2种方法]您可以使用“照片”App或iMovie剪辑App从设备上的视频中删除慢动作。方法1:使用“照片”应用在iPhone上打开

如何发布小红书视频作品?发视频要注意什么? 如何发布小红书视频作品?发视频要注意什么? Mar 23, 2024 pm 08:50 PM

随着短视频平台的兴起,小红书成为了许多人分享生活、表达自我、获取流量的平台。在这个平台上,发布视频作品是一种非常受欢迎的互动方式。那么,如何发布小红书视频作品呢?一、如何发布小红书视频作品?首先,确保准备好一段适合分享的视频内容。你可以利用手机或其他摄像设备进行拍摄,需要注意画质和声音的清晰度。2.剪辑视频:为了让作品更具吸引力,可以对视频进行剪辑。可以使用专业的视频剪辑软件,如抖音、快手等,添加滤镜、音乐、字幕等元素。3.选择封面:封面是吸引用户点击的关键,选择一张清晰、有趣的图片作为封面,让

uc浏览器下载的视频怎么变成本地视频 uc浏览器下载的视频怎么变成本地视频 Feb 29, 2024 pm 10:19 PM

uc浏览器下载的视频怎么变成本地视频?许多手机用户都喜欢使用UC浏览器,不仅可用它进行网页浏览,还可在线观看各种视频和电视节目,并将喜爱的视频下载至手机。实际上,我们可以将下载的视频转换为本地视频,但很多人不清楚如何操作。因此,小编特地为大家带来了将uc浏览器缓存的视频转为本地视频方法,希望可以帮助到各位。将uc浏览器缓存的视频转为本地视频方法1、打开uc浏览器,点击“菜单”选项。2、点击“下载/视频”。3、点击“已缓存视频”。4、长按任意一个视频,弹出选项后,点击“打开目录”。5、勾选要下载的

nohup的作用及原理解析 nohup的作用及原理解析 Mar 25, 2024 pm 03:24 PM

nohup的作用及原理解析在Unix和类Unix操作系统中,nohup是一个常用的命令,用于在后台运行命令,即便用户退出当前会话或关闭终端窗口,命令仍然能够继续执行。在本文中,我们将详细解析nohup命令的作用和原理。一、nohup的作用后台运行命令:通过nohup命令,我们可以让需要长时间运行的命令在后台持续执行,而不受用户退出终端会话的影响。这在需要运行

See all articles