找回密码
 注册
搜索
查看: 4440|回复: 0

MCI(媒体控制接口)相关知识

[复制链接]
发表于 2008-1-30 16:37:11 | 显示全部楼层 |阅读模式
MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。但是古人云:成也萧何,败也萧何。MCI虽然看上去高大全,但对于一些高级应用来说,它是远远不够的。# x" j. i3 R' A, O$ V6 V! H, K: i2 W

0 y) U/ k( v6 q6 {" g! @& L4 x- {' w, F0 `MCI的控制方式:
* y* W1 O+ ?5 b  R; v/ A8 H8 _7 r3 Y8 Q, H9 ]" \; h: V
一般说来,程序员使用两个函数就可以与MCI打交道了:
; k' O! o# c5 L8 D2 K* Z, d, e$ c9 j* V2 T1 z* C; S2 Q- \
MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg, DWORD dwFlags, DWORD dwParam);
% ?0 ~. W7 l5 t% |4 w命令字符串方式,用接近于日常生活用语的方式发送控制命令,适用于高级编程如VB、TOOLBOOK等。( d0 o5 R% ]3 n2 x, S9 m1 v9 V% {
/ W8 c7 X, {' w; Y2 E( F# y2 [- e2 ]; K
MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);, n' F: r! k0 ^6 ]) _- Z, s; R
命令消息方式,用专业语法发送控制消息,适用于VC等语言编程,此方式直接与MCI设备打交道。5 V/ c3 L3 P4 ]6 }: Y
; g3 x: `: y) W
对于mciSendCommand,第一个参数指定了设备标识,这个标识会在程序员打开MCI设备时由系统提供。第二个参数指定将如何控制设备,详细请查阅后面“MCI指令”一栏。第三个参数为访问标识,第四个参数一般是一个数据结构,标识程序在访问MCI时要的一些信息。有关详细资料,请查阅本光盘配套书。
+ `( r! R# ]# F/ p, R! M* N% n: K, k, L! ]  X# S" x* b
对于mciSendString,第一个参数为一串控制字符串,返回信息由系统填入第二个参数,第三个参数指明返回信息的最大长度,若对MCI装置设定了"notify"标志则需要在第四个参数填上返回窗口句柄。0 ?/ m  ~" J& @' S$ y3 x) ?
' z0 q! q& ^# b' i0 K6 u7 b, W
举例:$ B! J, I! s7 J8 Z; R/ m  ~" G1 N
mciSendCommand(DeviceID, MCI_CLOSE, NULL, NULL); // 关闭一个MCI设备1 i7 P  U- E  K( ?0 q
mciSendString("open aaa.avi", 0, 0, 0); // 打开文件"aaa.avi"; E( v) h' P( V( V1 w7 v6 r

4 M, i  L; M) r3 R* v* e' [MCI的设备类型:/ X. ]( ?* B3 @; y* `7 w
1 w$ H3 c6 X$ j% v( f
设备描述                    描述字符串      说明
; G. ^7 z& r7 t0 sMCI_ALL_DEVICE_ID                           所有设备
5 l% P7 z7 ^) B2 Y# @1 y) n, C$ j, L( eMCI_DEVTYPE_ANIMATION       Animation       动画设备
7 F# H; s& T; j' h2 `% v5 GMCI_DEVTYPE_CD_AUDIO        Cdaudio         CD音频
! ~, ~! }7 \8 l1 I7 y! W2 c: }& A8 x( SMCI_DEVTYPE_DAT             Dat             数字音频. i7 w: ~" c. O' x
MCI_DEVTYPE_DIGITAL_VIDEO   Digitalvideo    数字视频( w2 U5 Z) E2 a! [% V9 ]
MCI_DEVTYPE_OTHER           Other           未定义设备
3 w1 N$ O) G' {0 t9 mMCI_DEVTYPE_OVERLAY         Overlay         重叠视频% @( O. a8 I( m6 t3 G4 L
MCI_DEVTYPE_SCANNER         Scanner         扫描仪
  L# O( e& U# D: W# kMCI_DEVTYPE_SEQUENCER       Sequencer MIDI  序列器' v: R9 r0 g8 P0 I1 F* d5 F7 S9 T
MCI_DEVTYPE_VCR             Vcr             合式录像机
4 I4 y8 l- w& `) k' @MCI_DEVTYPE_VIDEODISC       Videodisc       激光视盘- U) k! o& q  E& W7 g
MCI_DEVTYPE_WAVEFORM_AUDIO  waveaudio Wave  音频4 N9 ^2 ~  I1 _0 @

, T  ]: m9 c; C# p  J7 X对于未在上面定义的MCI设备,用户可查看system.ini文件中[mci]部分,例如:
7 p% m7 [/ F$ W: a$ x' u; _+ G1 c0 ]5 U$ Z9 {
[mci]+ q0 x$ r# z2 q% [
cdaudio=mcicda.drv
# l9 ~; q3 j4 ]# L7 d$ S! ^sequencer=mciseq.drv- G  y. K" }! a8 ]# I6 e. t. A
waveaudio=mciwave.drv" z) u4 V8 U% E5 S" T+ e7 }
avivideo=mciavi.drv
! V, G0 G$ z6 q; dvideodisc=mcipionr.drv
) A8 R: G, l( Q6 M8 x0 X( Svcr=mcivisca.drv
! [* _2 m7 M$ F1 lActiveMovie=mciqtz.drv
% I1 `& Z- ^5 o4 Y, s0 p& F" R9 FQTWVideo=mciqtw.drv& j# L* k  H2 r# c8 N3 @
MPEGVideo=C:\PROGRA~1\XING\XINGMP~1\xmdrv95.dll
8 S! Z# P. J7 g# c6 n/ _  X7 p+ H' X' f. T) V
其中最后两句分别指明了Apple的QuickTime设备,设备名为"QTWVidio"、MPEG影像设备,设备名为"MPEGVideo"。
" a7 |# [( S& \* {//------------------------------
9 j: J4 @9 @; R9 h8 f+ g1 s8 R! y// 广告时间:
* \2 @1 v3 h$ E& Y. t// 欢迎访问 C++ Builder 研究 - http://www.ccrun.com
# O- ~  X1 ^: h6 K3 E//------------------------------
' G* `- E+ y4 Y. k" s! @在MCI编程中,既可以将设备描述当设备名,也可以将描述字符串当设备名,一个极端偷懒的办法是程序员不要在程序中指定设备名,Windows将自动根据文件扩展名识别设备类型。
# ?. B  s/ h8 Q1 y& s9 \: x5 n举个例子来说,打开一个多媒体文件有以下三种方式:
) s8 J' D; n. K9 I. C4 c4 ], L2 {8 R3 ?$ ]9 O: d
[1]:自动识别:打开一个"WAV"文件" h3 I  ~% G* v# z
MCI_OPEN_PARMS mciOpen;& [& ]/ A5 v# \' M. B# a
mciOpen.lpstrDeviceType = 0;
# K: B) H: Y. O* O/ @mciOpen.lpstrElementName = "aaa.wav";
0 G7 W& m7 O; [6 u* v6 g$ v9 I& fmciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);8 O, U, |/ [# a5 y. A' j
+ L. B1 ^; v/ n- k
[2]:指定设备描述:打开CD播放器- ]& o# I5 a2 J8 B
MCI_OPEN_PARMS mciOpen;. @& a5 N0 R& p
mciOpen.lpstrDeviceType = (LPSTR)MCI_DEVTYPE_CD_AUDIO ;+ s4 a3 ~) q4 Z( V2 W# t$ F
mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mciOpen);& n. r. u. I$ B: Q' {
! {2 ?7 K2 _; m
[3]:指定描述字符串: 打开一个AVI文件, n7 d; x5 d! C6 N
MCI_OPEN_PARMS mciOpen;
. n( ^8 a1 X: j& C+ ~+ ]mciOpen.lpstrDeviceType = "avivideo";2 U% a( @8 T- p5 I% k
mciOpen.lpstrElementName = "aaa.avi";
  j1 [$ w0 j  {- b$ fmciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
0 y3 k- r- j+ t7 f+ U/ P3 Z
' e: o4 A7 ^$ L) H; }: |注意三种打开方式中,函数第三个参数的区别,后面会讲到这种区别。
. a) m9 {7 M4 n: W0 C/ |
  l; d+ X0 e! _* eMCI指令 5 k# N& O% x# U
$ Y4 S: ?! ]3 W% ~$ D7 z' c
MCI_BREAK        设置中断键,缺省是”CTRL+BREAK"' n- t7 g, q9 Y! c1 P6 M6 m; u! P
MCI_CAPTURE      抓取当前帧并存入指定文件,仅用于数字视频+ c+ |% ^# Q8 ?
MCI_CLOSE        关闭设备
$ r: @( q) z! ~+ x, C  x. H. ]MCI_CONFIGURE    弹出配置对话框,仅用于数字视频( e2 b" C' F0 a
MCI_COPY         拷贝数据至剪贴板
7 E$ Q( s! K7 r! E% Q, yMCI_CUE          延时播放或录音
5 e# S2 A% Z/ M0 ?  b! k2 MMCI_CUT          删除数据8 v0 R1 t# g4 g8 G% j
MCI_DELETE       删除数据
1 n9 b% O0 N$ z. A9 D& n2 L. RMCI_ESCAPE       仅用于激光视频4 l. Z- u9 p1 l) B' t
MCI_FREEZE       将显示定格. c3 p7 p* ~0 U: }
MCI_GETDEVCAPS   获取设备信息
' f2 t# v5 m- x7 w; K, KMCI_INDEX        当前屏幕显示与否,仅用于VCR设备
. V( r4 G) P" |MCI_INFO         获取字符串信息7 z0 a" F8 e) k8 a- u! C% L
MCI_LIST         获取输入设备数量,支持数字视频和VCR设备
$ D) G& e6 H  M5 F7 q; XMCI_LOAD         装入一个文件2 C7 T: N) u% t. r
MCI_MARK         取消或做一个记号,与MCI_SEEK配套
8 ^: Z- ~# l  g( }; P" VMCI_MARK         取消或做一个记号,与MCI_SEEK配套
: N# K2 }3 \5 }) w2 NMCI_MONITOR      为数字视频指定报告设备+ [) M  E/ u, Y3 c
MCI_OPEN         打开设备6 j: [& G( I2 Z6 {
MCI_PASTE        粘帖数据
/ f. L: U5 _+ m. ]6 Z% \MCI_PAUSE        暂停当前动作9 t+ I4 z; w! H5 E
MCI_PLAY         播放
  k3 p; S- K5 b. GMCI_PUT          设置源、目的和边框矩形
. W" q4 {8 h5 t0 l  P; iMCI_QUALITY      定义设备缺省质量- a, o( r; e$ g; b0 b6 H3 \# |
MCI_RECORD       开始录制- ]* E) ]5 \( A0 H/ W7 R4 i3 T
MCI_RESERVE      分配硬盘空间& v# G! a- z' b
MCI_RESTORE      拷贝一个bmp文件至帧缓冲9 G& r* t- X6 |# S4 Y  s
MCI_RESUME       使一个暂停设备重新启动
0 M4 ~$ i" c0 b% uMCI_SAVE         保存数据3 C  Z5 G* n0 L9 N" J' x5 n0 ?
MCI_SEEK         更改媒体位置
: e  ~' l6 _9 M+ \MCI_SET          设置设备信息
0 x0 h9 R* z- X  p" h: HMCI_SETAUDIO     设置音量
0 x9 v1 k6 X! H( t3 P& KMCI_SETTIMECODE  启用或取消VCR设备的时间码
8 D0 J' n% Y. x; e) rMCI_SETTUNER     设置VCR设备频道
; o) k* y" j% QMCI_SETVIDEO     设置video参数& }+ x2 V) L4 b) h8 P1 u
MCI_SIGNAL       在工作区上设置指定空间* m  K# o- g1 l# }+ }
MCI_STATUS       获取设备信息: T4 x. ^" s0 O" C8 a
MCI_STEP         使播放设备跳帧/ ]1 N. W8 v' |& i
MCI_STOP         停止播放
( D4 T" d4 l7 w$ I  AMCI_SYSINFO      返回MCI设备信息$ }0 W/ d# n( V: l  h& V. H/ j
MCI_UNDO         取消操作
9 F# F7 q& D% m2 p: B( l1 I; _MCI_UNFREEZE     使使用MCI_UNFREEZE的视频缓冲区恢复运动$ f4 k4 J6 b$ C& ?7 b
MCI_UPDATE       更新显示区域
) z# X' o/ [  c6 U, kMCI_WHERE        获取设备裁减矩形3 Z& i5 Z. t2 J4 a5 u
MCI_WINDOW       指定图形设备窗口和窗口特性! D& E% B! c  y* V3 p7 y: W

0 x5 E! C4 I$ t3 E' _其中比较常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-11-15 01:43 , Processed in 0.018568 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表