第二個題目是我的播放器,可以播放音頻和視頻。其實略懂計算機多媒體技術的人都清楚,音頻和視頻的差異具體是體現在文件格式上的。不同的音頻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();
}
}