程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> MCI(媒體控制接口)相關知識

MCI(媒體控制接口)相關知識

編輯:關於C語言

MCI(Media Control Interface)媒體控制接口是MircroSoft提供的一組多媒體設備和文件的標准接口,它的好處是可以方便地控制絕大多數多媒體設備包括音頻、視頻、影碟、錄像等多媒體設備,而不需要知道它們的內部工作狀況。但是古人雲:成也蕭何,敗也蕭何。MCI雖然看上去高大全,但對於一些高級應用來說,它是遠遠不夠的。

MCI的控制方式:

一般說來,程序員使用兩個函數就可以與MCI打交道了:

MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg, DWORD dwFlags, DWORD dwParam);

命令字符串方式,用接近於日常生活用語的方式發送控制命令,適用於高級編程如VB、TOOLBOOK等。

MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);

命令消息方式,用專業語法發送控制消息,適用於VC等語言編程,此方式直接與MCI設備打交道。

對於mciSendCommand,第一個參數指定了設備標識,這個標識會在程序員打開MCI設備時由系統提供。第二個參數指定將如何控制設備,詳細請查閱後面“MCI指令”一欄。第三個參數為訪問標識,第四個參數一般是一個數據結構,標識程序在訪問MCI時要的一些信息。有關詳細資料,請查閱本光盤配套書。

對於mciSendString,第一個參數為一串控制字符串,返回信息由系統填入第二個參數,第三個參數指明返回信息的最大長度,若對MCI裝置設定了"notify"標志則需要在第四個參數填上返回窗口句柄。

舉例:

mciSendCommand(DeviceID, MCI_CLOSE, NULL, NULL); // 關閉一個MCI設備

mciSendString("open aaa.avi", 0, 0, 0); // 打開文件"aaa.avi"

MCI的設備類型:

設備描述描述字符串說明

MCI_ALL_DEVICE_ID所有設備

MCI_DEVTYPE_ANIMATIONAnimation動畫設備

MCI_DEVTYPE_CD_AUDIOCdaudioCD音頻

MCI_DEVTYPE_DATDat數字音頻

MCI_DEVTYPE_DIGITAL_VIDEODigitalvideo數字視頻

MCI_DEVTYPE_OTHEROther未定義設備

MCI_DEVTYPE_OVERLAYOverlay重疊視頻

MCI_DEVTYPE_SCANNERScanner掃描儀

MCI_DEVTYPE_SEQUENCERSequencer MIDI序列器

MCI_DEVTYPE_VCRVcr合式錄像機

MCI_DEVTYPE_VIDEODISCVideodisc激光視盤

MCI_DEVTYPE_WAVEFORM_AUDIOwaveaudio Wave音頻

對於未在上面定義的MCI設備,用戶可查看system.ini文件中[mci]部分,例如:

[mci]

cdaudio=mcicda.drv

sequencer=mciseq.drv

waveaudio=mciwave.drv

avivideo=mciavi.drv

videodisc=mcipionr.drv

vcr=mcivisca.drv

ActiveMovie=mciqtz.drv

QTWVideo=mciqtw.drv

MPEGVideo=C:PROGRA~1XINGXINGMP~1xmdrv95.dll

其中最後兩句分別指明了Apple的QuickTime設備,設備名為"QTWVidio"、MPEG影像設備,設備名為"MPEGVideo"。

//------------------------------

// 廣告時間:

// 歡迎訪問 C++ Builder 研究 - http://www.ccrun.com

//------------------------------

在MCI編程中,既可以將設備描述當設備名,也可以將描述字符串當設備名,一個極端偷懶的辦法是程序員不要在程序中指定設備名,Windows將自動根據文件擴展名識別設備類型。

舉個例子來說,打開一個多媒體文件有以下三種方式:

[1]:自動識別:打開一個"WAV"文件

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = 0;

mciOpen.lpstrElementName = "aaa.wav";

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

[2]:指定設備描述:打開CD播放器

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = (LPSTR)MCI_DEVTYPE_CD_AUDIO ;

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mciOpen);

[3]:指定描述字符串: 打開一個AVI文件

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = "avivideo";

mciOpen.lpstrElementName = "aaa.avi";

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

注意三種打開方式中,函數第三個參數的區別,後面會講到這種區別。

MCI指令

MCI_BREAK設置中斷鍵,缺省是”CTRL+BREAK"

MCI_CAPTURE抓取當前幀並存入指定文件,僅用於數字視頻

MCI_CLOSE關閉設備

MCI_CONFIGURE彈出配置對話框,僅用於數字視頻

MCI_COPY拷貝數據至剪貼板

MCI_CUE延時播放或錄音

MCI_CUT刪除數據

MCI_DELETE刪除數據

MCI_ESCAPE僅用於激光視頻

MCI_FREEZE將顯示定格

MCI_GETDEVCAPS獲取設備信息

MCI_INDEX當前屏幕顯示與否,僅用於VCR設備

MCI_INFO獲取字符串信息

MCI_LIST獲取輸入設備數量,支持數字視頻和VCR設備

MCI_LOAD裝入一個文件

MCI_MARK取消或做一個記號,與MCI_SEEK配套

MCI_MARK取消或做一個記號,與MCI_SEEK配套

MCI_MONITOR為數字視頻指定報告設備

MCI_OPEN打開設備

MCI_PASTE粘帖數據

MCI_PAUSE暫停當前動作

MCI_PLAY播放

MCI_PUT設置源、目的和邊框矩形

MCI_QUALITY定義設備缺省質量

MCI_RECORD開始錄制

MCI_RESERVE分配硬盤空間

MCI_RESTORE拷貝一個bmp文件至幀緩沖

MCI_RESUME使一個暫停設備重新啟動

MCI_SAVE保存數據

MCI_SEEK更改媒體位置

MCI_SET設置設備信息

MCI_SETAUDIO設置音量

MCI_SETTIMECODE啟用或取消VCR設備的時間碼

MCI_SETTUNER設置VCR設備頻道

MCI_SETVIDEO設置video參數

MCI_SIGNAL在工作區上設置指定空間

MCI_STATUS獲取設備信息

MCI_STEP使播放設備跳幀

MCI_STOP停止播放

MCI_SYSINFO返回MCI設備信息

MCI_UNDO取消操作

MCI_UNFREEZE使使用MCI_UNFREEZE的視頻緩沖區恢復運動

MCI_UPDATE更新顯

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved