VCR 服务
[与此页关联的功能(MCI)是一项旧功能。 它已被 MediaPlayer取代。 MediaPlayer 已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer 而不是 MCI。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
Windows 通过基于 VCR 的 MCI 命令集的设备驱动程序提供 VCR 服务。 本部分介绍 MCI 视频系统控制体系结构 (VISCA) 驱动程序,并介绍如何使用它来控制 VCR。
vcr 设备类型控制 VCR。 有关 VCR 设备识别的 MCI 命令的列表,请参阅 VCR 命令集。
MCI VISCA 驱动程序
MCI VISCA 驱动程序控制索尼 VISCA 兼容的VCR,例如 CVD-1000 VDeck。 VISCA 驱动程序控制磁带传输、通道优化器和 VCR 输入和输出通道。
使用 VCR 搜索和定位
VISCA 驱动程序使用两种方法跟踪 VCR 磁带传输中的录像带移动:时间码信息 和 磁带计数器。 Timecode 信息是在录像带上录制的计时信息。 大多数 VCR 允许录制时间码,而不会破坏音频和视频曲目。 磁带计数器估计通过录像带头获取位置的录像带的数量。
随着录像带从头到尾移动,时间码信息和磁带计数器都有所增加。 由于准确性,使用时间码信息定位录像带几乎总是比使用磁带计数器更好。
用于指定定位信息的 MCI 命令标志表示为时间依赖关系:“时间格式”、“持续时间”、“from”、“to”和“seek”。 (此外,状态“position”命令以当前时间格式返回其时间值。
VISCA 驱动程序使用 集“时间模式”命令选择要用于录像带的位置类型。 当时间模式设置为“timecode”时,状态“position”,设置“时间格式”命令使用视频录带上的时间码。 当时间模式设置为“counter”时,状态“position”,“时间格式”命令使用计数器。
如果不存在两个位置信息源,应用程序可以将时间模式设置为“检测”。 处于检测模式时,VISCA 驱动程序使用时间码信息定位以下任一情况:
- 打开驱动程序时,将显示时间码信息。
- 使用 集“门打开”命令更改录像带,并且录像带上存在时间码信息。
- “时间模式”命令重新发出集。
如果找不到时间码信息,驱动程序将使用磁带计数器。
若要确定当前位置方法,请发出 状态“时间类型”命令,该命令返回“timecode”或“counter”。 还可以通过使用 状态“时间模式”命令(返回“timecode”、“counter”或“detect”)来标识当前位置模式。
状态“counter”命令检索当前磁带计数器值,而不考虑当前定位方法;但是,只能将此计数器读取与 集“counter”命令一起使用。
VISCA 驱动程序可以使用 状态“timecode 类型”和 状态“帧速率”命令来检索在录像带上录制的本机时间码格式。 例如,如果时间码类型为“smpte”且帧速率为 25,则视频录录上录制的本机时间码格式为 SMPTE 25。
VISCA 驱动程序还可以使用 状态 返回“seconds”或“frames”的“counter resolution”命令来检索计数器解析。 计数器格式可能仍设置为 SMPTE 30,但返回值仅返回 0 帧。 如果当前时间类型为计数器,则此分辨率也适用于 状态“position”返回的值。
捕获帧
帧捕获命令为 帧捕获设备提供图像。 帧捕获设备是一个单独的硬件,能够读取和存储视频图像。 VISCA 驱动程序支持 冻结(MCI_FREEZE)命令来稳定用于捕获的静止图像。 此外,取消冻结(MCI_UNFREEZE)命令可用于在 冻结 命令后重启磁带传输。
冻结 命令为帧捕获设备提供高质量的稳定时间基图像。 此命令存在,因为设备可能并不总是在播放或暂停期间提供其最大质量的输出图像;此类视频图像不适合捕获。
取消冻结 命令会解锁磁带传输,并在 冻结 命令之前恢复传输模式。
当应用程序需要在 VCR 上录制视频图像时,请使用 冻结“input”命令或 提示(MCI_CUE)命令来录制图像。
选择输入
VISCA 驱动程序支持三种输入类型:视频、音频和时间码。 视频输入包括两个标准通道(第 1 行和第 2 行)、一个 SVideo 通道、一个辅助通道和一个来自内部优化器的通道。 音频输入包括两个标准通道(第 1 行和第 2 行),以及来自内部优化器的通道。 时间码输入在 VCR 的内部。
当 VCR 正在录制或停止磁带传输时,常规输出将携带当前选定的输入,当磁带传输播放或暂停时,它们携带录像带的内容。 受监视的输出携带与正常输出相同的信息,以及当前时间码和通道信息。
假设相应的外部输入已连接到 VCR,并且已决定要记录的内容,则可以选择要记录的输入。 例如,若要从“svideo”视频和“第 1 行”音频输入中录制或查看,可以使用 setvideo(MCI_SETVIDEO)和 setaudio(MCI_SETAUDIO) 命令来选择这些输入源。 可以使用 状态(MCI_STATUS)命令来验证这些选择。
默认情况下,监视器显示完全显示为输出的内容。 但是,有时,你可能希望在从另一个源录制时查看一个源。 这是使用优化器的常见做法。 例如,在录制通道 7 时,你可能想要观看通道 4。 在这种情况下,有两个逻辑优化器输入。 可以使用以下命令设置 VCR:
从另一个源录制时查看一个源
- 使用 settuner (MCI_SETTUNER) 命令选择要监视和录制的通道。
- 使用 setvideo 命令选择视频录制源。
- 使用 setaudio 命令选择音频录制源。
- 使用 setvideo 命令将通道 4 视频输入路由到受监视的输出,使其在屏幕上显示。
- 使用 setaudio 命令将通道 4 音频输入路由到受监视的输出以播放音频。
- 使用 状态 命令验证所选内容。
VISCA 驱动程序还支持 静音的音频和视频的特殊输入类型。 静音允许选择“无输入”,这在录制空白信号时很有用。
选择录制曲目
录像带上存在三种类型的录制曲目:视频、音频和时间码。 只有一个视频或时间码轨道,但可以使用多个音频轨道。执行此作时,请使曲目 1 成为主要音频轨道。
VISCA 驱动程序支持两种作模式:组装和插入。 在 汇编模式中,选择所有曲目进行记录。 在 插入模式中,可以独立选择曲目进行录制。 默认情况下,大多数 VCR 处于程序集模式。 使用 集(MCI_SET)命令更改这些模式。
录制和编辑
记录(MCI_RECORD)命令提供简单的录制,准确到起始位置的大约 1 秒。 若要更准确地录制,或者如果希望在同时作多个幻灯片时编辑视频内容,则应使用 提示(MCI_CUE)命令。
提示 命令准备设备进行录制或播放。 使用 提示“输入”命令来准备设备进行录制。 提示 命令是必需的,因为应用程序必须知道设备何时准备好执行命令(并且可能需要几分钟时间才能准备 播放(MCI_PLAY)或 记录 命令)。
VCR 通过查找 点内来准备录制或播放,这是使用 提示“from”命令指定的当前位置或位置。 但是,如果使用 提示 命令指定了“preroll”标志,则 VCR 将自身定位与点内距离。 “预注册”标志还表示 VCR 使用任何适用的编辑模式,因此使用“预注册”非常重要,尤其是在需要最准确的录制时。 (使用具有“可预注册”标志的 功能(MCI_GETDEVCAPS)命令检查预注册模式是否受支持。
注意
使用“from”和“to”位置进行记录时,“from”位置将包含在编辑中,并且“to”位置不是。
有关录制的详细信息,请参阅 录制。
编辑时使用时钟
编辑时,可能需要将段从一个 VCR 记录到另一个 VCR。 可以通过指定动作(播放或录制)、位置以及每个 VCR 的时间开始,在一个 VCR 上在特定的时间和位置开始录制,另一个 VCR 同时开始播放和位置。
这两个 VCR 必须使用相同的时钟进行这种类型的编辑;时钟有助于同步这两台设备。 可以使用具有“时钟 ID”标志的 状态(MCI_STATUS)命令来查询每个 VCR,来确定两个 VCR 是否共享同一个时钟。 如果 状态 命令返回的标识号相同,则设备使用相同的时钟。 作为共享资源,时钟可以连接到多个 VCR。 VISCA 驱动程序仅支持一个共享时钟。
还可以使用 状态“时钟递增率”命令来确定时钟分辨率。 此命令返回时钟每秒支持的递增数。 例如,如果时钟每毫秒更新一次,则命令将返回 1000 作为时钟增量速率。 使用增量速率的优点是,速率表示为整数;否则,增量将是一个(单精度或双精度)浮点值。 作为整数,作递增率是一个简单的作,并且不容易受到舍入错误的影响。 可以使用带有“clock 0”(零)标志的 集(MCI_SET)命令重置时钟。
发出 播放(MCI_PLAY),记录(MCI_RECORD),或 查找(MCI_SEEK)命令时,可以指定何时执行命令。 正在使用的 VCR 的特征决定了何时启动每个 VCR。 计时必须考虑到每个设备所需的预注册量以及完成用于设置编辑会话的 MCI 命令所需的时间。 为此,请检索时钟时间,并添加 5 到 10 秒的等待间隔。 (等待间隔必须足够长,才能让预注册和任何未完成的 MCI 命令完成执行。
若要确保等待时间足够长,请将 记录 命令放在应用程序中最后,并立即检查时间。 如果间隔太短,请重启 播放 命令。 或者,可以在脚本的最后一个命令之后立即检查时间,以验证是否有足够的时间发送和完成所有命令。