Поделиться через


Принудительная вставка Key-Frame

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Кодек Windows Media Video 9 поддерживает принудительная вставка ключевых кадров. При передаче примера в модуль записи можно указать, что он должен быть закодирован как ключевой кадр.

Чтобы принудительно вставить ключевой кадр для примера, выполните следующие действия.

  1. Выделите буфер для хранения примера и получите указатель на интерфейс INSSBuffer , содержащий буфер, вызвав метод IWMWriter::AllocateSample.
  2. Получите расположение и размер буфера, созданного на шаге 1, вызвав МЕТОД INSSBuffer::GetBufferAndLength.
  3. Скопируйте пример данных в расположение буфера, убедившись, что переданный пример помещается в выделенный буфер. В зависимости от источника примеров для копирования данных можно использовать различные функции. Например, при копировании потока из файла AVI можно использовать функцию AVI AVI, AVIStreamRead.
  4. Обновите объем данных, используемых в буфере, чтобы отразить фактический размер выборки, вызвав МЕТОД INSSBuffer::SetLength.
  5. Получите указатель на интерфейс INSSBuffer3 , вызвав МЕТОД INSSBuffer::QueryInterface.
  6. Задайте пример в качестве принудительного ключевого кадра, вызвав метод INSSBuffer3::SetProperty , чтобы задать свойство WM_SampleExtensionGUID_OutputCleanPoint. Это свойство является логическим значением; Задайте для него значение TRUE.
  7. Передайте интерфейс буфера в модуль записи вместе с входным номером и временем выборки с помощью метода IWMWriter::WriteSample .

IWMWriter::WriteSample

Написание примеров

Кодировка переменной скорости (VBR)

Запись ФАЙЛОВ ASF