Настройка видеопотоков
[Функция, связанная с этой страницей, пакет 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. Заданное значение должно быть меньше или равно максимальной поддерживаемой сложности для кодека.
Связанные разделы