#c# #dvd-burning #imapi
#c# #запись dvd #imapi
Вопрос:
Кто-нибудь знает, как установить скорость записи CD / DVD (например, 4x, 10x) с помощью IMAPI2?
Кроме того, сначала мне нужно получить скорости, поддерживаемые носителем. Как я могу их получить?
Ответ №1:
-
Для установки скорости записи вы можете использовать метод IDiscFormat2Data::SetWriteSpeed из интерфейса IDiscFormat2Data. Это позволяет запросить максимальную скорость, поддерживаемую оптическими носителями, или указать желаемую скорость записи.
-
Чтобы получить поддерживаемые скорости записи устройством записи и текущим носителем, вы можете использовать метод IDiscFormat2Data::get_SupportedWriteSpeeds
-
Для проверки текущей скорости записи у вас есть метод IDiscFormat2Data::get_CurrentWriteSpeed.
Эти методы используют секторы в секунду вместо 4x, 10x и т.д. Вы можете конвертировать из одного в другой, используя следующие константы:
- IMAPI_SECTOR_SIZE Количество байтов в секторе.
- IMAPI_SECTORS_PER_SECOND_AT_1X_CD Базовая скорость вращения компакт-диска, измеряемая в секторах в секунду.
- IMAPI_SECTORS_PER_SECOND_AT_1X_DVD Базовая скорость вращения DVD-диска, измеряемая в секторах в секунду.
- IMAPI_SECTORS_PER_SECOND_AT_1X_BD Базовая скорость вращения диска Blu-ray, измеряемая в секторах в секунду.
из заголовка 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 изначально выпустила интерфейс IMAPI для C #. У него было много проблем. Вы можете прочитать больше об этом здесь. Итак, я использую этот исходный код (написанный Эриком Хадданом в Code Project) вместо копии, выпущенной Microsoft. Итак, вы можете увидеть некоторые различия в отношении документации.
Прежде чем вы начнете взаимодействовать со скоростью записи (get / set), вам необходимо выполнить некоторые начальные действия, такие как настройка записи. Я предполагаю, что вы знаете все это и пропускаете это в этом ответе, чтобы сократить длину.
Чтобы установить скорость записи, вам необязательно сначала получить поддерживаемые скорости записи:
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.