線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3817
推到 Plurk!
推到 Facebook!

DirectShow和MediaPlayer有什么不同?

答題得分者是:japhenchen
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-27 13:20:25 IP:218.18.xxx.xxx 未訂閱
既然 DirectShow 是MS在Windows 下的媒体播放技术,我猜 MediaPlayer 也应该是采用的 DirectShow 的技术来播放电影。 当我用 Dspack 元件来播放 DELPHI 带的 Speed.avi,把画面放大的全屏幕的时候,画面有明显的锯齿(马赛克),不够平滑 当我用 MediaPlayer 来播放 Speed.avi 把画面放大的全屏幕的时候却很平滑. why?
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-06 18:03:09 IP:211.74.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-08 12:11:43 IP:219.134.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-13 18:02:01 IP:218.17.xxx.xxx 未訂閱
谢谢各位的关注。 我这里是WIN 2K,MEDIAPLAYER9,DirectX9。 用MediaPlayer9播放 Speeds.avi,放大到全屏幕,画面很平滑。 用Dspack来播放,我用的是Dspack的VideoWindow,把画面放大后,画面锯齿很严重。 我猜会不会是 Dspack 的 VideoWindow 处理画面和 MediaPlayer 不一样? 我猜 MediaPlayer 播放画面的时候使用了显示卡硬件加速来使画面平滑,但这也应该是 DirectShow 的一部分。不知道是不是用 Dspack 的时候要专门指定一个什么 Filter 才能做到平滑?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-13 18:20:15 IP:218.17.xxx.xxx 未訂閱
另外:请教,用 Dspack 的话,如何在程序里按照 GraphEdit 里显示的 Filter 的连接,自己把几个 Filter 连接起来?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-13 18:41:53 IP:218.17.xxx.xxx 未訂閱
我前面可能没描述清楚。    我用 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-13 20:37:54 IP:218.17.xxx.xxx 未訂閱
报告: 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里呢?
系統時間:2024-05-05 22:03:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!