DirectShow和MediaPlayer有什么不同? |
答題得分者是:japhenchen
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
terence_lee
初階會員 發表:62 回覆:82 積分:28 註冊:2004-07-15 發送簡訊給我 |
media player 和directshow的不同在於
media player : (1)提供給end-user 使用的
(2)可直接播放想要播放的影片
(3)還提供一些有的沒有的功能(例如:最新新聞丫,廣播等等) DirectShow : (1)給程式開發者用的,用來建造屬於自己的player用的,成員
就是DirectX 家族的人,而DirectShow主要處理影片播放部分
註1
(2)他是不能直接拿來播影片的,因為他是個容器而不是個成品
如果你今天自己開發播放程式的話,他就像個總管般幫你處
理大小有關影像的部分
(3)最後,他能做到所有media player的功能,主要看你的鑽鈃 註1:media palyer 也要給開發者用的 windows media sdk
而其成員除了players 還有server的部分包含streaming
的部分
註2:所謂容器是提供一個共用的界面供使用都呼叫,而使用者不用去了解底層如
何運作. 而你所提的問題應該有其他的方式來測試,小弟稍微提供一下
(1)多找幾個avi的檔案來試看看,是否在dspack所提供的元件播的情況都會相同
而mediaplayer不會有此問題...
(2)即然你有用Dspack 的元件,那你應該知道filiters這個東西,每個影像格式
都有屬於他的filiters,但是同樣能播avi 的filiters效率卻不一定相同,因
為filiters也是開發都做的...如果你可以的話,多找幾個filiters來試試
看dspack 播出來會不會比較漂亮
(3)最後,media player 自己也是一個容器,所以和directshow 分屬不同的容
器,filiters可能寫法一樣,但是未必都是透過directshow 的技術在播放.. 如果你有興趣的話,可以去download directx SDK 回來看...會幫你更了解Dspack,因為他的底層就是呼叫directshow 去幫自己做事情的.. 先這醬子~~^_^y
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
directshow是目前被廣泛使用的技術,截至目前為止,大概找不到其他更好用的媒体流的解析播放系統了,你不會想去播放個divx或其他的mpeg4規格檔案,你還得去學著怎麼寫編解碼演算法,你也不會想要去到處找各家編解碼怎麼破解,想辦法在自己的程式上嵌入播放RMVB檔案的播放器吧?怎麼看都怎麼累。 使用MEDIAPLAYER的方法寫播放器真的很簡單,但你會發現,對付REALONE的RMVB、RA,還有QUICKTIME的MOV檔,MONKEY的APE檔,這時候MEDIAPLAYER的OCX根本不靈光(我懷疑是微軟刻意不想讓用戶用WMP播這幾家的檔案),有些人真的很天真,天真到寫一隻集結了各家播放器OCX到自己程式里,遇到AVI就把WMP給VISIBLE出來,遇到RMVB就把REALONE的OCX給SHOW出來~~不過都有一個下場,一定會出現內存過度使用的問題,遇到用戶沒有安裝某一家播放器的話,就根本無法啟動執行這支播放器 WindowsMediaPlayer6.2以上版本都是使用DIRECTSHOW開發的,你不信的話,你先在你的電腦上安裝一套VOBSUB(現在很流行的字幕機,使用DVD轉MPEG4或VCD的人大多會用),然後用WMP播放,你會看到右下角的托盤區出現一個綠色的箭頭符號,你在上面點擊滑鼠右鍵,最下面那幾行出現的就是各家FILTER的名稱,這些FILTER,只會在DIRECTSHOW的FILTERGRAPH自動鏈路表建立起來的時候才會出現。 至於SPEEDIS.AVI播出來的差異,這點得要問一下,你的WINDOWS和DIRECTX版本是什麼版的?我這里用DSPACK寫的播放器跟WMP10播出來的效果根本看不出差異的(二者放大者會有馬賽克,但一樣看不到明顯鉅齒),我的環境是XP SP2、DIRCECTX 9.0B,WMP10版,有加裝ACE MEDIA PACK V6.01編解碼包,顯示卡是NVIDIA GF5200U 128MB的顯示卡,CPU是P4 1.7G 你想要開發好DIRECTSHOW的話,最好是到微軟的MSDN下載DIRECTSHOW的SDK包,里面有相當多的範本,還有一個很重要的工具,GraphEdit....從這里你可以看到一個媒体檔案,是如何在directshow中運作的
。範本都是提供給VC++的,DELPHI無法直接使用,只能借助自身對C++語法的理解,想要自己開發filter的話,你得要熟悉使用DELPHI編寫COM Object,才有辦法寫的好(不然像我一知半解,前段時間寫歌詞.lrc的filter,寫出來真的是bug百出,記憶体釋放不當,後來幾乎放棄) 許下第一千零一個願望
有一天幸福會聽我的話
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
谢谢各位的关注。 我这里是WIN 2K,MEDIAPLAYER9,DirectX9。 用MediaPlayer9播放 Speeds.avi,放大到全屏幕,画面很平滑。 用Dspack来播放,我用的是Dspack的VideoWindow,把画面放大后,画面锯齿很严重。 我猜会不会是 Dspack 的 VideoWindow 处理画面和 MediaPlayer 不一样? 我猜 MediaPlayer 播放画面的时候使用了显示卡硬件加速来使画面平滑,但这也应该是 DirectShow 的一部分。不知道是不是用 Dspack 的时候要专门指定一个什么 Filter 才能做到平滑?
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
我前面可能没描述清楚。 我用 Dspack 来做播放。 1. 拖一个 FilterGraph1 到程序的Form上。
2. 拖一个DSVideoWindowEx21到程序的Form上。
3. 指定 DSVideoWindowsEx21.FilterGraph:=FilterGraph1
4. 用以下代码播放:
FilterGraph1.Active:=True; FilterGraph1.RenderFile("C:\Speedis.avi"); FilterGraph1.Play;这样就在那个 DsVideoWindowsEx21 里播放画面了。如果把画面放大,不单出锯齿,播放的速度也不够快,明显有停顿。 我试了,如果不用 DsVideoWindowsEx21 ,直接播放 FilterGraph1.Play,则会弹出来一个 ActiveMovie 窗口,在这个窗口里播放的画面,把窗口放大到全屏幕也很平滑,速度也够快,和 MediaPlayer 播放的效果没区别。 我的问题是,我想让播放窗口停在我的程序的画面里,而不是跳出来一个单独的ActiveMovie窗口,因此我才用了 Dspack 的DsVideoWindowsEx元件作为播放窗口。请问这个问题该如何处理呢? |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
报告: Delphi7, Dspack,一个 Form,拖了以下几个元件上来: 1.FilterGraph1; 2.5个 Filter,分别设定它的BaseFilter是GraphEdit里显示出来的5个Filter,分别是:AVI Splitter, AVI Decomporessor, Color Space Converter, Video Render 和 Default DirectSound Device 3. 一个DSVideoWindowEx21,设定它的FilterGraph:=FilterGraph1 Run 这个程序,播放 Speedis.avi,结果和没加那5个Filter不同了。没加那5个Filter元件的时候,播放速度很慢,并且锯齿严重。加了以后,播放速度和MediaPlayer一样了,也没锯齿了。但是,颜色不够。图象感觉是显示器颜色只有256的感觉,很多颜色变成了一个一个的色点。 如果干脆不要 DsVideoWindowEx,则程序在FilterGraph1.Play的时候,直接跳出 ActiveWindow 的窗口来播放,效果就和 MediaPlayer 一样。 怎么才能让 Dspack 的播放窗口播放出来的效果和 ActiveWindows 播放的效果一样呢?或者,变通一下,有没有办法让 ActiveWindow 窗口停靠在自己的程序的Form里呢?
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |