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


Настройка видеопотоков

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

Видеопотоки более гибки в их конфигурации, чем аудиопотоки. Это связано с тем, что свойства кадров, составляющих видео, могут значительно отличаться от одного файла к следующему. При получении формата кодека для используемого кодека необходимо задать следующие значения для объектов конфигурации видеопотока.

Ценность Описание
Скорость передачи битов Вызовите IWMStreamConfig::SetBitrate, чтобы задать требуемое значение. Видеокодек попытается сжать носитель в соответствии с вашими спецификациями. Если ваши значения слишком низки, результирующее сжатое видео будет сильно ухудшено.
Окно буфера Вызовите IWMStreamConfig::SetBufferWindow, чтобы задать требуемое значение. Видеокодек попытается сжать носитель в соответствии с вашими спецификациями. Если ваши значения слишком низки, результирующее сжатое видео будет сильно деградировано.
WMVIDEOINFOHEADER.rcSource Верхний левый угол должен иметь значение 0,0. Нижний правый угол должен быть установлен по размерам кадра. Например, в потоке 640x480 эти параметры будут иметь значение 0,0 640 480.
WMVIDEOINFOHEADER.rcTarget Должен соответствовать rcSource.
WMVIDEOINFOHEADER.dwBitRate Должен соответствовать скорости, заданной для потока.
WMVIDEOINFOHEADER.AvgTimePerFrame Задайте приблизительное время для каждого кадра.
BITMAPINFOHEADER.biWidth Задайте ширину в пикселях требуемого размера кадра.
BITMAPINFOHEADER.biHeight Задайте высоту в пикселях требуемого размера кадра.

 

Видеоконтент не воспроизводится правильно, если он не закодирован в размер, равный кратному четырём для ширины и высоты. Исключением является несжатое видео RGB, которое может быть любого размера. Если вы попытаетесь задать размер, который не является кратным четырем, одна из следующих ошибок будет возвращена записывающим модулем:

  • NS_E_INVALID_INPUT_FORMAT
  • NS_E_INVALID_OUTPUT_FORMAT: Недопустимый формат вывода
  • NS_E_INVALIDPROFILE

Если вы используете кодирование с переменным битрейтом, может потребоваться внести другие корректировки. Дополнительные сведения см. в разделе Настройка потоков VBR.

Некоторые кодеки Видеокодеков Windows Media поддерживают несколько уровней сложности. Уровни сложности определяют алгоритмы, которые кодек будет использовать при кодировании видеопотока. При использовании высокого уровня сложности требуется больше вычислительных возможностей для кодирования и декодирования.

Каждый кодек, поддерживающий параметры сложности, предоставляет следующие параметры, которые можно получить с помощью метода IWMCodecInfo3::GetCodecProp.

Настройка Описание
g_wszComplexityMax Максимальный уровень качества, поддерживаемый кодеком.
g_wszComplexityOffline Предлагаемый уровень качества для автономного воспроизведения.
g_wszComplexityLive Предлагаемый уровень качества для потокового воспроизведения.

 

Чтобы задать сложность видеопотока в профиле, используйте метод IWMPropertyVault::SetProperty, используя свойство g_wszComplexity. Заданное значение должно быть меньше или равно максимальной поддерживаемой сложности для кодека.

Конфигурация, общая для всех потоков

настройка потоков

параметры сложности видео