Konfigurera ljudströmmar
[Funktionen som är associerad med den här sidan, Windows Media Format 11 SDK, är en äldre funktion. Det har ersatts av Source Reader och Sink Writer. Source Reader och Sink Writer har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder Source Reader och Sink Writer i stället för Windows Media Format 11 SDK, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Ljudströmmar är vanligtvis de enklaste att konfigurera. Hämta en strömkonfiguration från codec med hjälp av metoderna för IWMCodecInfo enligt beskrivningen i Hämta konfigurationsinformation från codecs. I de flesta fall bör du inte ändra inställningarna från de som hämtas.
Det codec-format som du väljer från de uppräknade beror på den avsedda användningen av ASF-filerna som skapats med profilen. Beskrivningen av codec-format som hämtas av IWMCodecInfo2::GetCodecFormatDesc sammanfattar formatets egenskaper. Om ditt program inte visar de beskrivningar som ska väljas mellan dem kan du anropa QueryInterface- på IWMStreamConfig--gränssnittet i codec-formatet för att hämta IWMMediaProps--gränssnittet. Sedan kan du hämta WM_MEDIA_TYPE-strukturen genom att anropa IWMMediaProps::GetMediaType. Genom att undersöka WM_MEDIA_TYPE struktur och WAVEFORMATEX struktur som den pekar på, kan du fastställa inställningarna för codec-formatet och jämföra dem med dina krav.
Hämta ljudformat för A/V-synkronisering
Windows Media Audio codec och Windows Media Audio Professional codec stöder både format för endast ljudfiler och för ljud-/videofiler. Endast ljudformat är optimerade för filer som endast innehåller ljuddata, medan ljud-/videoformaten är optimerade för ljud som finns i en fil med en videoström. När du räknar upp codec-format för dessa codecs kommer ljud-/videoformaten efter formaten endast för ljud. Beskrivningarna av ljud-/videoformatet innehåller strängen "(A/V)". Du kan identifiera de format som utformats för ljud-/videosynkronisering programmatiskt genom att kontrollera antalet paket per sekund. Format för synkronisering har 5 eller fler paket per sekund om bithastigheten är större än eller lika med 32 000 bitar per sekund. Format med bithastigheter som är mindre än 32 000 bitar per sekund kan användas med synkroniserad video om de använder 3 eller fler paket per sekund. Kodexemplet i avsnittet Att hitta ljudformat innehåller den kod som krävs för att göra den här kontrollen:
if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >=
((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
// Set this stream configuration as the new best match.
}
Hämta Low-Delay ljudformat
Windows Media 9.1 codec och Windows Media Audio 9.1 Professional codec stöder båda format med låg fördröjning. Dessa format har ett mindre buffertfönster än andra ljudformat. Ljud med låg fördröjning är avsett att förbättra prestanda i scenarier där filer eller strömmar växlas ofta. Till exempel ett program som listar ett antal låtar för strömning i användargränssnittet och gör det möjligt för användare att godtyckligt växla mellan dem.
Format med låg fördröjning är endast tillgängliga i CBR-läge (enpass eller tvåpass). Formatbeskrivningarna med låg fördröjning innehåller alla strängen "Låg fördröjning". Du kan identifiera formaten programmatiskt genom att kontrollera bithastighetsvärdet för formatet. Formaten med låg fördröjning tilldelas bithastigheter som är 1 kilobit mindre än bithastigheterna i motsvarande normalformat. Till exempel stöder Windows Media Audio 9.1-codec ett CBR-format med en enda gång med en bithastighet på 192 kbps. Motsvarande format med låg fördröjning har en bithastighet på 191 kbps. Med undantag för det monoformat på 5 kbps som stöds av Windows Media Audio 9.1 codec är dessutom formaten med låg fördröjning de enda format som har ett udda bithastighetsvärde.
Konfigurera ljud med variabel bithastighet
När du behöver ett VBR-format (variable bit rate) för någon av Windows Media-ljudkodarna kan du hämta det genom att ange uppräkningsinställningarna i IWMCodecInfo3::SetCodecEnumerationSetting-metoden. Ställ in g_wszVBREnabled på True och ange g_wszNumPasses till 1 för kvalitetsbaserad VBR eller 2 för tvåpass VBR (begränsad eller obegränsad). Om du använder begränsad VBR med två pass måste du manuellt ange den maximala bithastigheten och buffertfönstret för strömmen med hjälp av metoderna för IWMPropertyVault enligt beskrivningen i Konfigurera VBR-strömmar.
I kvalitetsbaserade VBR-profiler innehåller medlemmen nAvgBytesPerSec i strukturen WAVEFORMATEX kvalitetsnivån (1 till 100) i det lågrankade byte och de tre högrankade bytes är satta till 0x7fffff. Försök inte ändra kvalitetsinställningen genom att ändra det här värdet manuellt. du måste använda formatet när det hämtas från codec. Om du vill använda ett annat kvalitetsvärde måste du räkna upp format tills du hittar ett som uppfyller dina behov. Dessutom bevaras inte nAvgBytesPerSec- i ASF-filen. När du hämtar WAVEFORMATEX- struktur för en fil som har öppnats med läsarobjektet innehåller nAvgBytesPerSec ett ungefärligt värde som representerar det genomsnittliga antalet byte per sekund.
Not
När du konfigurerar ljudströmmar bör du aldrig ha ett ljudbuffertfönstervärde som är större än värdet för videoströmmar i filen. Normalt är detta inte ett problem, eftersom värden för ljudbuffertfönstret bör ligga mellan 1,5 och 3 sekunder och videovärdena ska ligga mellan 3 och 5 sekunder. Om ett ljudbuffertfönster är större än ett videobuffertfönster kommer filen att spelas upp med strömmarna något osynkroniserade.
Relaterade ämnen