Delen via


Audiostreams instellen

[De functie die is gekoppeld aan deze pagina, Windows Media Format 11 SDK, is een verouderde functie. Het is vervangen door Source Reader en Sink Writer. Bronlezer en Sink Writer zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken bronlezer en Sink Writer- in plaats van Windows Media Format 11 SDK, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]

Audiostreams zijn over het algemeen het eenvoudigst te configureren. Haal een streamconfiguratie op uit de codec met behulp van de methoden van IWMCodecInfo zoals beschreven in Stream-configuratiegegevens ophalen uit codecs. In de meeste gevallen moet u de instellingen niet wijzigen van de instellingen die zijn opgehaald.

De codec-indeling die u selecteert uit de opgesomde opties, hangt af van het beoogde gebruik van de ASF-bestanden die met het profiel zijn gemaakt. De beschrijving van de codec-indeling die is opgehaald door IWMCodecInfo2::GetCodecFormatDesc geeft een overzicht van de kenmerken van de indeling. Als in uw toepassing niet de beschrijvingen worden weergegeven die u wilt kiezen, kunt u QueryInterface- aanroepen op de interface IWMStreamConfig interface van de codec-indeling om de IWMMediaProps-interface op te halen. Vervolgens kunt u de WM_MEDIA_TYPE structuur ophalen door IWMMediaProps::GetMediaTypeaan te roepen. Door de WM_MEDIA_TYPE structuur en de WAVEFORMATEX- structuur te onderzoeken, kunt u de codec-indeling bepalen en deze vergelijken met uw vereisten.

Audio-indelingen voor A/V-synchronisatie krijgen

De Windows Media Audio-codec en Windows Media Audio Professional-codec ondersteunen indelingen voor alleen-audiobestanden en voor audio-/videobestanden. De indelingen met alleen audio zijn geoptimaliseerd voor bestanden met alleen audiogegevens, terwijl de audio-/video-indelingen zijn geoptimaliseerd voor audio die zich in een bestand met een videostream bevindt. Wanneer u codec-indelingen voor deze codecs opsommen, worden de audio-/video-indelingen weergegeven na de indelingen alleen-audio. De beschrijvingen van de audio-/video-indeling bevatten allemaal de tekenreeks (A/V).' U kunt de indelingen identificeren die zijn ontworpen voor audio-/videosynchronisatie via een programma door het aantal pakketten per seconde te controleren. Indelingen voor synchronisatie hebben 5 of meer pakketten per seconde als de bitsnelheid groter is dan of gelijk is aan 32.000 bits per seconde. Indelingen met bitsnelheden van minder dan 32.000 bits per seconde kunnen worden gebruikt met gesynchroniseerde video als ze 3 of meer pakketten per seconde gebruiken. Het codevoorbeeld in het Om audio-indelingen te zoeken onderwerp bevat de code die nodig is om deze controle uit te voeren:

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

Verkrijgen van Low-Delay Audio-indelingen

De Windows Media 9.1-codec en de Windows Media Audio 9.1 Professional-codec ondersteunen beide indelingen met lage vertraging. Deze indelingen hebben een kleiner buffervenster dan andere audio-indelingen. Audio met lage latentie is bedoeld om de prestaties te verbeteren in situaties waarin bestanden of streams vaak worden gewisseld, bijvoorbeeld bij een toepassing die een aantal liedjes in de gebruikersinterface voor streaming aanbiedt en gebruikers in staat stelt vrij tussen deze liedjes te schakelen.

Indelingen met lage vertraging zijn alleen beschikbaar in de CBR-modus (een-pass of twee-pass). De beschrijvingen van de indeling met lage vertraging bevatten allemaal de tekenreeks 'Lage vertraging'. U kunt de indelingen programmatisch identificeren door de bitsnelheidswaarde van de indeling te controleren. Aan de indelingen met lage vertraging worden bitsnelheden toegewezen die 1 kilobit kleiner zijn dan de bitsnelheden van de equivalente normale indeling. De Windows Media Audio 9.1-codec ondersteunt bijvoorbeeld een CBR-indeling met één pas met een bitsnelheid van 192kbbits. De equivalente indeling voor lage vertraging heeft een bitsnelheid van 191kbs. Bovendien zijn de indelingen met lage vertraging, met uitzondering van de 5 kbps mono-indeling die wordt ondersteund door de Windows Media Audio 9.1-codec, de enige indelingen met een afwijkende bitsnelheidswaarde.

Audio met variabele bitsnelheid configureren

Wanneer u een variabele bitsnelheid (VBR)-indeling nodig hebt voor een van de Windows Media-audiocodecs, kunt u deze ophalen door de opsommingsinstellingen in te stellen in de methode IWMCodecInfo3::SetCodecEnumerationSetting methode. Stel g_wszVBREnabled in op True en stel g_wszNumPasses in op 1 voor op kwaliteit gebaseerde VBR of 2 voor VBR met twee passen (beperkt of onbeperkt). Als u beperkte VBR met twee pass-VBR's gebruikt, moet u handmatig de maximale bitsnelheid en het buffervenster voor de stream instellen met behulp van de methoden van IWMPropertyVault- zoals beschreven in VBR-streams configureren.

In VBR-profielen op basis van kwaliteit bevat het nAvgBytesPerSec lid van de WAVEFORMATEX structuur het kwaliteitsniveau (1 tot en met 100) in de laagwaardige byte en zijn de drie hoogwaardige bytes ingesteld op 0x7fffff. Probeer de kwaliteitsinstelling niet te wijzigen door deze waarde handmatig te wijzigen; u moet de indeling gebruiken omdat deze wordt opgehaald uit de codec. Als u een andere kwaliteitswaarde wilt gebruiken, moet u formaten doorlopen totdat u er een vindt die aan uw behoeften voldoet. Bovendien worden nAvgBytesPerSec- niet bewaard in het ASF-bestand; wanneer u de WAVEFORMATEX- structuur verkrijgt voor een bestand dat is geopend met het lezerobject, bevat nAvgBytesPerSec een geschatte waarde die het gemiddelde aantal bytes per seconde vertegenwoordigt.

Notitie

Bij het configureren van audiostreams moet u nooit een waarde voor het audiobuffervenster hebben die groter is dan de waarde voor videostreams in het bestand. Normaal gesproken is dit geen probleem, omdat de waarden van het audiobuffervenster tussen 1,5 en 3 seconden moeten variëren en videowaarden tussen 3 en 5 seconden moeten variëren. Als een audiobuffervenster groter is dan een videobuffervenster, wordt het bestand afgespeeld met de streams die enigszins niet zijn gesynchroniseerd.

 

configuratie die gebruikelijk is voor alle streams

Streams configureren

Om audio-indelingen te vinden