首頁 資料庫 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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 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

抖音,這個全民短視頻平台,不僅讓我們在閒暇時間享受到各種有趣、新奇的短視頻,同時也給了我們一個展示自我、實現價值的舞台。那麼,如何在抖音發布影片中賺取收益呢?本文將詳細解答這個問題,幫助你在抖音上賺取更多的收益。一、抖音發布影片如何賺收益?發布影片在抖音上獲得一定的播放量後,可以有機會參與廣告分成計畫。這項收益方式是抖音用戶最熟悉的之一,也是許多創作者主要的收入來源。抖音根據帳號權重、影片內容以及觀眾回饋等多種因素來決定是否提供廣告分成的機會。抖音平台允許觀眾透過發送禮物來支持自己喜歡的創作者,

從 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.勾選要下載的

微博發影片怎麼不壓縮畫質_微博發影片不壓縮畫質方法 微博發影片怎麼不壓縮畫質_微博發影片不壓縮畫質方法 Mar 30, 2024 pm 12:26 PM

1.先打開手機微博,點選右下角【我】(如圖所示)。 2、接著點選右上角【齒輪】打開設定(如圖所示)。 3.然後找到並開啟【通用設定】(如圖所示)。 4.隨後進入【影片隨著】選項(如圖所示)。 5.再開啟【影片上傳清晰度】設定(如圖)。 6.最後選擇【原畫質】就能不壓縮了(如圖)。

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

nohup的作用及原理解析在Unix和類Unix作業系統中,nohup是一個常用的命令,用於在後台運行命令,即便用戶退出當前會話或關閉終端窗口,命令仍然能夠繼續執行。在本文中,我們將詳細解析nohup指令的作用和原理。一、nohup的作用後台運行命令:透過nohup命令,我們可以讓需要長時間運行的命令在後台持續執行,而不受用戶退出終端會話的影響。這在需要運行

See all articles