如何使用 IMAPI2 检索和设置刻录速度?

Posted

技术标签:

【中文标题】如何使用 IMAPI2 检索和设置刻录速度?【英文标题】:How to retrieve and set burn speed using IMAPI2? 【发布时间】:2011-08-02 18:50:36 【问题描述】:

有谁知道如何使用 IMAPI2 设置 CD/DVD 刻录速度(例如 4x、10x)?

另外,我首先需要获得媒体支持的速度。我怎样才能找回它们?

【问题讨论】:

【参考方案1】:

    要设置刻录速度,您可以使用IDiscFormat2Data 接口中的IDiscFormat2Data::SetWriteSpeed 方法。它可以让您请求光学媒体支持的最大速度或指定所需的刻录速度。

    为了获取刻录设备和当前媒体支持的写入速度,您可以使用方法IDiscFormat2Data::get_SupportedWriteSpeeds

    要检查当前的写入速度,您可以使用IDiscFormat2Data::get_CurrentWriteSpeed 方法。

这些方法使用每秒扇区而不是 4x、10x 等。您可以使用以下常量从一个扇区转换为另一个:

IMAPI_SECTOR_SIZE 扇区中的字节数。 IMAPI_SECTORS_PER_SECOND_AT_1X_CD CD 旋转的基本速度,以每秒扇区数为单位。 IMAPI_SECTORS_PER_SECOND_AT_1X_DVD DVD 旋转的基本速度,以每秒扇区数为单位。 IMAPI_SECTORS_PER_SECOND_AT_1X_BD 蓝光光盘旋转的基本速度,以每秒扇区数为单位。

来自 imapi2.h 头文件:

#define IMAPI_SECTORS_PER_SECOND_AT_1X_CD      75
#define IMAPI_SECTORS_PER_SECOND_AT_1X_DVD     680
#define IMAPI_SECTORS_PER_SECOND_AT_1X_BD      2195
#define IMAPI_SECTORS_PER_SECOND_AT_1X_HD_DVD  4568

【讨论】:

【参考方案2】:

Microsoft 最初发布了 C# 的 IMAPI 接口。它有很多问题。你可以阅读更多关于它的信息here。所以我正在使用这个源代码(由 Eric Haddan on Code Project)而不是微软发布的副本。因此,您可能会在文档方面看到一些差异。

在与写入速度(获取/设置)进行交互之前,您需要执行一些初始操作,例如设置记录器。我假设您知道所有这些并在此答案中跳过它以缩短长度。

要设置刻录速度,您可以选择首先获取支持的写入速度:

private string[] GetSupportedWriteSpeeds()

    string[] list = new string[msftDiscFormat2Data.SupportedWriteSpeedDescriptors.Length];
    for(int i = 0; i < msftDiscFormat2Data.SupportedWriteSpeedDescriptors.Length; i++)
    
        IWriteSpeedDescriptor objIWriteSpeedDescriptor = (IWriteSpeedDescriptor)msftDiscFormat2Data.SupportedWriteSpeedDescriptors[i];
        list[i] = objIWriteSpeedDescriptor.WriteSpeed.ToString();
    
    return list;

然后,根据上面收到的支持值,您可以设置写入速度:

private void SetWriteSpeed(int requestedSectorsPerSecond, bool rotationTypeIsPureCAV)

    /*selectedWritingSpeed
        Unit = Disc sectors per second.
        Values: -
        -1 = "Default OR Fastest" as documented in IMAPI documentation.
        [ANY VALUE] = Actual writing speed to set.
    */
    msftDiscFormat2Data.SetWriteSpeed(requestedSectorsPerSecond, rotationTypeIsPureCAV);

在上述方法中,参数requestedSectorsPerSecond 是您从之前的方法中收到的字符串数组的索引(写入速度)。您可以将旋转类型(纯 CAV)设置为false

以下来自Microsoft:

RequestedSectorsPerSecond

请求的写入速度,以每秒磁盘扇区为单位。

值 0xFFFFFFFF (-1) 请求使用媒体支持的最快速度进行写入。这是默认设置。

RotationTypeIsPureCAV

请求的转速控制类型。设置为 VARIANT_TRUE 以请求恒定角速度 (CAV) 转速控制类型。设置为 VARIANT_FALSE 以使用记录仪支持的另一种转速控制类型。默认值为 VARIANT_FALSE。

上面代码中使用的对象的名称是根据 IMAPI 本身。这就是为什么,我没有添加更多关于 IMAPI 接口的描述。 @rmp 的其他回答已经给出了更多细节。

【讨论】:

以上是关于如何使用 IMAPI2 检索和设置刻录速度?的主要内容,如果未能解决你的问题,请参考以下文章

IMAPI2 可以刻录大于 4Gb 的文件吗?

在磁盘中创建一个文件夹并使用 IMAPI 2 刻录到它

Windows XP 上的 IMAPI2 错误

在 Windows XP 中使用 .NET 刻录 DVD 需要哪些基本 COM 组件?

WiX Bootstrapper:如何从命令行设置刻录变量?

如何使用来自 IMAPI2 的 IFileSystemImage2 的 put_BootImageOptionsArray(获取 E_NOINTERFACE)?