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

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

[复制链接]
发表于 2008-1-30 16:37:11 | 显示全部楼层 |阅读模式
MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。但是古人云:成也萧何,败也萧何。MCI虽然看上去高大全,但对于一些高级应用来说,它是远远不够的。
3 ~! p1 x7 x9 h, i/ e. x
0 n0 ~9 v+ r9 F6 }. o$ p! QMCI的控制方式:
9 q3 I2 K' C, c+ D+ U9 t& i0 e, a5 T) t6 G$ g) A+ H$ W
一般说来,程序员使用两个函数就可以与MCI打交道了:8 ~) n$ M6 @: H# n+ o0 I
- N1 I" t1 q; Y/ c
MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg, DWORD dwFlags, DWORD dwParam);
2 Q$ S% }1 d! t$ a, a  d0 e命令字符串方式,用接近于日常生活用语的方式发送控制命令,适用于高级编程如VB、TOOLBOOK等。
( Y/ S# }  M7 Y( g3 }5 ?! b0 y7 S: s0 R9 z6 r- S6 Z
MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);# r* b: E7 n% c1 P
命令消息方式,用专业语法发送控制消息,适用于VC等语言编程,此方式直接与MCI设备打交道。
8 H; G: S2 O. _$ ?. w% S7 l" f8 J- _# [3 M. Y( H- [7 o
对于mciSendCommand,第一个参数指定了设备标识,这个标识会在程序员打开MCI设备时由系统提供。第二个参数指定将如何控制设备,详细请查阅后面“MCI指令”一栏。第三个参数为访问标识,第四个参数一般是一个数据结构,标识程序在访问MCI时要的一些信息。有关详细资料,请查阅本光盘配套书。3 y  n$ a$ a( M: J  V
! I. K2 S* }# b5 d1 W( v) Q& H) t
对于mciSendString,第一个参数为一串控制字符串,返回信息由系统填入第二个参数,第三个参数指明返回信息的最大长度,若对MCI装置设定了"notify"标志则需要在第四个参数填上返回窗口句柄。
7 f- m: D0 P% Y, G
% x: T  x% ]6 V3 G7 h, r; E% n举例:) o' A1 W3 s( \  f1 c; Y$ _5 W6 ?, Z
mciSendCommand(DeviceID, MCI_CLOSE, NULL, NULL); // 关闭一个MCI设备; H3 q- x+ q6 W0 h. Y9 B$ X" l
mciSendString("open aaa.avi", 0, 0, 0); // 打开文件"aaa.avi"
- U' {+ q# J2 F& x! o! r/ U, I: T5 t! V
MCI的设备类型:8 U) T! ^* l' `( y/ n3 s
* ^. ]+ z( G  ~( H6 L5 x9 x: B
设备描述                    描述字符串      说明2 f+ w* B4 x- D6 ^; H0 s
MCI_ALL_DEVICE_ID                           所有设备
+ E  z% K- ?: I5 HMCI_DEVTYPE_ANIMATION       Animation       动画设备) }; J6 m" z$ z: S% U9 i
MCI_DEVTYPE_CD_AUDIO        Cdaudio         CD音频
6 G/ H8 p  N. z$ wMCI_DEVTYPE_DAT             Dat             数字音频. f( P1 V8 e3 ^# E! k5 i
MCI_DEVTYPE_DIGITAL_VIDEO   Digitalvideo    数字视频( e; M. ~8 O8 E# ~0 f7 H! Q& P8 V
MCI_DEVTYPE_OTHER           Other           未定义设备
- z1 x- P% Q) a$ D  c: C6 hMCI_DEVTYPE_OVERLAY         Overlay         重叠视频
4 c3 S+ \' y  K+ wMCI_DEVTYPE_SCANNER         Scanner         扫描仪
1 o( U3 w3 n  G3 v* X  u  N- p! Y, [MCI_DEVTYPE_SEQUENCER       Sequencer MIDI  序列器5 G9 J( d5 n% s6 V+ v% G: V
MCI_DEVTYPE_VCR             Vcr             合式录像机
- n) B+ H$ m3 k0 T+ C; F8 ^MCI_DEVTYPE_VIDEODISC       Videodisc       激光视盘
) j7 g" }" @- U3 J  q: b4 j, @MCI_DEVTYPE_WAVEFORM_AUDIO  waveaudio Wave  音频4 U/ W5 @: ?- u

5 Y9 a3 O# s2 N: X( ?对于未在上面定义的MCI设备,用户可查看system.ini文件中[mci]部分,例如:
' m: N7 H# Z- K5 P0 O/ ]% m! A" u; e) B# U& Q  H
[mci]
8 d( q# S/ z/ t! U% d$ ]0 W2 pcdaudio=mcicda.drv
! ]' g; t4 h( A7 _% G. Z% Ysequencer=mciseq.drv7 w# z5 d6 S2 V$ @& N1 V, A
waveaudio=mciwave.drv
/ ~3 q' l5 g& |avivideo=mciavi.drv" V( j  n7 Y  W+ P1 f1 |+ F
videodisc=mcipionr.drv- l( s2 {8 n6 I
vcr=mcivisca.drv
/ b) A+ p8 V! Z. `' BActiveMovie=mciqtz.drv$ F' X, e1 u) }  \( @
QTWVideo=mciqtw.drv
" {* d) T( {) z/ ~& F" O4 P5 OMPEGVideo=C:\PROGRA~1\XING\XINGMP~1\xmdrv95.dll
' I0 x/ }3 e; M) {$ f/ |) \& ]' t$ N8 p8 g0 o$ q- s8 s
其中最后两句分别指明了Apple的QuickTime设备,设备名为"QTWVidio"、MPEG影像设备,设备名为"MPEGVideo"。
( U: t8 e0 n+ \8 g//------------------------------
4 {) a3 \: ^' e5 V9 r* L( w// 广告时间:' Q" v( @, q+ N5 Y8 w7 d" w+ b
// 欢迎访问 C++ Builder 研究 - http://www.ccrun.com  N; ]; ^8 q% e/ _  O+ z6 F
//------------------------------# ^- ^" U1 q; A- s0 N8 U+ X" q
在MCI编程中,既可以将设备描述当设备名,也可以将描述字符串当设备名,一个极端偷懒的办法是程序员不要在程序中指定设备名,Windows将自动根据文件扩展名识别设备类型。- o+ v" U: o, `
举个例子来说,打开一个多媒体文件有以下三种方式:
; a7 |% l( j: k/ o( j: u
# ~! |& M: P# I[1]:自动识别:打开一个"WAV"文件
( l! ?: b, r: P1 yMCI_OPEN_PARMS mciOpen;
' l. P5 `* @. EmciOpen.lpstrDeviceType = 0;
/ ?( a; m  g, Q& i' |+ z8 L$ ]/ b" DmciOpen.lpstrElementName = "aaa.wav";
( ?/ [% d& M5 A4 }mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);) k: ?9 D0 }6 ?& k2 C# Q% l

. D/ v8 W2 f: O  X1 [9 n' F0 z[2]:指定设备描述:打开CD播放器
5 Z; t3 I! s) y+ [) T5 z3 o1 K+ pMCI_OPEN_PARMS mciOpen;
, n) X" b6 [4 `3 `. K$ imciOpen.lpstrDeviceType = (LPSTR)MCI_DEVTYPE_CD_AUDIO ;
$ R, ^( ^% ?6 r% @9 w( {1 e9 DmciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mciOpen);/ ^4 S. Z$ x3 R6 E. S/ l" S- n1 E

$ }3 D, z* o2 b& w4 h/ l[3]:指定描述字符串: 打开一个AVI文件
# D) L6 q! Z1 D. O$ p7 C* {/ ?MCI_OPEN_PARMS mciOpen;
. H/ j8 r% @" z1 w8 [% K( [. b9 HmciOpen.lpstrDeviceType = "avivideo";) Q. ^8 \" h, @& `% g0 k6 W
mciOpen.lpstrElementName = "aaa.avi";5 A! b! h6 L% n( v8 u
mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);; Y  o$ `6 G( t' h4 e( k  A- S" s! ]

( V" c! P. t: G注意三种打开方式中,函数第三个参数的区别,后面会讲到这种区别。+ s4 O( L, ]0 ?( X0 r
/ T% X) ^6 x  P+ I( f
MCI指令 ) f' x/ R: A# \. o

" B' A- V% w# V+ k- |# zMCI_BREAK        设置中断键,缺省是”CTRL+BREAK"
; y" j5 J) b4 h, g% ?) k7 O1 wMCI_CAPTURE      抓取当前帧并存入指定文件,仅用于数字视频% ~% s- f! b* B+ j0 p- A- ]
MCI_CLOSE        关闭设备! O/ z# M/ o# j# T
MCI_CONFIGURE    弹出配置对话框,仅用于数字视频
( R6 j' `3 Q3 W" T1 b5 fMCI_COPY         拷贝数据至剪贴板
6 j$ ~( ~7 @: K; v' TMCI_CUE          延时播放或录音0 T+ _4 T( x8 V, K6 j1 S
MCI_CUT          删除数据# y+ E/ E8 O( d$ T& }  X* s
MCI_DELETE       删除数据
" r6 Y" {9 _: S- N3 PMCI_ESCAPE       仅用于激光视频8 G! n( Q" Z1 M0 i% m
MCI_FREEZE       将显示定格
8 h. e) u# L* ^0 @, K) qMCI_GETDEVCAPS   获取设备信息9 R# S& v/ V# T: N) s7 x
MCI_INDEX        当前屏幕显示与否,仅用于VCR设备
, C# v& U5 L7 P9 S6 b/ `MCI_INFO         获取字符串信息- J3 q1 Z& Y1 q
MCI_LIST         获取输入设备数量,支持数字视频和VCR设备
, v- W8 T) l# p6 E9 }6 V& G) UMCI_LOAD         装入一个文件6 e8 u1 {* C) W# d& |
MCI_MARK         取消或做一个记号,与MCI_SEEK配套
! V6 L& R; p( x( c; O! ?( V* ^! x$ KMCI_MARK         取消或做一个记号,与MCI_SEEK配套" Z0 O0 e& U# K0 G+ \& K' _
MCI_MONITOR      为数字视频指定报告设备
1 ]$ W$ e: v6 y) jMCI_OPEN         打开设备2 U# R6 Q8 z+ g4 e- E) ^0 n' O
MCI_PASTE        粘帖数据: u4 S% l; K; c9 W
MCI_PAUSE        暂停当前动作. M0 q* D; `- `& \# O* q% d8 b
MCI_PLAY         播放
! k! r' V7 f" p4 fMCI_PUT          设置源、目的和边框矩形
8 {7 F2 z9 v. LMCI_QUALITY      定义设备缺省质量. [7 g: {# T  X+ R
MCI_RECORD       开始录制
* z+ [8 n7 P8 `MCI_RESERVE      分配硬盘空间
  _& U2 j. }. J1 ^4 f4 w+ ]MCI_RESTORE      拷贝一个bmp文件至帧缓冲
% l: K5 f# ~) {% d* H9 VMCI_RESUME       使一个暂停设备重新启动
1 L4 Q5 L  y, W* P- b+ WMCI_SAVE         保存数据
9 ]# d4 R2 ~: T7 S9 J7 KMCI_SEEK         更改媒体位置2 P- x% Z4 i9 r1 H
MCI_SET          设置设备信息1 x, z0 L7 f6 f; @& J6 _0 Z! P
MCI_SETAUDIO     设置音量
6 d- o6 R% `# y8 Y* r: iMCI_SETTIMECODE  启用或取消VCR设备的时间码) O) A) ?& X; V+ W
MCI_SETTUNER     设置VCR设备频道
* _& \7 F# Q4 aMCI_SETVIDEO     设置video参数
& V: ]/ r/ C& \5 X- e! [MCI_SIGNAL       在工作区上设置指定空间" P& ], c& I3 Q! `- l. M
MCI_STATUS       获取设备信息1 U: R6 P; b) G5 J( j! y4 h% z
MCI_STEP         使播放设备跳帧
. ?# Q" g$ y2 b' [. Q+ e/ fMCI_STOP         停止播放* x( q: H" I$ X* E8 e
MCI_SYSINFO      返回MCI设备信息% k) }0 ?; P& d
MCI_UNDO         取消操作) f1 t7 C8 t2 @$ c
MCI_UNFREEZE     使使用MCI_UNFREEZE的视频缓冲区恢复运动
$ N1 L! J" N: n# o) E7 k% V1 v& kMCI_UPDATE       更新显示区域6 q5 R2 l( q& n9 ?
MCI_WHERE        获取设备裁减矩形
) g, P: A% J; T. S' gMCI_WINDOW       指定图形设备窗口和窗口特性
. z" @9 n4 N, x+ ~+ D9 g9 D( z* ?, v* k) f$ g/ f
其中比较常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 02:57 , Processed in 0.033744 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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