国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
視頻播放的基本原理

VLC是一個功能強(qiáng)大的玩意,能做很多有意思的事情。

最簡單的,從界面打開一個文件播放,也可以在命令行下使用,如
C:/Program Files/VideoLAN/VLC>vlc.exe test.ts

獲取內(nèi)置的幫助,會寫到vlc-help.txt
C:/Program Files/VideoLAN/VLC>vlc.exe -h

獲取更詳細(xì)的幫助,有大量的選項介紹
C:/Program Files/VideoLAN/VLC>vlc.exe -H

在線使用幫助
http://www.videolan.org/doc/play-howto/en/play-howto-en.html
http://www.videolan.org/doc/streaming-howto/en/streaming-howto-en.html

搜索并顯示可用的模塊列表
C:/Program Files/VideoLAN/VLC>vlc.exe -l

Windows下,默認(rèn)情況,VLC的配置文件在 %APPDATA%/vlc/vlcrc
%APPDATA%在XP下通常是 C:/Documents and Settings/用戶名/Application Data
Linux下,在用戶home目錄的/.vlc/中

vlc的選項完全可以通過修改vlcrc來設(shè)置,界面只是略微方便一點

重置所有選項到默認(rèn)狀態(tài)
C:/Program Files/VideoLAN/VLC>vlc.exe –reset-config

VLC從vlcrc中指定的plugin-path,以及當(dāng)前目錄的modules和plugins目錄來遞歸查找plugin

VLC的大部分功能都是通過plugin來實現(xiàn)的。VLC默認(rèn)有大量的動態(tài)插件,例如官方VLC0.8.6e有210個插件。為了加快啟動速度,vlc會在%APPDATA%/vlc/cache中緩存plugin的列表,選項plugins-cache=0可以禁止緩存plugin

打開一個UDP組播流,組播組 239.255.1.1,端口 4567,默認(rèn)端口1234
對于rtp協(xié)議,VLC會自動識別,寫udp還是rtp都沒問題
C:/Program Files/VideoLAN/VLC>vlc.exe udp://@239.255.1.1:4567

在本地UDP端口 888 接收流, “@”表示綁定一個地址,而不是連接該地址
C:/Program Files/VideoLAN/VLC>vlc.exe udp://@888

串流輸出,就是在播放的時候,以某種方式向外傳送視頻,在打開界面
的串流/保存 中設(shè)置會比較方便
例如,循環(huán)播放test.ts, 以rtp方式傳送到224.1.1.1端口1234, 同時顯示視頻
vlc.exe test.ts –loop :sout=#duplicate{dst=std{access=rtp,mux=ts,dst=224.1.1.1:1234},dst=display}
例如,接收UDP端口888,數(shù)據(jù)全部保存到C:/dump.ts
vlc.exe udp://@888 :demux=dump :demuxdump-file=”C:/dump.ts”

關(guān)于Windows下視頻輸出模塊
Direct3D :效果比DirectX差一點,但是方便截圖,也可以在圖像上實現(xiàn)alpha
DirectX:效果最好,利用DirectX的顯示加速
OpenGL:在不同的硬件上表現(xiàn)不太一樣
WinGDI:最慢的一種,不需要顯卡加速
caca:用彩色的Assic字符來顯示,很有意思
臨時啟用某個視頻輸出,可以這樣
C:/Program Files/VideoLAN/VLC-0.8.6e>vlc test.ts –vout=caca

ActiveX控件
官方發(fā)布的VLC自帶ActiveX控件 axvlc.dll,注冊之后可以方便的在應(yīng)用程序和網(wǎng)頁
中使用VLC,注冊的辦法是
C:/Program Files/VideoLAN/VLC-0.8.6e>regsvr32 axvlc.dll
ActiveX VLC的使用方法可以參考源代碼中ActiveX目錄的README.TXT和test.html
ActiveX控件的接口有第一版和第二版,第一版簡單,功能少,已經(jīng)不再維護(hù)
建議用第二版本,功能多一點

Mozilla Plugin
你還可以在Windows和Linux的Firefox中使用VLC。Windows下可以在安裝VLC的時候選上
Mozilla plugin,事實上它做的就是在HKLM_Software_MozillaPlugin鍵下添加一個VLC的子鍵。
Linux下就不太清楚了,但是你可以把libvlcplugin.so(或者叫npvlc.so)和插件目錄
放到Firefox的plugins目錄,來使之生效。
同樣這適用于基于Xulrunner的應(yīng)用程序,事實上像 Miro、SongBird等xul應(yīng)用都是用的
這個插件。
與ActiveX類似的,VLC的Mozilla Plugin也有兩套接口,建議用新的第二版。

注冊表
在Windows下VLC只使用很少量的注冊表的信息,最重要的一條是HKLM_Software_VLC鍵
下的InstallDir項,VLC的Mozilla Plugin和ActiveX控件通過這一項來定位其插件的目錄

Telnet、Http控制
對VLC來說,控制界面都是Interface類的模塊,你可以使用各種控制模塊。Windows下
默認(rèn)使用的是wxwidgets圖形界面,你還可以使用http、telnet等界面,來遠(yuǎn)程控制VLC,
夠酷吧?如果你用VLC在服務(wù)器上專門作視頻流轉(zhuǎn)發(fā)一類的事情,這種遠(yuǎn)程界面
可以幫上大忙。

視頻過濾器
0.8系列中有多達(dá)13種視頻過濾器,為視頻添加各種效果和特殊處理。用的比
較多的是反交錯deinterlace過濾器,在觀看MPEG2視頻時很有用。

Skin2界面
一個漂亮一點的,可以換膚的界面,覺得它不太穩(wěn)定很少用。

其他的
播放DVD、VCD光盤,打開DirectShow設(shè)備,播放當(dāng)前屏幕…很多好玩的功能可以去摸索一下

一些問題

目前的VLC無法播放Real視頻,如rm、rmvb。其實從0.9版本的VLC開始可以依賴其他解碼
器播放。但就目前測試的情況來看,順序播放沒問題,但是拖動則效果很差

RTSP的播放,拖動有問題,在獲取播放位置時有缺陷。例如和達(dá)爾文服務(wù)器的配合。

 

視頻播放的基本原理

   當(dāng)初看VLC代碼花了不少時間,其中很大的原因是不太了解視頻播放的基本原理?,F(xiàn)在看來,幾乎所有的視頻播放器,如VLC、MPlayer、Xine,包括DirectShow,在播放視頻的原理和架構(gòu)上都是非常相似的,理解這個對理解VLC的源碼會有事半功倍的效果。
    大致的來說,播放一個視頻分為4個步驟:
    1.  acess 訪問,或者理解為接收、獲取、得到
    2. demux 解復(fù)用,就是把通常合在一起的音頻和視頻分離(還有可能的字幕)   
    3. decode 解碼,包括音頻和視頻的解碼
    4. output 輸出,也分為音頻和視頻的輸出(aout和vout)
   拿播放一個UDP組播的MPEGTS流來說吧,access部分負(fù)責(zé)從網(wǎng)絡(luò)接收組播流,放到VLC的內(nèi)存緩沖區(qū)中,access模塊關(guān)注IP協(xié)議,如是否IPv6、組播地址、組播協(xié)議、端口等信息;如果檢測出來是RTP協(xié)議(RTP協(xié)議在UDP頭部簡單得加上了固定12個字節(jié)的信息),還要分析RTP頭部信息。這部分可以參看VLC源碼/modules/access/udp.c。在同目錄下還可以看到大量的access模塊,如file、http、dvd、ftp、smb、tcp、dshow、mms、v4l…等等
   而demux部分首先要解析TS流的信息。TS格式是MPEG2協(xié)議的一部分,概括地說,TS通常是固定188字節(jié)的一個packet,一個TS流可以包含多個program(節(jié)目),一個program又可以包含多個視頻、音頻、和文字信息的ES流;每個ES流會有不同的PID標(biāo)示。而又為了可以分析這些ES流,TS有一些固定的PID用來間隔發(fā)送program和es流信息的表格:PAT和PMT表。關(guān)于TS格式的詳細(xì)信息可以去google一下。
    VLC專門做了一個獨立的庫libdvbpsi來解析和編碼TS流,而調(diào)用它的代碼可以參見VLC源碼 /modules/demux/ts.c。
    其實之所以需要demux,是因為音視頻在制作的時候?qū)嶋H上都是獨立編碼的,得到的是分開的數(shù)據(jù),為了傳輸方便必須要用某種方式合起來,這就有了各種封裝格式也就有了demux。
   demux分解出來的音頻和視頻流分別送往音頻解碼器和視頻解碼器。因為原始的音視頻都是占用大量空間,而且冗余度較高的數(shù)據(jù),通常在制作的時候就會進(jìn)行某種壓縮。這就是我們熟知的音視頻編碼格式,包括MPEG1(VCD)、MPEG2(DVD)、MPEG4、H.264、rmvb等等。音視頻解碼器的作用就是把這些壓縮了的數(shù)據(jù)還原成原始的音視頻數(shù)據(jù)。VLC解碼MPEG2使用了一個獨立的庫libmpeg2,調(diào)用它的源文件是/modules/codec/libmpeg2.c。VLC關(guān)于編解碼的模塊都放在/modules/codec目錄下,其中包括著名的龐大的ffmpeg。
   解碼器,例如視頻解碼器輸出的是一張一張的類似位圖格式的圖像,但是要讓人從屏幕看得到,還需要一個視頻輸出的模塊。當(dāng)然可以像一個Win32窗口程序那樣直接把圖像畫到窗口DC上——VLC的一個輸出模塊WinGDI就是這么干的,但是通常這太慢了,而且消耗大量的CPU。在Windows下比較好的辦法是用DirectX的接口,會自動調(diào)用顯卡的加速功能。
    這樣的功能分解使得模塊化更容易一點,每個模塊住需要專注于自己的事;從整體來說功能強(qiáng)大而且靈活。
   但是事情總是不會那么簡單。就拿access來說,媒體的訪問是分層的,如RTSP就涉及到IPv4、TCP、UDP、RTCP、RTSP等多個層次的協(xié)議。有些視頻格式包括了傳輸、封裝格式和編輯碼格式如MPEG系列,有些封裝格式是獨立的容器,但是很多人會誤解它是編解碼格式,如mkv、avi這些。
    音頻和視頻在demux之后就是獨立的,但是需要有一套機(jī)制把它們同步起來。同時我們需要有一套機(jī)制來控制速度、暫停、停止、跳進(jìn),獲取各種媒體信息,這些都是很復(fù)雜而又很重要的事情。
    另外也許需要在某個地方插入一些修改,來實現(xiàn)某種效果。如音頻的EQ,視頻的亮度調(diào)整之類的,VLC專門設(shè)計了access_filter、audio_filter和video_filter類型的模塊來做這一類事情。
    VLC比較獨特的地方是集成了原來的VLS的功能,這依賴于VLC中stream_output類型的模塊,它們可以把正在播放的視頻以某種方式重新轉(zhuǎn)碼和發(fā)送出去,如http、UDP、文件等等。
    MPlayer的結(jié)構(gòu)與此是類似的,如/stream目錄對應(yīng)的是access的功能,/mpdemux對應(yīng)的demux功能,/libmpcodecs是解碼器,/libvo和/libao2分別是視頻和音頻的輸出。
   DirectShow也是類似的,不過分類更多一些更復(fù)雜一點。DirectShow里面的模塊叫做“filter”,filter之間通過”pin”來連接。access的模塊對應(yīng)于DirectShow中的SourceFIlter,這一類Filter只有輸出pin沒有輸入pin。demux模塊對應(yīng)于splitterfilter,這種filter有一個輸入pin,多個輸出pin。解碼模塊是一類transformfilter,有一個輸入pin、一個輸出pin,輸出模塊對應(yīng)于readeringfilter,有一個輸入pin,沒有輸出pin。當(dāng)然transform filter不一定是解碼器,也可能是某種其他的處理。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VLC源碼分析總結(jié)
VLC源碼分析(二)
音視頻都可以播放的媒體播放器
用猿大師VLC播放程序在高版本Chrome、Firefox、Edge等瀏覽器中低延遲播放??低?、大華攝像頭RTSP視頻流(圖文教程)
聊聊視頻中的編解碼器,你所不知道的h264、h265、vp8、vp9和av1編解碼庫
vlc命令行大全
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服