无法用MCI命令播放此视频文件。MCI报告:指定的参数超出指定命令范围

用格式工厂转了一个AVI格式的视频,大小有2.23个G,准备放在绘声绘影里编辑,但是拖进“绘”里面后,点击播放,出来一个对话框说:“无法用MCI命令播放此视频文件。MCI报告:指定的参数超出指定命令范围”。怎么办?我还等着用这个视频~~~~急死个人呐

多媒体 MCI 应用
媒体控制接口( Media Control Interface , MCI )在控制音频、视频等设备方面,提供了与设备无关的控制方法。所谓与“设备无关”是指 Windows 提供了开放的接口标准,用户或开发人员只需将多媒体设备生产厂商提供的驱动程序加入到 Windows 中,就可以加以利用,而不必考虑该设备的硬件信息。
每个 MCI 设备都由相应的驱动程序来管理,用户或应用软件开发人员只需向 MCI 发送简单的命令字符或代码就可以控制相关的设备。除一些标准设备外,多媒体设备的 MCI 驱动程序通常由该设备的生产厂家随产品一起提供, Microsoft 公司为这些厂家提供编写设备驱动程序的规范,以保证其能在 Windows 下正常工作。
Windows 应用程序通过设备的类型来区分设备,目前已定义的 MCI 设备类型如表 7.2 所示。
表 7.2MCI 所支持的常用的多媒体设备 设备类型
设备描述
类型

Animation
动画设备
复合型

Cdaudio
CD-Audio
简单型

Dat
数字音频磁带机

Digitalvideo
在某个窗口的数字视频

Other
未定义的 MCI 设备

Overlay
重叠设备(某个窗口的模拟视频)

Scanner
图像扫描仪

Sequencer
MIDI 音序器(文件扩展名为 .mid )
复合型

Videodisc
激光视盘播放器

Waveaudio
数字波形音频(文件扩展名为 .wav )

MCI的设备类型有两种 ,一是 简单设备,如 CD 、视盘演播器;二是复合设备(需要文件的设备,如数字视频及波形音频设备等。
如果需要通过 MCI 去控制设备,必须将相应的 MCI 驱动程序和设备的驱动程序(扩展名是 DRV )、 DLL 装入。 Windows 中的控制面板可完成 MCI 驱动程序的安装。在 Windows 中, WIN.INI 文件中的 [mci] 部分包括一个已安装了的设备类型表,如下所示。
[mci extensions]
wav=waveaudio
mid=Sequencer
rmi=Sequencer
avi=AVIVideo
m1v=MpegVideo
mpe=MpegVideo
dat=MpegVideo1
Windows 采用两种 MCI 接口与 MCI 设备通信。一是 命令消息接口函数,直接控制 MCI 设备;二是使用命令字符串接口函数,基于文本接口命令或命令脚本来控制 MCI 设备。
MCI 的命令消息接口传送方式
命令消息的函数及命令消息
Windows 多媒体扩充软件为使用命令消息接口发送 MCI 命令提供 3 个函数:
MciSendCommand 发送一个命令消息到一个 MCI 设备;
MciGetDeviceID 当打开一个设备时,返回设备的 ID 号;
MciGetErrorString 返回对应一个错误代码的字符串。
以 MciSendCommand 为例说明。利用消息和数据结构来给多媒体发送命令并接收设备传来的信息,用函数 MCISendCommand ,格式为:
DWORD MciSendCommand(WORD Device,Word Message,DWORD Param1,DWORD Param2)
其中 :DeviceID 标识一个 MCI 设备 ;
Message 标识要发出的消息 , 又称为命令消息如表 7 所示 .
Param1 为消息指定标记 ;
Param2 为指定一个指向消息数据结构的指针
MciSendCommand 调用成功返回 0, 否则返回一个错误代码 , 将错误代码发送到 MciGetErrorString 可获得对这个错误的文本描述 .
表 7.3MCI 的命令消息功能及分类表

命令消息名
功能
使用方式

MCI_SYSINFO
返回有关 MCI 设备的消息
直接由 MCI 解释的命令消息

MCI_BREAK
为一个指定的 MCI 设备设置一个中止键

MCI_SOUND
播放 WIN.INI 文件中的 [Sounds] 部分指定的系统声音

MCI_CLOSE
关闭一个 MCI 设备
所有的 MCI 设备支持的命令消息

MCI_GETDEVICE
获得一个 MCI 设备的性能

MCI_INFO
从一个 MCI 设备中得到有关的信息

MCI_OPEN
初始化一个 MCI 设备

MCI_STUTUS
从一个 MCI 设备返回有关的状态信息

MCI_LOAD
从一个磁盘文件加载数据
基本命令消息

MCI_PAUSE
暂停播放或记录

MCI_PLAY
开始传送输出数据

MCI_RECORD
开始传送输入数据

MCI_RESUME
重新开始播放或记录

MCI_SAVE
将数据存储到磁盘文件中

MCI_SEEK
向前或向后检索

MCI_SET
设置设备信息

MCI_STATUS
从一个 MCI 设备返回有关的状态信息

MCI_STOP
停止播放或记录

MCI 指令概述
MCI 指令可分为四类:系统指令( System Commands )、需求指令( Required Commands )、基本指令( Basic Commands )及扩展指令( Extended Commands ) , 各类的功能见表 7.4 。
表 7.4MCI 指令分类表 指令分类
说明

System
不经过多媒体设备,而由 MCI 本身直接解释并执行。

Required
取得多媒体设备的相关信息或开启、关闭设备命令有 capability 、 info 、 status 、 open 及 close 。

Basic
直接对多媒体设备做存取的动作,如 load 、 pause 、 set 、 status 及 stop 。

Extended
特定设备所具有的命令。

MCI 指令由一字符串组成,语法如下:
Command device_name arguments
其中:
Command 表示所使用的 MCI 指令,如表 7.5 。
表 7.5 MCI 命令表

命令
描述

capacity
请求获取某个设备能力的信息

info
获取某个设备的信息

(如该设备的硬件描述)

close
关闭在使用的设备

open
打开并初始化某个设备

Alias 表示打开声音文件的别名

pause
暂停正在播放和记录的设备

play
开始设备播放

From start_time to end_time

通常以毫秒为单位

record
开始设备记录

resume
恢复暂停设备和记录设备

seek
搜索指定的媒体位置

To position ,to start,to end

set
改变控制设置

status
请求设备状态的信息

stop
停止设备的播放或记录

device_name 表示设备类型、文件名称或别名( Alias )。对于不需要使用文件来播放或记录的多媒体设备,如 CDAudio 设备或激光视盘机, device_name 只要以设备类型表示即可。
对于有些设备,如语音设备或动画播放设备等须用到文件的复合设备,device_name 必须是文件名称才行。必须使用标准的扩展文件名, MCI 会根据扩展文件名自动判别所使用的设备类型。这些标准的扩展文件名,可以在 WIN.INI 中的 [MCI extension] 段中找到 , 至于别名,则是为了简化 MCI 指令字符串及避免使用重复的设备类型或文件名称。例如:打开 canyon.mid 文件并播放, MCI 命令语句
open c:\win\canyon.mid type sequencer
play c:\win\canyon.mid
可以简化为:
open c:\win\canyon.mid type sequencer alias MIDI
play MIDI
arguments 表示 MCI 语法中的参数部分,则是使用 MCI 指令时所需要的各种参数。例如使用 play 命令,可能就要用到 from 及 to 这两个参数来表示起始及结束的位置。
例如: play cdaudio from 4 to 6
这行指令表示要演凑 CD 光盘中第四首到第六首曲目。
MCI 指令的使用
打开及关闭 MCI 设备 在使用 MCI 设备之前,必须使用 Open 指令将它启动。至于系统能同时打开多少多媒体设备,完全取决于系统存储器的大小。
Open 指令的语法如下:
Open device_name arguments
在前面已介绍过, device_name 可能是设备名称或文件名称,完全取决于使用的多媒体设备是否需要文件而定。 MCI 将不需要文件的设备称为简单设备,需要文件的设备则为复合设备,这两种设备打开的方式也不同。表 6.4 列出了各种多媒体设备的类别。
注意, Device type 可在 WINDOWS 的 SYSTEM.INI 中 [MCI] 段中找到,通常在安装多媒体设备时,安装程序都会更新 SYSTEM.INI 中 [MCI] 段中,加入新的驱动程序。
[mci]
waveaudio=mciwave.drv
sequencer=mciseq.drv
cdaudio=mcicda.drv
avivideo=mciavi.drv
videodisc=mcipionr.drv
vcr=mcivisca.drv
等号“ = ”的左边表示 DeviceType ,右边表示控制此多媒体设备所需要的驱动程序。
打开简单型 MCI 设备。简单型设备只要在 device_name 的部分表示使用设备的类型就可以了,如: open cdaudio
打开复合型多媒体设备。复合型设备需要表明使用的文件,如:
open c:\cwin\chimes.wav type waveaudio
open c:\cwin\canyon.mid type sequencer
其中 type waveaudio 或 type sequencer 可以省略。因为 MCI 会根据扩展名 wav 及 mid 自动区别其设备名称。
关闭 MCI 设备 当不使用多媒体设备时可以使用 close 指令来关闭打开的设备。请注意,最好不要在程序刚开始执行时就打开设备,并直到程序结束才关闭设备,这样其他应用程序在该程序执行阶段无法使用该设备。
播放多媒体设备 Play 命令是用来播放多媒体设备(或其他使用的文件)的。如果只使用 play 指令,而不加任何参数,则多媒体设备会从目前播放的位置播放到文件结束为止。例如:
playcdaudiofrom3000to15000
表示播放 CD 盘的第 3 秒至 15 秒(以毫秒为单位)
取得 MCI 设备的信息 每种多媒体设备都有支持 capability 、 status 和 info 指令。这些指令是用来取得多媒体设备的各项信息及状态的。例如:
capability cdaudio can eject
这句 MCI 指令是询问使用的光盘驱动器是否有退出 CD 光盘的功能。
Status cdaudio mode
这句 MCI 指令执行后,会传回目前光盘驱动器的状态,是在播放中( playing )还是在暂停( paused ),等等。
Info waveaudio product
执行这句 MCI 指令后,会传当前使用的 Waveform 语音设备的产品名称。
参数的使用 在多媒体程序设计中为 MCI 指令设置合适的参数是十分重要的。常用的有 shareable 、 all 、 new 、 wait 等。
① 使用 shareable (可共享的)参数。如果在打开多媒体设备时,使用 shareable 参数,就能让不同的应用程序同时使用相同的多媒体设备。例如:
open cdaudio shareable
执行该 MCI 指令将 CD 光盘驱动器设定为共享设备,此时,应用程序无法预期该光盘驱动器的状态,因为它随时都可能被其他应用程序所使用而改变状态。注意不是每种多媒体设备都可设置为共享状态,大部分复合型设备都有无法设置为共享,对于该类设备,可采用以不同的别名多次打开的方法,来实现多个应用程序使用一个设备。
② 使用 ALL 参数。对于某些指令可用 ALL 参数来描述。使用了该参数, MCI 会依次将这个指令传送给每一个已打开的设备。例如:
close all
将关闭所有已打开的设备。
③ 使用 NEW 参数。 MCI 允许建立一个新文件。而不必给予文件名,只要在使用 save 指令存储前,描述指定的文件名即可。例如:
open newtype waveaudio alias sounds
record sounds
save sounds test. wav
close sounds
④ wait 参数。因为 MCI 指令在执行之后会立即将控制权交回,所以有时需要在 MCI 指令后加上参数 wait 。如果输入下面指令:
open e:\win\chimes.wav alias sounds
play sounds
stop sounds
执行的结果是听不到任何声音。因为 MCI 在执行 play 命令后,马上去执行 stop 命令。若将其改写如下,则能听到完整的声音了:
open e:\win\chimes.wav alias sounds
play sounds wait
stop sounds
以上只是介绍了 MCI 指令的一般用法,不同的操作指令及不同的参数,在此不详细说明。
命令字符串接口传送方式
Windows 多媒体扩充软件为使用命令字符串接口传送命令字符串提供了 3 个函数:
MciSendString 向一个 MCI 设备驱动程序发送一个命令字符串。这个函数同时也具有对于回调函数和返回字符串的参数。
语法格式如下:
DWORD Mcisendstring ( ipstrCommand, ipstrReturnString,WORD wReturnLenth,
hCallback);
其中: ipstrCommand 是 MCI 命令的字符串(用双引号);
ipstrReturnString 是存放返回代码的缓冲区地址;
wReturnLenth 是缓冲区长度;
hCallback 是返回函数地址。
MciGetErrorString 返回一个同错误代码相对应的文本描述字符串。若函数调用成功,返回返回 TRUE ,否则返回错误代码。
语法格式如下:
WORD MciGetErrorString ( DWORD Error,LpstrBuffer,WORD length )
其中: Error 是错误代码,是 Mcisendstring 或 Mcisendcommand 函数调用返回值。
LpstrBuffer 指向一个缓冲区指针,用来接收系统返回的文本描述;
Length 指定缓冲区的长度。
MciExecute 向一个 MCI 设备驱动程序程序发送一个命令字符串。
语法格式如下:
BOOL MciExecute ( LpstrCommand )
其中: LpstrCommand 是一个指向以 NULL 结束的控制命令字符串。若函数调用成功,返回 TRUE ,不成功返回 FALSE 。
温馨提示:答案为网友推荐,仅供参考