第二個題目是我的播放器,可以播放音頻和視頻。其實略懂計算機多媒體技術的人都清楚,音頻和視頻的差異具體是體現在文件格式上的。不同的音頻mp3,midi,wav等其實是不同的編碼或者格式,同理不同的視頻avi,rm(rmvb),mov等其實也是不同的編碼格式,這些格式中,大多數都是不公開源代碼的,但是公開標准或者API接口。但編程調用依然很繁瑣,我們也沒有精力和能力去研究這些。
.Net本身不帶多媒體庫,但是具有與COM交互的強大能力。恰好,微軟DirectShow技術能滿足上述要求,而且可以跟.NET達到完美的結合。
DirectShow交互程序集是集成在DirectX中的,多數計算機都會有DirectX,微軟也提供下載。廢話少說,開始做吧。
第一,在項目中引用Interop.QuartzTypeLib.dll。這是DirectX的COM交互程序集,其實是個托管調用。其中的類庫和方法介紹最好還是看DirectX的SDK。這裡不班門弄斧了。
第二,播放打開的文件
public void RenderMedia(string mediaFileName) { clearUp(); try { objMedia = new FilgraphManager(); objMedia.RenderFile(mediaFileName); volMedia = objMedia as IBasicAudio; posMedia = objMedia as IMediaPosition; ctlMedia = objMedia as IMediaControl; eexMedia = objMedia as IMediaEventEx; eexMedia.SetNotifyWindow((int)this.Handle, WM_GRAPHNOTIFY, 0); mediaStatus = 1; mediaDuration = posMedia.Duration; volMedia.Volume = mediaVolum; Play(); } catch { MessageBox.Show("加載文件失敗!"); clearUp(); } }