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

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

Формат кодека, который вы выбираете из перечисленного, зависит от предполагаемого использования ASF-файлов, сделанных с помощью профиля. Описание формата кодека, полученное IWMCodecInfo2::GetCodecFormatDesc , обобщает характеристики формата. Если приложение не отображает описания для выбора между ними, можно вызвать QueryInterface в интерфейсе IWMStreamConfig формата кодека, чтобы получить интерфейс IWMMediaProps . Затем можно получить структуру WM_MEDIA_TYPE , вызвав IWMMediaProps::GetMediaType. Изучив структуру WM_MEDIA_TYPE и структуру WAVEFORMATEX , на которую она указывает, можно определить параметры формата кодека и сравнить их с требованиями.

Получение аудиоформатов для синхронизации аудио/видео

Аудиокодек Windows Media и кодек Windows Media Audio Professional поддерживают форматы только для звуковых файлов, а также для звуковых и видеофайлов. Форматы только для аудио оптимизированы для файлов, содержащих только звуковые данные, а форматы аудио и видео оптимизированы для аудиофайла, который находится в файле с видеопотоком. При перечислении форматов кодеков для этих кодеков форматы аудио- и видео поступают после аудиоформатов. Все описания аудио- и видеоформатов содержат строку "(A/V)". Форматы, предназначенные для синхронизации звука и видео, можно определить программным способом, проверив количество пакетов в секунду. Форматы синхронизации имеют 5 или более пакетов в секунду, если скорость передачи превышает 32 000 бит в секунду. Форматы со скоростью менее 32 000 бит в секунду можно использовать с синхронизированным видео, если они используют 3 или более пакетов в секунду. Пример кода в разделе "Поиск аудиоформатов" содержит код, необходимый для выполнения этого проверка:

if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >= 
       ((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
    // Set this stream configuration as the new best match.
}

Получение Low-Delay аудиоформатов

Кодек Windows Media 9.1 и windows Media Audio 9.1 Professional поддерживают форматы с низкой задержкой. Эти форматы имеют меньшее окно буфера, чем другие аудиоформаты. Звук с низкой задержкой предназначен для повышения производительности в сценариях, где файлы или потоки будут часто переключаться; например, приложение, которое перечисляет несколько песен для потоковой передачи в пользовательском интерфейсе и позволяет пользователям произвольно переключаться между ними.

Форматы с низкой задержкой доступны только в режиме CBR (один проход или два прохода). Описания формата с низкой задержкой содержат строку "Низкая задержка". Вы можете определить форматы программным способом, проверив значение скорости формата. Форматам с низкой задержкой назначается скорость передачи, которая на 1 килобит меньше скорости битов эквивалентного нормального формата. Например, кодек Windows Media Audio 9.1 поддерживает однопроходный формат CBR со скоростью 192 Кбит/с. Эквивалентный формат с низкой задержкой имеет скорость 191 кбит/с. Кроме того, за исключением моноформата 5 Кбит/с, поддерживаемого кодеком Windows Media Audio 9.1, форматы с низкой задержкой являются единственными форматами, имеющими нечетное значение скорости.

Настройка звука с переменной скоростью

Если вам нужен формат переменной скорости (VBR) для одного из звуковых кодеков Windows Media, его можно получить, задав параметры перечисления в методе IWMCodecInfo3::SetCodecEnumerationSetting . Задайте для g_wszVBREnabled значение True, а для параметра g_wszNumPasses значение 1 для VBR на основе качества или 2 для двухпрохавной VBR (ограниченной или неограниченной). При использовании ограниченного двухпрохожего VBR необходимо вручную задать максимальную скорость передачи и окно буфера для потока с помощью методов IWMPropertyVault , как описано в разделе Настройка потоков VBR.

В профилях VBR на основе качества член nAvgBytesPerSec структуры WAVEFORMATEX содержит уровень качества (от 1 до 100) в байте низкого порядка, а три байта высокого порядка имеют значение 0x7fffff. Не пытайтесь изменить параметр качества, изменив это значение вручную; Необходимо использовать формат , как он извлекается из кодека. Чтобы использовать другое значение качества, необходимо перечислять форматы, пока не найдете тот, который соответствует вашим потребностям. Кроме того, nAvgBytesPerSec не будет сохранен в ASF-файле; При получении структуры WAVEFORMATEX для файла, открытого с помощью объекта reader, nAvgBytesPerSec содержит приблизительное значение, представляющее среднее число байтов в секунду.

Примечание

При настройке аудиопотоков никогда не должно быть значения окна звукового буфера, превышающее значение для любых видеопотоков в файле. Обычно это не проблема, так как значения окна буфера звука должны находиться в диапазоне от 1,5 до 3 секунд, а значения видео должны находиться в диапазоне от 3 до 5 секунд. Если окно звукового буфера больше, чем окно буфера видео, файл будет воспроизводиться с потоками, которые немного не синхронизированы.

 

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

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

Поиск аудиоформатов