最近比較忙,忙來忙去也不知道幹了些什麼
一直在了解 VLC 播放器方面的東西,目标是實作一個基于 VLC 的 Client ,
來播放 RTP / RTSP 的流媒體。
下面是我對這東西的個人了解,寫下來免得以後糊塗了,也歡迎有興趣的朋友來交流
關于 VLC ,這東西很 nb 。嗯
它可以:
1。播放除了rm 系列格式之外的所有視訊。額,好吧是幾乎所有。。
由于采用了plugin 的編解碼器,它是能夠擴充的。
2。可以播放不完整的視訊檔案,比如BT下了一半的電影。
3。可以友善的擷取輸入流媒體,并且輸出。
VLC 的輸入可以是本地視訊,也可以是 mms 、rtsp 流媒體,或者是FTP上面的檔案
甚至用 screen:// 你可以把你的螢幕當成輸入。VLC 可以根據不同的輸入調用不同的解碼程式。
獲得了輸入并且解碼了以後你可以選擇顯示視訊到視窗(播放器)、存儲到硬碟、或者輸出到網絡(點播)。
好吧。。你可以選擇即顯示視訊又存儲,或者輸出給别的計算機。
嗯 是不是很亂。。比如說我有個avi格式的視訊,我可以一邊播放一邊把他轉換成mp4格式存到我的手機裡,或者我有一部電影想給朋友看,怎麼辦?開FTP傳麼。。哦,用VLC你可以在自己浏覽的同時通過 rtp 協定發送給你的朋友看。
額,的确比較亂,不過這也是VLC強大的地方。
要在程式中使用VLC的功能,據我所知有幾個方法:
1。直接使用源碼。。這個有點麻煩,在windows下編譯VLC隻能用 Mingw32 或者 Cygwin。
2。使用 libvlc.dll 。由于已經有了 source ,直接找到需要的函數的定義從 libvlc.dll 中導出相應功能即可。勞動量大,而且基于此開發的DD得遵守GPL。。
3。使用 ActiveX。VLC for windows 安裝程式提供了axvlc.dll ,實作了 VLC 基本功能的封裝。
初衷是為了能在web中調用VLC播放視訊,是以對于一個控件浏覽是沒問題的,
但是要想在單個web頁面同時浏覽一路以上不同源的流媒體,會出現IE崩潰的問題(fixed in v0.9.0 Nightly Builds)。
對于在 App 中使用 ActiveX ,靜态調用比較簡單,嗯 。無論是 MFC 還是 VCL,在窗體上安置好控件後,封裝好的對象都自動生成了。
關于 ActiveX 的動态調用 ,( 這個我還不是很熟。。)在 BCBuilder 中 IDE 會自動将 VLCPlugin 封裝成 VCL控件 , 直接new即可,甚至不用手動delete。在VC中 先用MIDL生成wapper檔案,如果是MFC中,用CWnd.CreateControl建立,如果是WINX、WTL,可以用ATL::CAxWindow.CreateControl建立(這種方式似乎有記憶體洩漏問題。至于SDK。。。好像是用用CreateWindow。
btw:0.8.6提供的ActiveX有些BUG,在BCB中如果new了兩個以上的VLCPlugin ,動态delete掉一個,再建立就會出錯,多個VLCPlugin 播放停止操作也會出問題(fixed in v0.9.0 Nightly Builds)。
現在初步用AxtiveX在BCBuilder做了個示範,正在考慮直接封裝dll以獲得更多功能。