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

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

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

【问题讨论】:

    标签: c# dvd-burning imapi


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

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

    3. 要检查当前的写入速度,您可以使用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 的其他回答已经给出了更多细节。

      【讨论】:

        猜你喜欢
        • 2013-11-20
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 2022-01-02
        • 1970-01-01
        • 2014-12-17
        • 2016-07-15
        相关资源
        最近更新 更多