Konfigurieren von Audiostreams
Audiostreams sind in der Regel am einfachsten zu konfigurieren. Rufen Sie mithilfe der Methoden von IWMCodecInfo eine Streamkonfiguration aus dem Codec ab, wie unter Abrufen von Streamkonfigurationsinformationen aus Codecs beschrieben. In den meisten Fällen sollten Sie die Einstellungen der abgerufenen nicht ändern.
Das Codecformat, das Sie aus den aufgelisteten Formaten auswählen, hängt von der beabsichtigten Verwendung der ASF-Dateien ab, die mit dem Profil erstellt wurden. Die Von IWMCodecInfo2::GetCodecFormatDesc abgerufene Codecformatbeschreibung fasst die Merkmale des Formats zusammen. Wenn Ihre Anwendung die Beschreibungen nicht anzeigt, um zwischen ihnen zu wählen, können Sie QueryInterface auf der IWMStreamConfig-Schnittstelle des Codecformats aufrufen, um die IWMMediaProps-Schnittstelle abzurufen. Anschließend können Sie die WM_MEDIA_TYPE-Struktur abrufen, indem Sie IWMMediaProps::GetMediaType aufrufen. Indem Sie die WM_MEDIA_TYPE Struktur und die WAVEFORMATEX-Struktur untersuchen, auf die sie verweist, können Sie die Einstellungen des Codecformats ermitteln und sie mit Ihren Anforderungen vergleichen.
Der Windows Media Audio-Codec und der Windows Media Audio Professional-Codec unterstützen beide Formate für reine Audiodateien und für Audio-/Videodateien. Die reinen Audioformate sind für Dateien optimiert, die nur Audiodaten enthalten, während die Audio-/Videoformate für Audiodaten optimiert sind, die sich in einer Datei mit einem Videostream befinden. Beim Aufzählen von Codecformaten für diese Codecs kommen die Audio-/Videoformate nach den reinen Audioformaten. Die Beschreibungen des Audio-/Videoformats enthalten alle die Zeichenfolge "(A/V)". Sie können die Formate für die Audio-/Videosynchronisierung programmgesteuert identifizieren, indem Sie die Anzahl der Pakete pro Sekunde überprüfen. Formate für die Synchronisierung verfügen über fünf oder mehr Pakete pro Sekunde, wenn die Bitrate größer oder gleich 32.000 Bits pro Sekunde ist. Formate mit Bitraten unter 32.000 Bits pro Sekunde können mit synchronisiertem Video verwendet werden, wenn sie 3 oder mehr Pakete pro Sekunde verwenden. Das Codebeispiel im Thema To Find Audio Formats enthält den Code, der für diese Überprüfung erforderlich ist:
if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >=
((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
// Set this stream configuration as the new best match.
}
Der Windows Media 9.1-Codec und der Windows Media Audio 9.1 Professional-Codec unterstützen beide Formate mit geringer Verzögerung. Diese Formate verfügen über ein kleineres Pufferfenster als andere Audioformate. Audio mit niedriger Verzögerung soll die Leistung in Szenarien verbessern, in denen Dateien oder Streams häufig gewechselt werden. Beispielsweise eine Anwendung, die eine Reihe von Songs für das Streaming in der Benutzeroberfläche auflistet und Benutzern das willkürliche Wechseln zwischen diesen ermöglicht.
Formate mit geringer Verzögerung sind nur im CBR-Modus (ein- oder zweidurchlauf) verfügbar. Die Beschreibungen des Niedrigverzögerungsformats enthalten alle die Zeichenfolge "Niedrige Verzögerung". Sie können die Formate programmgesteuert identifizieren, indem Sie den Bitratenwert des Formats überprüfen. Den Formaten mit niedriger Verzögerung werden Bitraten zugewiesen, die 1 Kilobit kleiner sind als die Bitraten des entsprechenden Normalformats. Der Windows Media Audio 9.1-Codec unterstützt beispielsweise ein CBR-Format mit einem Durchlauf mit einer Bitrate von 192 KBit/s. Das entsprechende Format mit niedriger Verzögerung hat eine Bitrate von 191 KBit/s. Darüber hinaus sind mit Ausnahme des vom Codec Windows Media Audio 9.1 unterstützten Monoformats von 5 KBit/s die einzigen Formate mit geringer Verzögerung, die einen ungeraden Bitratenwert aufweisen.
Wenn Sie ein VBR-Format (Variable Bit Rate) für einen der Windows Media-Audiocodecs benötigen, können Sie es abrufen, indem Sie die Enumerationseinstellungen in der IWMCodecInfo3::SetCodecEnumerationSetting-Methode festlegen. Legen Sie g_wszVBREnabled auf True fest, und legen Sie g_wszNumPasses auf 1 für qualitätsbasierte VBR oder 2 für Zwei-Pass-VBR (eingeschränkt oder nicht eingeschränkt) fest. Wenn Sie eingeschränkte ZWEI-Pass-VBR verwenden, müssen Sie die maximale Bitrate und das Pufferfenster für den Stream manuell festlegen, indem Sie die Methoden von IWMPropertyVault verwenden, wie unter Konfigurieren von VBR-Streams beschrieben.
In qualitätsbasierten VBR-Profilen enthält das nAvgBytesPerSec-Member der WAVEFORMATEX-Struktur die Qualitätsebene (1 bis 100) im Byte mit niedriger Reihenfolge, und die drei hochgeordneten Bytes sind auf 0x7fffff festgelegt. Versuchen Sie nicht, die Qualitätseinstellung zu ändern, indem Sie diesen Wert manuell ändern. Sie müssen das Format verwenden, während es aus dem Codec abgerufen wird. Um einen anderen Qualitätswert zu verwenden, müssen Sie Formate auflisten, bis Sie eines finden, das Ihren Anforderungen entspricht. Außerdem wird nAvgBytesPerSec nicht in der ASF-Datei beibehalten. wenn Sie die WAVEFORMATEX-Struktur für eine Datei abrufen, die mit dem Reader-Objekt geöffnet wurde, enthält nAvgBytesPerSec einen ungefähren Wert, der die durchschnittliche Anzahl von Bytes pro Sekunde darstellt.
Hinweis
Beim Konfigurieren von Audiostreams sollten Sie niemals über einen Wert für das Audiopufferfenster verfügen, der größer als der Wert für alle Videostreams in der Datei ist. Normalerweise ist dies kein Problem, da die Werte des Audiopufferfensters zwischen 1,5 und 3 Sekunden und die Videowerte zwischen 3 und 5 Sekunden liegen sollten. Wenn ein Audiopufferfenster größer als ein Videopufferfenster ist, wird die Datei mit den Streams leicht außerhalb der Synchronisierung wiedergegeben.